From 7063d310d3c715069dcd17c9ca1a17f0c2a1daa5 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Mon, 12 Nov 2007 21:51:54 +0000 Subject: [PATCH 001/263] Fixed amb1154 and another kick bug with sm_reserve_type 1 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401682 --- plugins/reservedslots.sp | 77 +++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/plugins/reservedslots.sp b/plugins/reservedslots.sp index e4ebe293..0715a7f3 100644 --- a/plugins/reservedslots.sp +++ b/plugins/reservedslots.sp @@ -90,10 +90,8 @@ public OnConfigsExecuted() } } -public Action:OnTimedKick(Handle:timer, any:value) -{ - new client = GetClientOfUserId(value); - +public Action:OnTimedKick(Handle:timer, any:client) +{ if (!client || !IsClientInGame(client)) { return Plugin_Handled; @@ -101,6 +99,8 @@ public Action:OnTimedKick(Handle:timer, any:value) KickClient(client, "%T", "Slot reserved", client); + SetVisibleMaxSlots(GetClientCount(false), g_MaxClients - GetConVarInt(sm_reserved_slots)); + return Plugin_Handled; } @@ -113,32 +113,45 @@ public OnClientPostAdminCheck(client) new clients = GetClientCount(false); new limit = g_MaxClients - reserved; new flags = GetUserFlagBits(client); - - if (clients <= limit || IsFakeClient(client) || flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION) + + new type = GetConVarInt(sm_reserve_type); + + if (type == 0) { - if (GetConVarBool(sm_hide_slots)) + if (clients <= limit || IsFakeClient(client) || flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION) { - SetVisibleMaxSlots(clients, limit); + if (GetConVarBool(sm_hide_slots)) + { + SetVisibleMaxSlots(clients, limit); + } + + return; } - new type = GetConVarInt(sm_reserve_type); - - if (type == 1) - { - new target = SelectKickClient(); - - if (target) + /* Kick player because there are no public slots left */ + CreateTimer(0.1, OnTimedKick, client); + } + else + { + if (clients > limit) + { + if (flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION) { - /* Kick public player to free the reserved slot again */ - CreateTimer(0.1, OnTimedKick, GetClientUserId(target)); + new target = SelectKickClient(); + + if (target) + { + /* Kick public player to free the reserved slot again */ + CreateTimer(0.1, OnTimedKick, target); + } + } + else + { + /* Kick player because there are no public slots left */ + CreateTimer(0.1, OnTimedKick, client); } } - - return; } - - /* Kick player because there are no public slots left */ - CreateTimer(0.1, OnTimedKick, GetClientUserId(client)); } } @@ -161,7 +174,7 @@ public SlotsChanged(Handle:convar, const String:oldValue[], const String:newValu SetVisibleMaxSlots(clients, limit) { - new num = clients + 1; + new num = clients; if (clients == g_MaxClients) { @@ -186,7 +199,7 @@ SelectKickClient() new Float:latency; for (new i=1; i<=g_MaxClients; i++) - { + { if (!IsClientConnected(i)) { continue; @@ -198,13 +211,17 @@ SelectKickClient() { continue; } + + latency = 0.0; if (IsClientInGame(i)) - { - latency = GetClientAvgLatency(i, NetFlow_Both); + { + latency = GetClientAvgLatency(i, NetFlow_Outgoing); + + LogMessage("Latency : %f",latency); if (IsClientObserver(i)) - { + { specFound = true; if (latency > highestSpecLatency) @@ -214,12 +231,8 @@ SelectKickClient() } } } - else - { - latency = 0.0; - } - if (latency > highestLatency) + if (latency >= highestLatency) { highestLatency = latency; highestLatencyId = i; From fcb362da09dc3e0e11e03d11866b574b19419648 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Tue, 13 Nov 2007 16:36:50 +0000 Subject: [PATCH 002/263] fixed amb1148, formatting large float numbers produced garbage (thanks PM!) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401683 --- core/sm_stringutil.cpp | 210 +++++++++++++++++++++++++++-------------- 1 file changed, 140 insertions(+), 70 deletions(-) diff --git a/core/sm_stringutil.cpp b/core/sm_stringutil.cpp index 35e36b0b..e94ff44e 100644 --- a/core/sm_stringutil.cpp +++ b/core/sm_stringutil.cpp @@ -207,7 +207,9 @@ void AddString(char **buf_p, size_t &maxlen, const char *string, int width, int break; } } - } else { + } + else + { while (string[size++]); size--; } @@ -234,78 +236,125 @@ void AddString(char **buf_p, size_t &maxlen, const char *string, int width, int *buf_p = buf; } -void AddFloat(char **buf_p, size_t &maxlen, double fval, int width, int prec) +void AddFloat(char **buf_p, size_t &maxlen, double fval, int width, int prec, int flags) { - char text[32]; - int digits; - double signedVal; - char *buf; - int val; - - // get the sign - signedVal = fval; - if (fval < 0) - { - fval = -fval; - } - - // write the float number - digits = 0; - val = (int)fval; - do - { - text[digits++] = '0' + val % 10; - val /= 10; - } while (val); - - if (signedVal < 0) - { - text[digits++] = '-'; - } - - buf = *buf_p; - - while ((digits < width) && maxlen) - { - *buf++ = ' '; - width--; - maxlen--; - } - - while ((digits--) && maxlen) - { - *buf++ = text[digits]; - maxlen--; - } - - *buf_p = buf; + int digits; // non-fraction part digits + double tmp; // temporary + char *buf = *buf_p; // output buffer pointer + int val; // temporary + int sign = 0; // 0: positive, 1: negative + int fieldlength; // for padding + int significant_digits = 0; // number of significant digits written + const int MAX_SIGNIFICANT_DIGITS = 16; + // default precision if (prec < 0) { prec = 6; } - // write the fraction - digits = 0; - while (digits < prec) + + // get the sign + if (fval < 0) { - fval -= (int)fval; - fval *= 10.0; - val = (int)fval; - text[digits++] = '0' + val % 10; + fval = -fval; + sign = 1; } - if ((digits > 0) && maxlen) + // compute whole-part digits count + digits = (int)log10(fval) + 1; + + // Only print 0.something if 0 < fval < 1 + if (digits < 1) { - buf = *buf_p; - *buf++ = '.'; + digits = 1; + } + + // compute the field length + fieldlength = digits + prec + ((prec > 0) ? 1 : 0) + sign; + + // minus sign BEFORE left padding if padding with zeros + if (sign && maxlen && (flags & ZEROPAD)) + { + *buf++ = '-'; maxlen--; - for (prec = 0; maxlen && (prec < digits); prec++) + } + + // right justify if required + if ((flags & LADJUST) == 0) + { + while ((fieldlength < width) && maxlen) { - *buf++ = text[prec]; + *buf++ = (flags & ZEROPAD) ? '0' : ' '; + width--; maxlen--; } - *buf_p = buf; } + + // minus sign AFTER left padding if padding with spaces + if (sign && maxlen && !(flags & ZEROPAD)) + { + *buf++ = '-'; + maxlen--; + } + + // write the whole part + tmp = pow(10.0, digits-1); + while ((digits--) && maxlen) + { + if (++significant_digits > MAX_SIGNIFICANT_DIGITS) + { + *buf++ = '0'; + } + else + { + val = (int)(fval / tmp); + *buf++ = '0' + val; + fval -= val * tmp; + tmp *= 0.1; + } + maxlen--; + } + + // write the fraction part + if (maxlen) + { + *buf++ = '.'; + maxlen--; + } + + tmp = pow(10.0, prec); + + fval *= tmp; + while (prec-- && maxlen) + { + if (++significant_digits > MAX_SIGNIFICANT_DIGITS) + { + *buf++ = '0'; + } + else + { + tmp *= 0.1; + val = (int)(fval / tmp); + *buf++ = '0' + val; + fval -= val * tmp; + } + maxlen--; + } + + // left justify if required + if (flags & LADJUST) + { + while ((fieldlength < width) && maxlen) + { + // right-padding only with spaces, ZEROPAD is ignored + *buf++ = ' '; + width--; + maxlen--; + } + } + + // update parent's buffer pointer + *buf_p = buf; } void AddUInt(char **buf_p, size_t &maxlen, unsigned int val, int width, int flags) @@ -366,9 +415,12 @@ void AddInt(char **buf_p, size_t &maxlen, int val, int width, int flags) { /* we want the unsigned version */ unsignedVal = abs(val); - } else { + } + else + { unsignedVal = val; } + do { text[digits++] = '0' + unsignedVal % 10; @@ -422,7 +474,9 @@ void AddHex(char **buf_p, size_t &maxlen, unsigned int val, int width, int flags if (flags & UPPERDIGITS) { hexadjust = 'A' - '9' - 1; - } else { + } + else + { hexadjust = 'a' - '9' - 1; } @@ -587,7 +641,7 @@ reswitch: case 'f': { float *value = (float *)args[arg]; - AddFloat(&buf_p, llen, *value, width, prec); + AddFloat(&buf_p, llen, *value, width, prec, flags); arg++; break; } @@ -779,7 +833,7 @@ reswitch: CHECK_ARGS(0); cell_t *value; pCtx->LocalToPhysAddr(params[arg], &value); - AddFloat(&buf_p, llen, sp_ctof(*value), width, prec); + AddFloat(&buf_p, llen, sp_ctof(*value), width, prec, flags); arg++; break; } @@ -808,7 +862,9 @@ reswitch: player->GetName(), userid, auth); - } else { + } + else + { UTIL_Format(buffer, sizeof(buffer), "Console<0><Console><Console>"); @@ -964,7 +1020,9 @@ const char *stristr(const char *str, const char *substr) { return prevloc; } - } else { + } + else + { haystack = ++prevloc; needle = (char *)substr; } @@ -1001,7 +1059,9 @@ size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) { buffer[maxlength - 1] = '\0'; return (maxlength - 1); - } else { + } + else + { return len; } } @@ -1014,7 +1074,9 @@ size_t UTIL_FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list { buffer[maxlength - 1] = '\0'; return (maxlength - 1); - } else { + } + else + { return len; } } @@ -1117,7 +1179,9 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se replaceLen = maxLen - browsed; /* Note, we add one to the final result for the null terminator */ strncopy(ptr, replace, replaceLen+1); - } else { + } + else + { /* EXAMPLE CASE: * Subject: AABBBCCC * Buffer : 12 bytes @@ -1138,7 +1202,9 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se /* Now, do our replacement. */ memcpy(ptr, replace, replaceLen); } - } else { + } + else + { /* EXAMPLE CASE: * Subject: AABBBCCC * Buffer : 12 bytes @@ -1158,7 +1224,9 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se /* Now do our replacement. */ memcpy(ptr, replace, replaceLen); } - } else if (replaceLen < searchLen) { + } + else if (replaceLen < searchLen) + { /* EXAMPLE CASE: * Subject: AABBBCCC * Buffer : 12 bytes @@ -1184,7 +1252,9 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se /* Move the rest of the string down */ memmove(moveTo, moveFrom, bytesToCopy); - } else { + } + else + { /* EXAMPLE CASE: * Subject: AABBBCCC * Buffer : 12 bytes From 0e4dc3a565f31af62cb9de0651cb750f274e9a2e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 01:24:15 +0000 Subject: [PATCH 003/263] fixed some doxygen comment typos --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401684 --- public/IAdminSystem.h | 4 ++-- public/IDBDriver.h | 4 ++-- public/IExtensionSys.h | 1 - public/IMenuManager.h | 6 ++++-- public/ITextParsers.h | 3 +-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/IAdminSystem.h b/public/IAdminSystem.h index c63639d3..0d887ea8 100644 --- a/public/IAdminSystem.h +++ b/public/IAdminSystem.h @@ -624,7 +624,7 @@ namespace SourceMod /** * @brief Reads a single character as a flag. * - * @param flag Flag character. + * @param c Flag character. * @param pAdmFlag Pointer to store the admin flag. * @return True on success, false if invalid. */ @@ -707,7 +707,7 @@ namespace SourceMod * @brief Computers access to an override. * * @param client Client index. - * @param override Override name. + * @param cmd Override name. * @param flags Default flags. * @param override_only If false, if a command matches the override, * then its flags will override the default. diff --git a/public/IDBDriver.h b/public/IDBDriver.h index af146620..c2ae715f 100644 --- a/public/IDBDriver.h +++ b/public/IDBDriver.h @@ -784,7 +784,7 @@ namespace SourceMod * @param type A DBHandleType value. * @param ptr A pointer corrresponding to a DBHandleType * object. - * @param token Identity pointer of the owning identity. + * @param pToken Identity pointer of the owning identity. * @return A new Handle_t handle, or 0 on failure. */ virtual Handle_t CreateHandle(DBHandleType type, void *ptr, IdentityToken_t *pToken) =0; @@ -814,7 +814,7 @@ namespace SourceMod * @brief Given a driver name, attempts to find it. If it is not found, SourceMod * will attempt to load it. This function is not thread safe. * - * @param name Driver identifier name. + * @param driver Driver identifier name. * @return IDBDriver pointer on success, NULL otherwise. */ virtual IDBDriver *FindOrLoadDriver(const char *driver) =0; diff --git a/public/IExtensionSys.h b/public/IExtensionSys.h index ec0b4211..6f427db8 100644 --- a/public/IExtensionSys.h +++ b/public/IExtensionSys.h @@ -337,7 +337,6 @@ namespace SourceMod * * @param path Path to extension file, relative to the * extensions folder. - * @param lifetime Lifetime of the extension (currently ignored). * @param error Error buffer. * @param maxlength Maximum error buffer length. * @return New IExtension on success, NULL on failure. diff --git a/public/IMenuManager.h b/public/IMenuManager.h index 60a07393..9471e1b2 100644 --- a/public/IMenuManager.h +++ b/public/IMenuManager.h @@ -265,7 +265,7 @@ namespace SourceMod * @brief Returns whether the display is capable of rendering an item * with the given flags. * - * @param flags ITEMDRAW flags. + * @param drawFlags ITEMDRAW flags. * @return True if renderable, false otherwise. */ virtual bool CanDrawItem(unsigned int drawFlags) =0; @@ -289,7 +289,7 @@ namespace SourceMod * @brief Sets the selectable key map. Returns false if the function * is not supported. * - * @param keys A bit string where each bit N-1 specifies + * @param keymap A bit string where each bit N-1 specifies * that key N is selectable (key 0 is bit 9). * If the selectable key map is 0, it will be * automatically set to allow 0. @@ -662,6 +662,7 @@ namespace SourceMod * @brief A display/selection cycle has ended. * * @param menu Menu pointer. + * @param reason MenuEndReason reason. */ virtual void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason) { @@ -740,6 +741,7 @@ namespace SourceMod * always be called. * * @param menu Menu pointer. + * @param reason VoteCancelReason reason. */ virtual void OnMenuVoteCancel(IBaseMenu *menu, VoteCancelReason reason) { diff --git a/public/ITextParsers.h b/public/ITextParsers.h index 0b0f0c68..85f675e3 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -280,7 +280,6 @@ namespace SourceMod * @param key Key string. * @param value Value string. If no quotes were specified, this will be NULL, * and key will contain the entire string. - * @param Number of line in file. * @return SMCResult directive. */ virtual SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) @@ -291,7 +290,7 @@ namespace SourceMod /** * @brief Called when leaving the current section. * - * @param Parsing states. + * @param states Parsing states. * @return SMCResult directive. */ virtual SMCResult ReadSMC_LeavingSection(const SMCStates *states) From 2989163de45c82c005fb02b2a58ab765a25d212d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 01:27:38 +0000 Subject: [PATCH 004/263] another minor doxytypo --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401685 --- public/IMenuManager.h | 1 + 1 file changed, 1 insertion(+) diff --git a/public/IMenuManager.h b/public/IMenuManager.h index 9471e1b2..cb97a2f4 100644 --- a/public/IMenuManager.h +++ b/public/IMenuManager.h @@ -825,6 +825,7 @@ namespace SourceMod * * @param client Client index. * @param states Menu states. + * @param order Order to search for items. * @return IMenuPanel pointer, or NULL if no items could be * found in the IBaseMenu pointer, or NULL if any * other error occurred. Any valid pointer must From 0f9a7eee81ede644213a937c84019d2584674174 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 02:27:02 +0000 Subject: [PATCH 005/263] more doxygen comment fixes --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401686 --- public/IDBDriver.h | 5 +++++ public/IMemoryUtils.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/public/IDBDriver.h b/public/IDBDriver.h index c2ae715f..d4e35268 100644 --- a/public/IDBDriver.h +++ b/public/IDBDriver.h @@ -36,6 +36,11 @@ #include <IHandleSys.h> #include <string.h> +/** + * @file IDBDriver.h + * @brief Defines interfaces for interacting with relational databases. + */ + #define SMINTERFACE_DBI_NAME "IDBI" #define SMINTERFACE_DBI_VERSION 5 diff --git a/public/IMemoryUtils.h b/public/IMemoryUtils.h index 1e90925c..1d6ba093 100644 --- a/public/IMemoryUtils.h +++ b/public/IMemoryUtils.h @@ -37,6 +37,11 @@ #define SMINTERFACE_MEMORYUTILS_NAME "IMemoryUtils" #define SMINTERFACE_MEMORYUTILS_VERSION 1 +/** + * @file IMemoryUtils.h + * @brief Interface for finding patterns in memory. + */ + namespace SourceMod { class IMemoryUtils : public SMInterface From 4d9ef26dbc05d194e93a785e84510971bf77e051 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 14:04:05 +0000 Subject: [PATCH 006/263] fixed amb1162 - SetUserAdmin() did not work as documented --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401687 --- core/smn_player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/smn_player.cpp b/core/smn_player.cpp index 78646639..1b78a11d 100644 --- a/core/smn_player.cpp +++ b/core/smn_player.cpp @@ -259,7 +259,7 @@ static cell_t SetUserAdmin(IPluginContext *pContext, const cell_t *params) { return pContext->ThrowNativeError("Client %d is not connected", client); } - if (!g_Admins.IsValidAdmin(params[2])) + if (!g_Admins.IsValidAdmin(params[2]) && id != INVALID_ADMIN_ID) { return pContext->ThrowNativeError("AdminId %x is invalid", params[2]); } From 555f76ba6797d6505eefbab5db55f5809f8cc367 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 14:08:02 +0000 Subject: [PATCH 007/263] fixed amb1160 - a bunch of menus could display invalid clients --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401688 --- plugins/basecomm/gag.sp | 2 +- plugins/basefuncommands/burn.sp | 2 +- plugins/basefuncommands/slap.sp | 2 +- plugins/basefuncommands/slay.sp | 2 +- plugins/basefunvotes/voteburn.sp | 2 +- plugins/basefunvotes/voteslay.sp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/basecomm/gag.sp b/plugins/basecomm/gag.sp index 2777aeb2..e8bd2925 100644 --- a/plugins/basecomm/gag.sp +++ b/plugins/basecomm/gag.sp @@ -58,7 +58,7 @@ DisplayGagPlayerMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, false); + AddTargetsToMenu(menu, client, true, false); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basefuncommands/burn.sp b/plugins/basefuncommands/burn.sp index 4c2fcc75..5c969a72 100644 --- a/plugins/basefuncommands/burn.sp +++ b/plugins/basefuncommands/burn.sp @@ -13,7 +13,7 @@ DisplayBurnMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, true); + AddTargetsToMenu(menu, client, true, true); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basefuncommands/slap.sp b/plugins/basefuncommands/slap.sp index bc024f86..1267381b 100644 --- a/plugins/basefuncommands/slap.sp +++ b/plugins/basefuncommands/slap.sp @@ -33,7 +33,7 @@ DisplaySlapTargetMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, true); + AddTargetsToMenu(menu, client, true, true); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basefuncommands/slay.sp b/plugins/basefuncommands/slay.sp index 9e9def91..e1b0b0bd 100644 --- a/plugins/basefuncommands/slay.sp +++ b/plugins/basefuncommands/slay.sp @@ -14,7 +14,7 @@ DisplaySlayMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, true); + AddTargetsToMenu(menu, client, true, true); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basefunvotes/voteburn.sp b/plugins/basefunvotes/voteburn.sp index 2fbc66a0..4ba326a9 100644 --- a/plugins/basefunvotes/voteburn.sp +++ b/plugins/basefunvotes/voteburn.sp @@ -31,7 +31,7 @@ DisplayBurnTargetMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, true); + AddTargetsToMenu(menu, client, true, true); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basefunvotes/voteslay.sp b/plugins/basefunvotes/voteslay.sp index 94e517da..fd8f80c1 100644 --- a/plugins/basefunvotes/voteslay.sp +++ b/plugins/basefunvotes/voteslay.sp @@ -32,7 +32,7 @@ DisplaySlayTargetMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, true); + AddTargetsToMenu(menu, client, true, true); DisplayMenu(menu, client, MENU_TIME_FOREVER); } From a00c455135264ce0c874430770a28da6f9bd8f1c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 14:17:26 +0000 Subject: [PATCH 008/263] fixed spacing --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401689 --- plugins/include/adt_array.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/include/adt_array.inc b/plugins/include/adt_array.inc index e8e0f621..8af2ed8c 100644 --- a/plugins/include/adt_array.inc +++ b/plugins/include/adt_array.inc @@ -266,8 +266,8 @@ native SwapArrayItems(Handle:array, index1, index2); * * @param array Array Handle. * @param item String to search for - * @return Array index, or -1 on failure - * @error Invalid Handle + * @return Array index, or -1 on failure + * @error Invalid Handle */ native FindStringInArray(Handle:array, const String:item[]); @@ -277,8 +277,8 @@ native FindStringInArray(Handle:array, const String:item[]); * * @param array Array Handle. * @param item Value to search for - * @return Array index, or -1 on failure - * @error Invalid Handle + * @return Array index, or -1 on failure + * @error Invalid Handle */ native FindValueInArray(Handle:array, item); @@ -290,4 +290,4 @@ native FindValueInArray(Handle:array, item); stock bool:IsStringInArray(Handle:array, const String:item[]) { return (FindStringInArray(array, item) != -1); -} \ No newline at end of file +} From 8ce2ac7a5b26636f84829839fa2fdb4291196555 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 14:17:56 +0000 Subject: [PATCH 009/263] fixed amb1161 - voteban didn't actually ban --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401690 --- plugins/basevotes.sp | 22 +++++++--------------- plugins/basevotes/votemap.sp | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/plugins/basevotes.sp b/plugins/basevotes.sp index 6e8d091f..b93c03a7 100644 --- a/plugins/basevotes.sp +++ b/plugins/basevotes.sp @@ -51,8 +51,6 @@ public Plugin:myinfo = new Handle:g_hVoteMenu = INVALID_HANDLE; -new Handle:g_hBanForward = INVALID_HANDLE; - new Handle:g_Cvar_Limits[3] = {INVALID_HANDLE, ...}; //new Handle:g_Cvar_VoteSay = INVALID_HANDLE; @@ -111,8 +109,6 @@ public OnPluginStart() g_Cvar_Limits[1] = CreateConVar("sm_vote_kick", "0.60", "percent required for successful kick vote.", 0, true, 0.05, true, 1.0); g_Cvar_Limits[2] = CreateConVar("sm_vote_ban", "0.60", "percent required for successful ban vote.", 0, true, 0.05, true, 1.0); - g_hBanForward = CreateGlobalForward("OnClientBanned", ET_Ignore, Param_Cell, Param_Cell, Param_Cell, Param_String); - /* Account for late loading */ new Handle:topmenu; if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) @@ -350,14 +346,6 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) case (voteType:ban): { - /* Fire the ban forward */ - Call_StartForward(g_hBanForward); - Call_PushCell(0); - Call_PushCell(g_voteClient[VOTE_USERID]); - Call_PushCell(30); - Call_PushString(g_voteArg); - Call_Finish(); - if (g_voteArg[0] == '\0') { strcopy(g_voteArg, sizeof(g_voteArg), "Votebanned"); @@ -365,9 +353,13 @@ public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) PrintToChatAll("[SM] %t", "Banned player", g_voteInfo[VOTE_NAME], 30); LogAction(-1, g_voteClient[VOTE_CLIENTID], "Vote ban successful, banned \"%L\" (minutes \"30\") (reason \"%s\")", g_voteClient[VOTE_CLIENTID], g_voteArg); - - ServerCommand("banid %d %s", 30, g_voteClient[VOTE_AUTHID]); - ServerCommand("kickid %d \"%s\"", g_voteClient[VOTE_USERID], g_voteArg); + + BanClient(g_voteClient[VOTE_CLIENTID], + 30, + BANFLAG_AUTO, + g_voteArg, + "Banned by vote", + "sm_voteban"); } } } diff --git a/plugins/basevotes/votemap.sp b/plugins/basevotes/votemap.sp index fcfd0cb6..c878ce77 100644 --- a/plugins/basevotes/votemap.sp +++ b/plugins/basevotes/votemap.sp @@ -111,7 +111,7 @@ public MenuHandler_Map(Handle:menu, MenuAction:action, param1, param2) GetMenuItem(menu, param2, info, sizeof(info), _, name, sizeof(name)); - if (IsStringInArray(g_SelectedMaps, info)) + if (FindStringInArray(g_SelectedMaps, info) != -1) { return ITEMDRAW_IGNORE; } From 413a9360ad26f8a2404121a158c1d99c0726b6d8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 16 Nov 2007 18:23:04 +0000 Subject: [PATCH 010/263] fixed build, i suck --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401691 --- core/smn_player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/smn_player.cpp b/core/smn_player.cpp index 1b78a11d..03f504b0 100644 --- a/core/smn_player.cpp +++ b/core/smn_player.cpp @@ -259,7 +259,7 @@ static cell_t SetUserAdmin(IPluginContext *pContext, const cell_t *params) { return pContext->ThrowNativeError("Client %d is not connected", client); } - if (!g_Admins.IsValidAdmin(params[2]) && id != INVALID_ADMIN_ID) + if (!g_Admins.IsValidAdmin(params[2]) && params[2] != INVALID_ADMIN_ID) { return pContext->ThrowNativeError("AdminId %x is invalid", params[2]); } From d2b288fd6a28182e07416fda699ce873bf2bfe83 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Fri, 16 Nov 2007 21:34:29 +0000 Subject: [PATCH 011/263] fixed amb1164, SM was crashing due to interface changes from valve (this change is just to make the build update using the latest sdk) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401692 --- core/Logger.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/Logger.cpp b/core/Logger.cpp index e1c3df40..031e5d96 100644 --- a/core/Logger.cpp +++ b/core/Logger.cpp @@ -380,7 +380,9 @@ void Logger::LogError(const char *vafmt, ...) LogToOpenFileEx(fp, vafmt, ap); va_end(ap); fclose(fp); - } else { + } + else + { char error[255]; g_LibSys.GetPlatformError(error, sizeof(error)); LogFatal("[SM] Unexpected fatal logging error (file \"%s\")", m_NrmFileName.c_str()); From ecbd1f5e36caa0d36645f16f8c806dbd96446ac8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 01:43:25 +0000 Subject: [PATCH 012/263] added amb1169 - dumping handles to game logs --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401693 --- core/sm_srvcmds.cpp | 57 +++++++++++++++++++++++++++++++------- core/systems/HandleSys.cpp | 8 +++--- core/systems/HandleSys.h | 4 ++- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index 9e0e9f60..cbacadd0 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -290,6 +290,34 @@ CON_COMMAND(sm, "SourceMod Menu") g_RootMenu.GotRootCmd(args); } +FILE *g_pHndlLog = NULL; + +void write_handles_to_log(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(g_pHndlLog, fmt, ap); + fprintf(g_pHndlLog, "\n"); + va_end(ap); +} + +void write_handles_to_game(const char *fmt, ...) +{ + size_t len; + va_list ap; + char buffer[1024]; + + va_start(ap, fmt); + len = UTIL_FormatArgs(buffer, sizeof(buffer)-2, fmt, ap); + va_end(ap); + + buffer[len] = '\n'; + buffer[len+1] = '\0'; + + engine->LogPrint(buffer); +} + CON_COMMAND(sm_dump_handles, "Dumps Handle usage to a file for finding Handle leaks") { #if !defined ORANGEBOX_BUILD @@ -297,19 +325,28 @@ CON_COMMAND(sm_dump_handles, "Dumps Handle usage to a file for finding Handle le #endif if (args.ArgC() < 2) { - g_RootMenu.ConsolePrint("Usage: sm_dump_handles <file>"); + g_RootMenu.ConsolePrint("Usage: sm_dump_handles <file> or <log> for game logs"); return; } - const char *arg = args.Arg(1); - FILE *fp = fopen(arg, "wt"); - if (!fp) + if (strcmp(args.Arg(1), "log") != 0) { - g_RootMenu.ConsolePrint("Could not find file \"%s\"", arg); - return; + const char *arg = args.Arg(1); + FILE *fp = fopen(arg, "wt"); + if (!fp) + { + g_RootMenu.ConsolePrint("Could not find file \"%s\"", arg); + return; + } + + g_pHndlLog = fp; + g_HandleSys.Dump(write_handles_to_log); + g_pHndlLog = NULL; + + fclose(fp); + } + else + { + g_HandleSys.Dump(write_handles_to_game); } - - g_HandleSys.Dump(fp); - - fclose(fp); } diff --git a/core/systems/HandleSys.cpp b/core/systems/HandleSys.cpp index 880b5f14..5d0e9885 100644 --- a/core/systems/HandleSys.cpp +++ b/core/systems/HandleSys.cpp @@ -994,10 +994,10 @@ bool HandleSystem::TryAndFreeSomeHandles() return g_PluginSys.UnloadPlugin(highest_owner); } -void HandleSystem::Dump(FILE *fp) +void HandleSystem::Dump(HANDLE_REPORTER rep) { - fprintf(fp, "%-10.10s\t%-20.20s\t%-20.20s\n", "Handle", "Owner", "Type"); - fprintf(fp, "---------------------------------------------\n"); + rep("%-10.10s\t%-20.20s\t%-20.20s", "Handle", "Owner", "Type"); + rep("---------------------------------------------"); for (unsigned int i = 1; i <= m_HandleTail; i++) { if (m_Handles[i].set != HandleSet_Used) @@ -1046,7 +1046,7 @@ void HandleSystem::Dump(FILE *fp) { type = m_strtab->GetString(pType->nameIdx); } - fprintf(fp, "0x%08x\t%-20.20s\t%-20.20s\n", index, owner, type); + rep("0x%08x\t%-20.20s\t%-20.20s", index, owner, type); } } diff --git a/core/systems/HandleSys.h b/core/systems/HandleSys.h index e0ef22b4..c49b1510 100644 --- a/core/systems/HandleSys.h +++ b/core/systems/HandleSys.h @@ -105,6 +105,8 @@ struct QHandleType int nameIdx; }; +typedef void (HANDLE_REPORTER)(const char *str, ...); + class HandleSystem : public IHandleSys { @@ -155,7 +157,7 @@ public: //IHandleSystem const HandleAccess *pAccess, HandleError *err); - void Dump(FILE *fp); + void Dump(HANDLE_REPORTER rep); protected: /** * Decodes a handle with sanity and security checking. From dfa007081b0fe2dd21f7c9ecfc5a89b39d0bb9ed Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 02:54:44 +0000 Subject: [PATCH 013/263] added amb1165 - exposed some plugin admin functionality to extensions --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401694 --- core/PlayerManager.cpp | 46 +++++++++++++++++++++++++- core/PlayerManager.h | 6 +++- public/IPlayerHelpers.h | 73 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 122 insertions(+), 3 deletions(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 5d701c5c..0e54712f 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -1295,12 +1295,32 @@ void CPlayer::Authorize_Post() void CPlayer::DoPostConnectAuthorization() { + bool delay = false; + + List<IClientListener *>::iterator iter; + for (iter = g_Players.m_hooks.begin(); + iter != g_Players.m_hooks.end(); + iter++) + { + IClientListener *pListener = (*iter); +#if defined MIN_API_FOR_ADMINCALLS + if (pListener->GetClientListenerVersion() < MIN_API_FOR_ADMINCALLS) + { + continue; + } +#endif + if (!pListener->OnClientPreAdminCheck(m_iIndex)) + { + delay = true; + } + } + cell_t result = 0; PreAdminCheck->PushCell(m_iIndex); PreAdminCheck->Execute(&result); /* Defer, for better or worse */ - if ((ResultType)result >= Pl_Handled) + if (delay || (ResultType)result >= Pl_Handled) { return; } @@ -1318,6 +1338,15 @@ void CPlayer::DoPostConnectAuthorization() NotifyPostAdminChecks(); } +bool CPlayer::RunAdminCacheChecks() +{ + AdminId old_id = GetAdminId(); + + DoBasicAdminChecks(); + + return (GetAdminId() != old_id); +} + void CPlayer::NotifyPostAdminChecks() { if (m_bAdminCheckSignalled) @@ -1328,6 +1357,21 @@ void CPlayer::NotifyPostAdminChecks() /* Block beforehand so they can't double-call */ m_bAdminCheckSignalled = true; + List<IClientListener *>::iterator iter; + for (iter = g_Players.m_hooks.begin(); + iter != g_Players.m_hooks.end(); + iter++) + { + IClientListener *pListener = (*iter); +#if defined MIN_API_FOR_ADMINCALLS + if (pListener->GetClientListenerVersion() < MIN_API_FOR_ADMINCALLS) + { + continue; + } +#endif + pListener->OnClientPostAdminCheck(m_iIndex); + } + PostAdminCheck->PushCell(m_iIndex); PostAdminCheck->Execute(NULL); } diff --git a/core/PlayerManager.h b/core/PlayerManager.h index 4e1a65ed..767a90dd 100644 --- a/core/PlayerManager.h +++ b/core/PlayerManager.h @@ -48,6 +48,8 @@ using namespace SourceHook; #define PLAYER_LIFE_ALIVE 1 #define PLAYER_LIFE_DEAD 2 +#define MIN_API_FOR_ADMINCALLS 7 + class CPlayer : public IGamePlayer { friend class PlayerManager; @@ -69,8 +71,9 @@ public: IPlayerInfo *GetPlayerInfo(); unsigned int GetLanguageId(); int GetUserId(); -public: + bool RunAdminCacheChecks(); void NotifyPostAdminChecks(); +public: void DoBasicAdminChecks(); bool IsInKickQueue(); void MarkAsBeingKicked(); @@ -108,6 +111,7 @@ class PlayerManager : public SMGlobalClass, public IPlayerManager { + friend class CPlayer; public: PlayerManager(); ~PlayerManager(); diff --git a/public/IPlayerHelpers.h b/public/IPlayerHelpers.h index 34e3aa8e..18efba8b 100644 --- a/public/IPlayerHelpers.h +++ b/public/IPlayerHelpers.h @@ -41,7 +41,7 @@ #include <IAdminSystem.h> #define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager" -#define SMINTERFACE_PLAYERMANAGER_VERSION 6 +#define SMINTERFACE_PLAYERMANAGER_VERSION 7 struct edict_t; class IPlayerInfo; @@ -147,6 +147,42 @@ namespace SourceMod * @return IPlayerInfo pointer, or NULL if none. */ virtual IPlayerInfo *GetPlayerInfo() =0; + + /** + * @brief Runs through Core's admin authorization checks. If the + * client is already an admin, no checks are performed. + * + * Note that this function operates solely against the in-memory admin + * cache. It will check steamids, IPs, names, and verify a password + * if one exists. To implement other authentication schemes, simply + * don't call this function and use IGamePlayer::SetAdminId() instead. + * + * @return True if access changed, false otherwise. + */ + virtual bool RunAdminCacheChecks() =0; + + /** + * @brief Notifies all listeners that the client has completed + * all of your post-connection (in-game, auth, admin) checks. + * + * If you returned "false" from OnClientPreAdminCheck(), you must + * ALWAYS manually invoke this function, even if RunAdminCacheChecks() + * failed or you did not assign an AdminId. Failure to call this + * function could result in plugins (such as reservedslots) not + * working properly. + * + * If you are implementing asynchronous fetches, and the client + * disconnects during your fetching process, you should make sure to + * recognize that case and not call this function. That is, do not + * call this function on mismatched PreCheck calls, or on disconnected + * clients. A good way to check this is to pass userids around, which + * are unique per client connection. + * + * Calling this has no effect if it has already been called on the + * given client (thus it is safe for multiple asynchronous plugins to + * call it at various times). + */ + virtual void NotifyPostAdminChecks() =0; }; /** @@ -230,6 +266,41 @@ namespace SourceMod virtual void OnServerActivated(int max_clients) { } + + /** + * @brief Called once a client is authorized and fully in-game, but + * before admin checks are done. This can be used to override the + * default admin checks for a client. + * + * By default, this function allows the authentication process to + * continue as normal. If you need to delay the cache searching + * process in order to get asynchronous data, then return false here. + * + * If you return false, you must call IPlayerManager::NotifyPostAdminCheck + * for the same client, or else the OnClientPostAdminCheck callback will + * never be called. + * + * @param client Client index. + * @return True to continue normally, false to override + * the authentication process. + */ + virtual bool OnClientPreAdminCheck(int client) + { + return true; + } + + /** + * @brief Called once a client is authorized and fully in-game, and + * after all post-connection authorizations have been passed. If the + * client does not have an AdminId by this stage, it means that no + * admin entry was in the cache that matched, and the user could not + * be authenticated as an admin. + * + * @param client Client index. + */ + virtual void OnClientPostAdminCheck(int client) + { + } }; #define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */ From a79a16938492e11e32c1b0abc1d88591f357dbe4 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 04:31:01 +0000 Subject: [PATCH 014/263] added a quick experimental system for overriding core natives --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401695 --- core/systems/ExtensionSys.cpp | 85 ++++++++++++++++++++++++++++++++++- core/systems/ExtensionSys.h | 12 +++++ core/systems/PluginSys.cpp | 12 +++++ core/systems/PluginSys.h | 1 + core/systems/ShareSys.cpp | 5 +++ core/systems/ShareSys.h | 1 + public/IExtensionSys.h | 5 ++- public/IShareSys.h | 23 ++++++++++ 8 files changed, 141 insertions(+), 3 deletions(-) diff --git a/core/systems/ExtensionSys.cpp b/core/systems/ExtensionSys.cpp index 78df64ec..8209b3ce 100644 --- a/core/systems/ExtensionSys.cpp +++ b/core/systems/ExtensionSys.cpp @@ -285,7 +285,22 @@ void CExtension::RemovePlugin(IPlugin *pPlugin) if ((*iter).pl == pPlugin) { iter = m_WeakNatives.erase(iter); - } else { + } + else + { + iter++; + } + } + + iter = m_ReplacedNatives.begin(); + while (iter != m_ReplacedNatives.end()) + { + if ((*iter).pl == pPlugin) + { + iter = m_ReplacedNatives.erase(iter); + } + else + { iter++; } } @@ -703,6 +718,7 @@ void CExtensionManager::BindAllNativesToPlugin(IPlugin *pPlugin) uint32_t natives = pContext->GetNativesNum(); sp_native_t *native; sm_extnative_t *x_native; + sm_repnative_t *r_native; for (uint32_t i=0; i<natives; i++) { /* Make sure the native is valid */ @@ -710,11 +726,26 @@ void CExtensionManager::BindAllNativesToPlugin(IPlugin *pPlugin) { continue; } + /* Make sure the native is not already bound */ if (native->status == SP_NATIVE_BOUND) { + /* If it is bound, see if there is a replacement. */ + if ((r_native = m_RepNatives.retrieve(native->name)) == NULL) + { + continue; + } + + /* Rewrite the address. Whee! */ + native->pfn = r_native->info.func; + + /* Make sure this will unload safely */ + WeakNative wn((CPlugin *)pPlugin, i); + r_native->owner->m_ReplacedNatives.push_back(wn); + continue; } + /* See if we've got this native in our cache */ if ((x_native = m_ExtNatives.retrieve(native->name)) == NULL) { @@ -789,7 +820,7 @@ bool CExtensionManager::UnloadExtension(IExtension *_pExt) g_PluginSys.OnLibraryAction((*s_iter).c_str(), false, true); } - /* Unbound weak natives */ + /* Unbind weak natives */ List<WeakNative>::iterator wkn_iter; for (wkn_iter=pExt->m_WeakNatives.begin(); wkn_iter!=pExt->m_WeakNatives.end(); wkn_iter++) { @@ -798,6 +829,21 @@ bool CExtensionManager::UnloadExtension(IExtension *_pExt) ctx->natives[wkn.idx].status = SP_NATIVE_UNBOUND; } + /* Unbind replacement natives, link them back to their originals */ + for (wkn_iter = pExt->m_ReplacedNatives.begin(); + wkn_iter != pExt->m_ReplacedNatives.end(); + wkn_iter++) + { + WeakNative & wkn = (*wkn_iter); + sp_context_t *ctx = wkn.pl->GetContext(); + sm_repnative_t *r_native = m_RepNatives.retrieve(ctx->natives[wkn.idx].name); + if (r_native == NULL || ctx->natives[wkn.idx].pfn != r_native->info.func) + { + continue; + } + ctx->natives[wkn.idx].pfn = r_native->original; + } + /* Notify and/or unload all dependencies */ List<CExtension *>::iterator c_iter; CExtension *pDep; @@ -871,6 +917,22 @@ bool CExtensionManager::UnloadExtension(IExtension *_pExt) } } + /* Unbind our replacement natives */ + List<sm_repnative_t>::iterator rep_iter = m_RepNativeList.begin(); + while (rep_iter != m_RepNativeList.end()) + { + sm_repnative_t & r_native = (*rep_iter); + if (r_native.owner == pExt) + { + m_RepNatives.remove(r_native.info.name); + rep_iter = m_RepNativeList.erase(rep_iter); + } + else + { + rep_iter++; + } + } + /* Tell it to unload */ pAPI = pExt->GetAPI(); pAPI->OnExtensionUnload(); @@ -919,6 +981,25 @@ void CExtensionManager::AddNatives(IExtension *pOwner, const sp_nativeinfo_t *na } } +void CExtensionManager::OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives) +{ + SPVM_NATIVE_FUNC orig; + + for (unsigned int i = 0; natives[i].func != NULL && natives[i].name != NULL; i++) + { + if ((orig = g_PluginSys.FindCoreNative(natives[i].name)) == NULL) + { + continue; + } + sm_repnative_t rep; + rep.info = natives[i]; + rep.owner = (CExtension *)myself; + rep.original = orig; + m_RepNativeList.push_back(rep); + m_RepNatives.insert(natives[i].name, rep); + } +} + void CExtensionManager::MarkAllLoaded() { List<CExtension *>::iterator iter; diff --git a/core/systems/ExtensionSys.h b/core/systems/ExtensionSys.h index 1fe29f1c..dbba34e6 100644 --- a/core/systems/ExtensionSys.h +++ b/core/systems/ExtensionSys.h @@ -55,6 +55,14 @@ struct sm_extnative_t const sp_nativeinfo_t *info; }; +/* Replacement native */ +struct sm_repnative_t +{ + CExtension *owner; + sp_nativeinfo_t info; + SPVM_NATIVE_FUNC original; +}; + class CExtension : public IExtension { friend class CExtensionManager; @@ -98,6 +106,7 @@ protected: List<IPlugin *> m_Plugins; List<const sp_nativeinfo_t *> m_Natives; List<WeakNative> m_WeakNatives; + List<WeakNative> m_ReplacedNatives; List<String> m_Libraries; unsigned int unload_code; bool m_bFullyLoaded; @@ -168,6 +177,7 @@ public: void TryAutoload(); void AddLibrary(IExtension *pSource, const char *library); bool LibraryExists(const char *library); + void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives); public: CExtension *GetExtensionFromIdent(IdentityToken_t *ptr); void Shutdown(); @@ -175,6 +185,8 @@ private: CExtension *FindByOrder(unsigned int num); private: List<CExtension *> m_Libs; + List<sm_repnative_t> m_RepNativeList; + KTrie<sm_repnative_t> m_RepNatives; KTrie<sm_extnative_t> m_ExtNatives; }; diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index a0bdcce4..d18aa689 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -1440,6 +1440,18 @@ void CPluginManager::AddCoreNativesToPlugin(CPlugin *pPlugin) } } +SPVM_NATIVE_FUNC CPluginManager::FindCoreNative(const char *name) +{ + SPVM_NATIVE_FUNC pfn; + + if (!sm_trie_retrieve(m_pCoreNatives, name, (void **)&pfn)) + { + return NULL; + } + + return pfn; +} + void CPluginManager::TryRefreshDependencies(CPlugin *pPlugin) { assert(pPlugin->GetBaseContext() != NULL); diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index cc71c4ea..ce70a16f 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -489,6 +489,7 @@ public: } public: bool AddFakeNative(IPluginFunction *pFunction, const char *name, SPVM_FAKENATIVE_FUNC func); + SPVM_NATIVE_FUNC FindCoreNative(const char *name); private: void AddFakeNativesToPlugin(CPlugin *pPlugin); void TryRefreshDependencies(CPlugin *pOther); diff --git a/core/systems/ShareSys.cpp b/core/systems/ShareSys.cpp index 1154e4d4..c3bf2c2d 100644 --- a/core/systems/ShareSys.cpp +++ b/core/systems/ShareSys.cpp @@ -243,3 +243,8 @@ void ShareSystem::RegisterLibrary(IExtension *myself, const char *name) { g_Extensions.AddLibrary(myself, name); } + +void ShareSystem::OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives) +{ + g_Extensions.OverrideNatives(myself, natives); +} diff --git a/core/systems/ShareSys.h b/core/systems/ShareSys.h index 6c34f618..60e99c21 100644 --- a/core/systems/ShareSys.h +++ b/core/systems/ShareSys.h @@ -81,6 +81,7 @@ public: //IShareSys void DestroyIdentity(IdentityToken_t *identity); void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload); void RegisterLibrary(IExtension *myself, const char *name); + void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives); public: //SMGlobalClass /* Pre-empt in case anything tries to register idents early */ void OnSourceModStartup(bool late); diff --git a/public/IExtensionSys.h b/public/IExtensionSys.h index 6f427db8..3f4989a2 100644 --- a/public/IExtensionSys.h +++ b/public/IExtensionSys.h @@ -127,8 +127,11 @@ namespace SourceMod /** * @brief Version code of the IExtensionInterface API itself. + * + * Note: This is bumped when IShareSys is changed, because IShareSys + * itself is not versioned. */ - #define SMINTERFACE_EXTENSIONAPI_VERSION 2 + #define SMINTERFACE_EXTENSIONAPI_VERSION 3 /** * @brief The interface an extension must expose. diff --git a/public/IShareSys.h b/public/IShareSys.h index c97db5e5..84363bbf 100644 --- a/public/IShareSys.h +++ b/public/IShareSys.h @@ -200,6 +200,29 @@ namespace SourceMod * @param name Library name. */ virtual void RegisterLibrary(IExtension *myself, const char *name) =0; + + /** + * @brief Adds a list of natives to the global native pool, to be + * bound on plugin load. + * + * Unlike AddNatives(), this function implements natives that are + * ALWAYS bound, regardless of whether a previous function is bound. + * That means extensions can override Core natives. + * + * A Core version of each native must exist. If one does not, then + * Core will simply ignore that entry. + * + * Override natives represent a weak coupling. If the extension is + * unloaded, the native will be re-bound to the Core version. + * + * @param myself Identity token of parent object. + * @param natives Array of natives to add. The last entry in + * the array must be filled with NULLs to + * terminate the array. The array must be static + * as Core will cache the pointer for the + * lifetime of the extension. + */ + virtual void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives) =0; }; } From f950225229737a090ea1a0b8bc90914342472c6e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 05:33:47 +0000 Subject: [PATCH 015/263] added GetGlobalTarget/SetGlobalTarget to g_pSM const'd some things --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401696 --- core/CellRecipientFilter.h | 4 ++-- core/HalfLife2.cpp | 7 ++++++- core/UserMessages.cpp | 2 +- core/UserMessages.h | 2 +- core/sourcemod.cpp | 4 +++- core/sourcemod.h | 2 +- public/ISourceMod.h | 19 ++++++++++++++++++- public/IUserMessages.h | 2 +- 8 files changed, 33 insertions(+), 9 deletions(-) diff --git a/core/CellRecipientFilter.h b/core/CellRecipientFilter.h index b3a5a1f9..30070553 100644 --- a/core/CellRecipientFilter.h +++ b/core/CellRecipientFilter.h @@ -46,7 +46,7 @@ public: //IRecipientFilter int GetRecipientCount() const; int GetRecipientIndex(int slot) const; public: - void Initialize(cell_t *ptr, size_t count); + void Initialize(const cell_t *ptr, size_t count); void SetToReliable(bool isreliable); void SetToInit(bool isinitmsg); void Reset(); @@ -98,7 +98,7 @@ inline void CellRecipientFilter::SetToReliable(bool isreliable) m_IsReliable = isreliable; } -inline void CellRecipientFilter::Initialize(cell_t *ptr, size_t count) +inline void CellRecipientFilter::Initialize(const cell_t *ptr, size_t count) { memcpy(m_Players, ptr, count * sizeof(cell_t)); m_Size = count; diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 993a0e98..6aec953e 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -35,6 +35,7 @@ #include "UserMessages.h" #include "PlayerManager.h" #include "sm_stringutil.h" +#include "GameConfigs.h" #include <compat_wrappers.h> CHalfLife2 g_HL2; @@ -308,7 +309,11 @@ bool CHalfLife2::HintTextMsg(int client, const char *msg) return false; } - pBitBuf->WriteByte(1); + const char *pre_byte = g_pGameConf->GetKeyValue("HintTextPreByte"); + if (pre_byte != NULL && strcmp(pre_byte, "yes") == 0) + { + pBitBuf->WriteByte(1); + } pBitBuf->WriteString(msg); g_UserMsgs.EndMessage(); diff --git a/core/UserMessages.cpp b/core/UserMessages.cpp index 7384b741..0413286f 100644 --- a/core/UserMessages.cpp +++ b/core/UserMessages.cpp @@ -135,7 +135,7 @@ bool UserMessages::GetMessageName(int msgid, char *buffer, size_t maxlength) con return false; } -bf_write *UserMessages::StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags) +bf_write *UserMessages::StartMessage(int msg_id, const cell_t players[], unsigned int playersNum, int flags) { bf_write *buffer; diff --git a/core/UserMessages.h b/core/UserMessages.h index 9736b0fc..01969fcf 100644 --- a/core/UserMessages.h +++ b/core/UserMessages.h @@ -69,7 +69,7 @@ public: //IUserMessages bool GetMessageName(int msgid, char *buffer, size_t maxlength) const; bool HookUserMessage(int msg_id, IUserMessageListener *pListener, bool intercept=false); bool UnhookUserMessage(int msg_id, IUserMessageListener *pListener, bool intercept=false); - bf_write *StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags); + bf_write *StartMessage(int msg_id, const cell_t players[], unsigned int playersNum, int flags); bool EndMessage(); public: bf_write *OnStartMessage_Pre(IRecipientFilter *filter, int msg_type); diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index e59afd31..e94ed402 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -586,9 +586,11 @@ const char *SourceModBase::GetGamePath() const return g_BaseDir.c_str(); } -void SourceModBase::SetGlobalTarget(unsigned int index) +unsigned int SourceModBase::SetGlobalTarget(unsigned int index) { + unsigned int old = m_target; m_target = index; + return old; } unsigned int SourceModBase::GetGlobalTarget() const diff --git a/core/sourcemod.h b/core/sourcemod.h index 9a804a43..1b222c80 100644 --- a/core/sourcemod.h +++ b/core/sourcemod.h @@ -83,7 +83,7 @@ public: /** * @brief Stores the global target index. */ - void SetGlobalTarget(unsigned int index); + unsigned int SetGlobalTarget(unsigned int index); /** * @brief Returns the global target index. diff --git a/public/ISourceMod.h b/public/ISourceMod.h index bddc33c4..af39d30b 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -43,7 +43,7 @@ #include <time.h> #define SMINTERFACE_SOURCEMOD_NAME "ISourceMod" -#define SMINTERFACE_SOURCEMOD_VERSION 3 +#define SMINTERFACE_SOURCEMOD_VERSION 4 /** * @brief Forward declaration of the KeyValues class. @@ -199,6 +199,23 @@ namespace SourceMod * @return Adjusted server time. */ virtual time_t GetAdjustedTime() =0; + + /** + * @brief Sets the global client SourceMod will use for assisted + * translations (that is, %t). + * + * @param index Client index. + * @return Old global client value. + */ + virtual unsigned int SetGlobalTarget(unsigned int index) =0; + + /** + * @brief Returns the global client SourceMod is currently using + * for assisted translations (that is, %t). + * + * @return Global client value. + */ + virtual unsigned int GetGlobalTarget() const =0; }; } diff --git a/public/IUserMessages.h b/public/IUserMessages.h index 4603643a..c5524b1d 100644 --- a/public/IUserMessages.h +++ b/public/IUserMessages.h @@ -144,7 +144,7 @@ namespace SourceMod * @param flags Flags to use for sending the message. * @return bf_write structure to write message with, or NULL on failure. */ - virtual bf_write *StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags) =0; + virtual bf_write *StartMessage(int msg_id, const cell_t players[], unsigned int playersNum, int flags) =0; /** * @brief Wrapper around UserMessageEnd for use with StartMessage(). From 358a1e959e79ad77a11c39f9f0eb458eac6fdd41 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 05:40:58 +0000 Subject: [PATCH 016/263] fix for amb1156 - gamedata specifies HintText type now --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401697 --- gamedata/core.games.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index cb9bfd99..ac01dc0c 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -62,6 +62,24 @@ } } + /** + * Which games use an extra byte in the HintText + * message? Even though it's in the SDK, apparently + * only CS:S does this right now. + */ + "#default" + { + "#supported" + { + "game" "cstrike" + } + + "Keys" + { + "HintTextPreByte" "yes" + } + } + "cstrike" { "Keys" From 200fe16e1cc6eef86ba40d3ccf27b08161ac3baf Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 05:41:47 +0000 Subject: [PATCH 017/263] fix for amb1156 - CS:S Tools overrides the PrintHintText native with its own version. this is a fail-safe for CS:S being loaded, as we can have better control from an extension. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401698 --- extensions/cstrike/extension.cpp | 6 ++++ extensions/cstrike/extension.h | 2 ++ extensions/cstrike/natives.cpp | 45 +++++++++++++++++++++++++++ extensions/cstrike/sdk/smsdk_config.h | 1 + extensions/cstrike/sdk/smsdk_ext.cpp | 6 ++++ extensions/cstrike/sdk/smsdk_ext.h | 6 ++++ 6 files changed, 66 insertions(+) diff --git a/extensions/cstrike/extension.cpp b/extensions/cstrike/extension.cpp index 182ae75e..d0b8daa4 100644 --- a/extensions/cstrike/extension.cpp +++ b/extensions/cstrike/extension.cpp @@ -45,6 +45,7 @@ IBinTools *g_pBinTools = NULL; IGameConfig *g_pGameConf = NULL; IGameEventManager2 *gameevents = NULL; bool hooked_everything = false; +int g_msgHintText = -1; SMEXT_LINK(&g_CStrike); @@ -67,6 +68,11 @@ bool CStrike::SDK_OnLoad(char *error, size_t maxlength, bool late) sharesys->AddNatives(myself, g_CSNatives); sharesys->RegisterLibrary(myself, "cstrike"); + if ((g_msgHintText = usermsgs->GetMessageIndex("HintText")) != -1) + { + sharesys->OverrideNatives(myself, g_CS_PrintHintText); + } + return true; } diff --git a/extensions/cstrike/extension.h b/extensions/cstrike/extension.h index 916bb2d2..acf301f3 100644 --- a/extensions/cstrike/extension.h +++ b/extensions/cstrike/extension.h @@ -122,5 +122,7 @@ public: /* Interfaces from SourceMod */ extern IBinTools *g_pBinTools; extern IGameConfig *g_pGameConf; +extern int g_msgHintText; +extern sp_nativeinfo_t g_CS_PrintHintText[]; #endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ diff --git a/extensions/cstrike/natives.cpp b/extensions/cstrike/natives.cpp index e5f085c4..ce711e68 100644 --- a/extensions/cstrike/natives.cpp +++ b/extensions/cstrike/natives.cpp @@ -69,6 +69,45 @@ inline CBaseEntity *GetCBaseEntity(int num, bool isplayer) return pUnk->GetBaseEntity(); } +static cell_t CS_PrintHintText(IPluginContext *pContext, const cell_t *params) +{ + int client = params[1]; + IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(params[1]); + + if (!pPlayer) + { + return pContext->ThrowNativeError("Client index %d is invalid", client); + } + + if (!pPlayer->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in game", client); + } + + g_pSM->SetGlobalTarget(client); + + char buffer[192]; + g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 2); + + /* Check for an error before printing to the client */ + if (pContext->GetContext()->n_err != SP_ERROR_NONE) + { + return 0; + } + + bf_write *pBitBuf = usermsgs->StartMessage(g_msgHintText, ¶ms[1], 1, USERMSG_RELIABLE); + if (pBitBuf == NULL) + { + return pContext->ThrowNativeError("Could not send a usermessage"); + } + pBitBuf->WriteByte(1); + pBitBuf->WriteString(buffer); + usermsgs->EndMessage(); + + return 1; +} + + static cell_t CS_RespawnPlayer(IPluginContext *pContext, const cell_t *params) { static ICallWrapper *pWrapper = NULL; @@ -124,3 +163,9 @@ sp_nativeinfo_t g_CSNatives[] = {"CS_SwitchTeam", CS_SwitchTeam}, {NULL, NULL} }; + +sp_nativeinfo_t g_CS_PrintHintText[] = +{ + {"PrintHintText", CS_PrintHintText}, + {NULL, NULL}, +}; diff --git a/extensions/cstrike/sdk/smsdk_config.h b/extensions/cstrike/sdk/smsdk_config.h index fc402227..a070e6b3 100644 --- a/extensions/cstrike/sdk/smsdk_config.h +++ b/extensions/cstrike/sdk/smsdk_config.h @@ -71,5 +71,6 @@ #define SMEXT_ENABLE_TIMERSYS //#define SMEXT_ENABLE_THREADER //#define SMEXT_ENABLE_LIBSYS +#define SMEXT_ENABLE_USERMSGS #endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ diff --git a/extensions/cstrike/sdk/smsdk_ext.cpp b/extensions/cstrike/sdk/smsdk_ext.cpp index 60480b22..f5e6f3fc 100644 --- a/extensions/cstrike/sdk/smsdk_ext.cpp +++ b/extensions/cstrike/sdk/smsdk_ext.cpp @@ -79,6 +79,9 @@ IThreader *threader = NULL; #if defined SMEXT_ENABLE_LIBSYS ILibrarySys *libsys = NULL; #endif +#if defined SMEXT_ENABLE_USERMSGS +IUserMessages *usermsgs = NULL; +#endif /** Exports the main interface */ PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI() @@ -149,6 +152,9 @@ bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, #if defined SMEXT_ENABLE_LIBSYS SM_GET_IFACE(LIBRARYSYS, libsys); #endif +#if defined SMEXT_ENABLE_USERMSGS + SM_GET_IFACE(USERMSGS, usermsgs); +#endif if (SDK_OnLoad(error, maxlength, late)) { diff --git a/extensions/cstrike/sdk/smsdk_ext.h b/extensions/cstrike/sdk/smsdk_ext.h index 905e13a6..c137616b 100644 --- a/extensions/cstrike/sdk/smsdk_ext.h +++ b/extensions/cstrike/sdk/smsdk_ext.h @@ -73,6 +73,9 @@ #if defined SMEXT_ENABLE_LIBSYS #include <ILibrarySys.h> #endif +#if defined SMEXT_ENABLE_USERMSGS +#include <IUserMessages.h> +#endif #if defined SMEXT_CONF_METAMOD #include <ISmmPlugin.h> @@ -260,6 +263,9 @@ extern IThreader *threader; #if defined SMEXT_ENABLE_LIBSYS extern ILibrarySys *libsys; #endif +#if defined SMEXT_ENABLE_USERMSGS +extern IUserMessages *usermsgs; +#endif #if defined SMEXT_CONF_METAMOD PLUGIN_GLOBALVARS(); From 5c2e13b12b6aa7e2ab0716a7a0dd6eb896405a7e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 17 Nov 2007 05:50:09 +0000 Subject: [PATCH 018/263] updated sdk to include usermsgs --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401699 --- public/sample_ext/sdk/smsdk_config.h | 1 + public/sample_ext/sdk/smsdk_ext.cpp | 6 ++++++ public/sample_ext/sdk/smsdk_ext.h | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/public/sample_ext/sdk/smsdk_config.h b/public/sample_ext/sdk/smsdk_config.h index ea076290..59fb0874 100644 --- a/public/sample_ext/sdk/smsdk_config.h +++ b/public/sample_ext/sdk/smsdk_config.h @@ -74,5 +74,6 @@ //#define SMEXT_ENABLE_PLUGINSYS //#define SMEXT_ENABLE_ADMINSYS //#define SMEXT_ENABLE_TEXTPARSERS +#define SMEXT_ENABLE_USERMSGS #endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ diff --git a/public/sample_ext/sdk/smsdk_ext.cpp b/public/sample_ext/sdk/smsdk_ext.cpp index 9934974f..0c728f00 100644 --- a/public/sample_ext/sdk/smsdk_ext.cpp +++ b/public/sample_ext/sdk/smsdk_ext.cpp @@ -91,6 +91,9 @@ IAdminSystem *adminsys = NULL; #if defined SMEXT_ENABLE_TEXTPARSERS ITextParsers *textparsers = NULL; #endif +#if defined SMEXT_ENABLE_USERMSGS +IUserMessages *usermsgs = NULL; +#endif /** Exports the main interface */ PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI() @@ -173,6 +176,9 @@ bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, #if defined SMEXT_ENABLE_TEXTPARSERS SM_GET_IFACE(TEXTPARSERS, textparsers); #endif +#if defined SMEXT_ENABLE_USERMSGS + SM_GET_IFACE(USERMSGS, usermsgs); +#endif if (SDK_OnLoad(error, maxlength, late)) { diff --git a/public/sample_ext/sdk/smsdk_ext.h b/public/sample_ext/sdk/smsdk_ext.h index b37ce03f..4702f2a2 100644 --- a/public/sample_ext/sdk/smsdk_ext.h +++ b/public/sample_ext/sdk/smsdk_ext.h @@ -85,6 +85,9 @@ #if defined SMEXT_ENABLE_TEXTPARSERS #include <ITextParsers.h> #endif +#if defined SMEXT_ENABLE_USERMSGS +#include <IUserMessages.h> +#endif #if defined SMEXT_CONF_METAMOD #include <ISmmPlugin.h> @@ -277,6 +280,9 @@ extern IMenuManager *menus; #if defined SMEXT_ENABLE_ADMINSYS extern IAdminSystem *adminsys; #endif +#if defined SMEXT_ENABLE_USERMSGS +extern IUserMessages *usermsgs; +#endif #if defined SMEXT_CONF_METAMOD PLUGIN_GLOBALVARS(); From 02f41feadf04cc78e31b028741e1501f4138328b Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Sun, 18 Nov 2007 06:25:33 +0000 Subject: [PATCH 019/263] fix for amb1174 - sv_visblemaxplayers being changed even with hidden slots disabled. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401700 --- plugins/reservedslots.sp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/reservedslots.sp b/plugins/reservedslots.sp index 0715a7f3..defdb900 100644 --- a/plugins/reservedslots.sp +++ b/plugins/reservedslots.sp @@ -99,7 +99,10 @@ public Action:OnTimedKick(Handle:timer, any:client) KickClient(client, "%T", "Slot reserved", client); - SetVisibleMaxSlots(GetClientCount(false), g_MaxClients - GetConVarInt(sm_reserved_slots)); + if (GetConVarBool(sm_hide_slots)) + { + SetVisibleMaxSlots(GetClientCount(false), g_MaxClients - GetConVarInt(sm_reserved_slots)); + } return Plugin_Handled; } From fdd75d6fcb4e5cdc3e5c7f12bad7b011cbcaa8d8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 18 Nov 2007 17:07:32 +0000 Subject: [PATCH 020/263] we now refresh tf2 menus because valve like writing buggy interfaces --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401701 --- core/MenuStyle_Radio.cpp | 107 +++++++++++++++++++++++++++++++++++---- core/MenuStyle_Radio.h | 19 ++++++- gamedata/core.games.txt | 8 +++ 3 files changed, 122 insertions(+), 12 deletions(-) diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index c891025b..188c0247 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -42,9 +42,15 @@ extern const char *g_RadioNumTable[]; CRadioStyle g_RadioMenuStyle; int g_ShowMenuId = -1; bool g_bRadioInit = false; +unsigned int g_RadioMenuTimeout = 0; -CRadioStyle::CRadioStyle() : m_players(new CBaseMenuPlayer[256+1]) +CRadioStyle::CRadioStyle() { + m_players = new CRadioMenuPlayer[256+1]; + for (size_t i = 0; i < 256+1; i++) + { + m_players[i].Radio_SetIndex(i); + } } void CRadioStyle::OnSourceModAllInitialized() @@ -73,6 +79,16 @@ void CRadioStyle::OnSourceModLevelChange(const char *mapName) return; } + const char *val = g_pGameConf->GetKeyValue("RadioMenuTimeout"); + if (val != NULL) + { + g_RadioMenuTimeout = atoi(val); + } + else + { + g_RadioMenuTimeout = 0; + } + g_Menus.AddStyle(this); g_Menus.SetDefaultStyle(this); @@ -203,6 +219,38 @@ void CRadioStyle::FreeRadioDisplay(CRadioDisplay *display) m_FreeDisplays.push(display); } +CRadioMenuPlayer *CRadioStyle::GetRadioMenuPlayer(int client) +{ + return &m_players[client]; +} + +void CRadioStyle::ProcessWatchList() +{ + if (!g_RadioMenuTimeout) + { + BaseMenuStyle::ProcessWatchList(); + return; + } + + BaseMenuStyle::ProcessWatchList(); + + CRadioMenuPlayer *pPlayer; + float curtime = gpGlobals->curtime; + unsigned int max_clients = g_Players.GetMaxClients(); + for (unsigned int i = 1; i <= max_clients; i++) + { + pPlayer = GetRadioMenuPlayer(i); + if (!pPlayer->bInMenu || pPlayer->bInExternMenu) + { + continue; + } + if (pPlayer->Radio_NeedsRefresh()) + { + pPlayer->Radio_Refresh(); + } + } +} + CRadioDisplay::CRadioDisplay() { Reset(); @@ -326,17 +374,50 @@ bool CRadioDisplay::CanDrawItem(unsigned int drawFlags) void CRadioDisplay::SendRawDisplay(int client, unsigned int time) { - char buffer[4096]; - size_t len; - - len = UTIL_Format(buffer, sizeof(buffer), "%s\n%s", m_Title.c_str(), m_BufferText.c_str()); - - cell_t players[1] = {client}; - int _sel_keys = (keys == 0) ? (1<<9) : keys; + CRadioMenuPlayer *pPlayer = g_RadioMenuStyle.GetRadioMenuPlayer(client); + pPlayer->Radio_Init(_sel_keys, m_Title.c_str(), m_BufferText.c_str()); + pPlayer->Radio_Refresh(); +} - char *ptr = buffer; +void CRadioMenuPlayer::Radio_SetIndex(unsigned int index) +{ + m_index = index; +} + +bool CRadioMenuPlayer::Radio_NeedsRefresh() +{ + return (gpGlobals->curtime - display_last_refresh >= g_RadioMenuTimeout); +} + +void CRadioMenuPlayer::Radio_Init(int keys, const char *title, const char *text) +{ + display_len = UTIL_Format(display_pkt, + sizeof(display_pkt), + "%s\n%s", + title, + text); + display_keys = keys; +} + +void CRadioMenuPlayer::Radio_Refresh() +{ + cell_t players[1] = {m_index}; + char *ptr = display_pkt; char save = 0; + size_t len = display_len; + unsigned int time; + + /* Compute the new time */ + if (menuHoldTime == 0) + { + time = 0; + } + else + { + time = menuHoldTime - (unsigned int)(gpGlobals->curtime - menuStartTime); + } + while (true) { if (len > 240) @@ -345,7 +426,7 @@ void CRadioDisplay::SendRawDisplay(int client, unsigned int time) ptr[240] = '\0'; } bf_write *buffer = g_UserMsgs.StartMessage(g_ShowMenuId, players, 1, USERMSG_BLOCKHOOKS); - buffer->WriteWord(_sel_keys); + buffer->WriteWord(display_keys); buffer->WriteChar(time ? time : -1); buffer->WriteByte( (len > 240) ? 1 : 0 ); buffer->WriteString(ptr); @@ -355,10 +436,14 @@ void CRadioDisplay::SendRawDisplay(int client, unsigned int time) ptr[240] = save; ptr = &ptr[240]; len -= 240; - } else { + } + else + { break; } } + + display_last_refresh = gpGlobals->curtime; } int CRadioDisplay::GetAmountRemaining() diff --git a/core/MenuStyle_Radio.h b/core/MenuStyle_Radio.h index 35f30cf0..a1b8971b 100644 --- a/core/MenuStyle_Radio.h +++ b/core/MenuStyle_Radio.h @@ -47,6 +47,21 @@ using namespace SourceMod; class CRadioDisplay; class CRadioMenu; +class CRadioMenuPlayer : public CBaseMenuPlayer +{ +public: + void Radio_Init(int keys, const char *title, const char *buffer); + bool Radio_NeedsRefresh(); + void Radio_Refresh(); + void Radio_SetIndex(unsigned int index); +private: + unsigned int m_index; + size_t display_len; + char display_pkt[512]; + int display_keys; + float display_last_refresh; +}; + class CRadioStyle : public BaseMenuStyle, public SMGlobalClass, @@ -61,6 +76,7 @@ public: //SMGlobalClass public: //BaseMenuStyle CBaseMenuPlayer *GetMenuPlayer(int client); void SendDisplay(int client, IMenuPanel *display); + void ProcessWatchList(); public: //IMenuStyle const char *GetStyleName(); IMenuPanel *CreatePanel(); @@ -75,8 +91,9 @@ public: public: CRadioDisplay *MakeRadioDisplay(CRadioMenu *menu=NULL); void FreeRadioDisplay(CRadioDisplay *display); + CRadioMenuPlayer *GetRadioMenuPlayer(int client); private: - CBaseMenuPlayer *m_players; + CRadioMenuPlayer *m_players; CStack<CRadioDisplay *> m_FreeDisplays; }; diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index ac01dc0c..0077e39f 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -87,4 +87,12 @@ "GameExtension" "game.cstrike" } } + + "tf" + { + "Keys" + { + "RadioMenuTimeout" "4" + } + } } From 4e83e1949a3bb682c24c55d0aa8bb04c55babcf5 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 18 Nov 2007 18:02:53 +0000 Subject: [PATCH 021/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401702 --- core/MenuStyle_Radio.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index 188c0247..1a5d033f 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -235,7 +235,6 @@ void CRadioStyle::ProcessWatchList() BaseMenuStyle::ProcessWatchList(); CRadioMenuPlayer *pPlayer; - float curtime = gpGlobals->curtime; unsigned int max_clients = g_Players.GetMaxClients(); for (unsigned int i = 1; i <= max_clients; i++) { From 36cbf57b858c33ac9fd40ca12fa6034569ee72df Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 19 Nov 2007 22:08:51 +0000 Subject: [PATCH 022/263] fixed makefiles --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401703 --- extensions/cstrike/Makefile.ep1 | 2 +- extensions/cstrike/Makefile.ep2 | 2 +- extensions/cstrike/Makefile.orig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/cstrike/Makefile.ep1 b/extensions/cstrike/Makefile.ep1 index d3687b56..6bfeafe5 100644 --- a/extensions/cstrike/Makefile.ep1 +++ b/extensions/cstrike/Makefile.ep1 @@ -13,7 +13,7 @@ HL2SDK = ../../../hl2sdk PROJECT = game.cstrike #Uncomment for SourceMM-enabled extensions -#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp diff --git a/extensions/cstrike/Makefile.ep2 b/extensions/cstrike/Makefile.ep2 index e936e671..5852266e 100644 --- a/extensions/cstrike/Makefile.ep2 +++ b/extensions/cstrike/Makefile.ep2 @@ -13,7 +13,7 @@ HL2SDK = ../../../hl2sdk-ob PROJECT = game.cstrike #Uncomment for SourceMM-enabled extensions -#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp diff --git a/extensions/cstrike/Makefile.orig b/extensions/cstrike/Makefile.orig index d21ea095..4ae96fd1 100644 --- a/extensions/cstrike/Makefile.orig +++ b/extensions/cstrike/Makefile.orig @@ -13,7 +13,7 @@ HL2SDK = ../../../hl2sdk PROJECT = game.cstrike #Uncomment for SourceMM-enabled extensions -#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp From 3d4d583182e239927f44ed7395e695987d6ba366 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Mon, 19 Nov 2007 23:11:10 +0000 Subject: [PATCH 023/263] Fixed the counting of team wins and rounds played in MapChooser --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401704 --- plugins/mapchooser.sp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index 4508c18b..2daed5f2 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -74,6 +74,7 @@ new Handle:g_NextMapList = INVALID_HANDLE; new Handle:g_TeamScores = INVALID_HANDLE; new Handle:g_VoteMenu = INVALID_HANDLE; +new g_TotalRounds; new bool:g_HasVoteStarted; new g_mapFileTime; @@ -87,7 +88,6 @@ public OnPluginStart() g_MapList = CreateArray(arraySize); g_OldMapList = CreateArray(arraySize); g_NextMapList = CreateArray(arraySize); - g_TeamScores = CreateArray(2); g_Cvar_StartTime = CreateConVar("sm_mapvote_start", "3.0", "Specifies when to start the vote based on time remaining.", _, true, 1.0); g_Cvar_StartRounds = CreateConVar("sm_mapvote_startround", "2.0", "Specifies when to start the vote based on rounds remaining.", _, true, 1.0); @@ -139,6 +139,14 @@ public OnConfigsExecuted() SetupTimeleftTimer(); SetConVarString(g_Cvar_Nextmap, "Pending Vote"); } + + if (g_TeamScores != INVALID_HANDLE) + { + CloseHandle(g_TeamScores); + } + + g_TeamScores = CreateArray(2); + g_TotalRounds = 0; } public OnMapEnd() @@ -225,8 +233,7 @@ public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) return; } - static total; - total++; + g_TotalRounds++; new team[2], teamPos = -1; for (new i; i < GetArraySize(g_TeamScores); i++) @@ -268,7 +275,7 @@ public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) new maxrounds = GetConVarInt(g_Cvar_Maxrounds); if (maxrounds) { - if (total >= (maxrounds - GetConVarInt(g_Cvar_StartRounds))) + if (g_TotalRounds >= (maxrounds - GetConVarInt(g_Cvar_StartRounds))) { InitiateVote(); } From d04d0e408960b43642a11675626e2ad6b79798c3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 20 Nov 2007 02:22:26 +0000 Subject: [PATCH 024/263] submitting patch from amb1181 - retrieving topmenu object name --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401705 --- extensions/topmenus/TopMenu.cpp | 2224 +++++++++++++------------- extensions/topmenus/TopMenu.h | 357 ++--- extensions/topmenus/smn_topmenus.cpp | 741 ++++----- plugins/include/topmenus.inc | 567 +++---- 4 files changed, 1971 insertions(+), 1918 deletions(-) diff --git a/extensions/topmenus/TopMenu.cpp b/extensions/topmenus/TopMenu.cpp index bdb048a5..53b266ec 100644 --- a/extensions/topmenus/TopMenu.cpp +++ b/extensions/topmenus/TopMenu.cpp @@ -1,1105 +1,1119 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#include <stdlib.h> -#include <stdarg.h> -#include "TopMenu.h" - -struct obj_by_name_t -{ - unsigned int obj_index; - char name[64]; -}; - -int _SortObjectNamesDescending(const void *ptr1, const void *ptr2); -unsigned int strncopy(char *dest, const char *src, size_t count); -size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...); - -TopMenu::TopMenu(ITopMenuObjectCallbacks *callbacks) -{ - m_clients = NULL; - m_SerialNo = 1; - m_pTitle = callbacks; - m_max_clients = 0; - - if (playerhelpers->IsServerActivated()) - { - CreatePlayers(playerhelpers->GetMaxClients()); - } -} - -TopMenu::~TopMenu() -{ - /* Delete all categories */ - while (m_Categories.size()) - { - RemoveFromMenu(m_Categories[0]->obj->object_id); - } - - /* Remove all objects */ - for (size_t i = 0; i < m_Objects.size(); i++) - { - assert(m_Objects[i]->is_free == true); - delete m_Objects[i]; - } - - m_pTitle->OnTopMenuObjectRemoved(this, 0); - - /* Delete all cached config entries */ - for (size_t i = 0; i < m_Config.cats.size(); i++) - { - delete m_Config.cats[i]; - } - - /* Sweep players */ - for (size_t i = 0; i <= (size_t)m_max_clients; i++) - { - TearDownClient(&m_clients[i]); - } - delete [] m_clients; -} - -void TopMenu::OnClientConnected(int client) -{ - if (m_clients == NULL) - { - return; - } - - topmenu_player_t *player = &m_clients[client]; - TearDownClient(player); -} - -void TopMenu::OnClientDisconnected(int client) -{ - if (m_clients == NULL) - { - return; - } - - topmenu_player_t *player = &m_clients[client]; - TearDownClient(player); -} - -void TopMenu::OnServerActivated(int max_clients) -{ - if (m_clients == NULL) - { - CreatePlayers(max_clients); - } -} - -unsigned int TopMenu::AddToMenu(const char *name, - TopMenuObjectType type, - ITopMenuObjectCallbacks *callbacks, - IdentityToken_t *owner, - const char *cmdname, - FlagBits flags, - unsigned int parent) -{ - return AddToMenu2(name, type, callbacks, owner, cmdname, flags, parent, NULL); -} - -unsigned int TopMenu::AddToMenu2(const char *name, - TopMenuObjectType type, - ITopMenuObjectCallbacks *callbacks, - IdentityToken_t *owner, - const char *cmdname, - FlagBits flags, - unsigned int parent, - const char *info_string) -{ - /* Sanity checks */ - if (type == TopMenuObject_Category && parent != 0) - { - return 0; - } - else if (type == TopMenuObject_Item && parent == 0) - { - return 0; - } - else if (m_ObjLookup.retrieve(name) != NULL) - { - return 0; - } - else if (type != TopMenuObject_Item && type != TopMenuObject_Category) - { - return 0; - } - - /* If we're adding an item, make sure the parent is valid, - * and that the parent is a category. - */ - topmenu_object_t *parent_obj = NULL; - topmenu_category_t *parent_cat = NULL; - if (type == TopMenuObject_Item) - { - /* Check parent index. Note it will be >= 1 here. */ - if (parent > m_Objects.size() || m_Objects[parent - 1]->is_free) - { - return 0; - } - parent_obj = m_Objects[parent - 1]; - - /* Find an equivalent pointer in the category array. */ - for (size_t i = 0; i < m_Categories.size(); i++) - { - if (m_Categories[i]->obj == parent_obj) - { - parent_cat = m_Categories[i]; - break; - } - } - - /* If none was found, leave. */ - if (parent_cat == NULL) - { - return 0; - } - } - - /* Re-use an old object pointer if we can. */ - topmenu_object_t *obj = NULL; - for (size_t i = 0; i < m_Objects.size(); i++) - { - if (m_Objects[i]->is_free == true) - { - obj = m_Objects[i]; - break; - } - } - - /* Otherwise, allocate a new one. */ - if (obj == NULL) - { - obj = new topmenu_object_t; - obj->object_id = ((unsigned int)m_Objects.size()) + 1; - m_Objects.push_back(obj); - } - - /* Initialize the object's properties. */ - obj->callbacks = callbacks; - obj->flags = flags; - obj->owner = owner; - obj->type = type; - obj->is_free = false; - obj->parent = parent_obj; - strncopy(obj->name, name, sizeof(obj->name)); - strncopy(obj->cmdname, cmdname ? cmdname : "", sizeof(obj->cmdname)); - strncopy(obj->info, info_string ? info_string : "", sizeof(obj->info)); - - if (obj->type == TopMenuObject_Category) - { - /* Create a new category entry */ - topmenu_category_t *cat = new topmenu_category_t; - cat->obj = obj; - cat->reorder = false; - cat->serial = 1; - - /* Add it, then update our serial change number. */ - m_Categories.push_back(cat); - m_SerialNo++; - - /* Updating sorting info */ - m_bCatsNeedResort = true; - } - else if (obj->type == TopMenuObject_Item) - { - /* Update the category, mark it as needing changes */ - parent_cat->obj_list.push_back(obj); - parent_cat->reorder = true; - parent_cat->serial++; - - /* If the category just went from 0 to 1 items, mark it as - * changed, so clients get the category drawn. - */ - if (parent_cat->obj_list.size() == 1) - { - m_SerialNo++; - } - } - - m_ObjLookup.insert(name, obj); - - return obj->object_id; -} - -const char *TopMenu::GetObjectInfoString(unsigned int object_id) -{ - if (object_id == 0 - || object_id > m_Objects.size() - || m_Objects[object_id - 1]->is_free) - { - return NULL; - } - - topmenu_object_t *obj = m_Objects[object_id - 1]; - - return obj->info; -} - -void TopMenu::RemoveFromMenu(unsigned int object_id) -{ - if (object_id == 0 - || object_id > m_Objects.size() - || m_Objects[object_id - 1]->is_free) - { - return; - } - - topmenu_object_t *obj = m_Objects[object_id - 1]; - - m_ObjLookup.remove(obj->name); - - if (obj->type == TopMenuObject_Category) - { - /* Find it in the category list. */ - for (size_t i = 0; i < m_Categories.size(); i++) - { - if (m_Categories[i]->obj == obj) - { - /* Mark all children as removed + free. Note we could - * call into RemoveMenuItem() for this, but it'd be very - * inefficient! - */ - topmenu_category_t *cat = m_Categories[i]; - for (size_t j = 0; j < m_Categories[i]->obj_list.size(); j++) - { - cat->obj_list[j]->callbacks->OnTopMenuObjectRemoved(this, cat->obj_list[j]->object_id); - cat->obj_list[j]->is_free = true; - } - - /* Remove the category from the list, then delete it. */ - m_Categories.erase(m_Categories.iterAt(i)); - delete cat; - break; - } - } - - /* Update the root as changed. */ - m_SerialNo++; - m_bCatsNeedResort = true; - } - else if (obj->type == TopMenuObject_Item) - { - /* Find the category this item is in. */ - topmenu_category_t *parent_cat = NULL; - for (size_t i = 0; i < m_Categories.size(); i++) - { - if (m_Categories[i]->obj == obj->parent) - { - parent_cat = m_Categories[i]; - break; - } - } - - /* Erase it from the category's lists. */ - if (parent_cat) - { - for (size_t i = 0; i < parent_cat->obj_list.size(); i++) - { - if (parent_cat->obj_list[i] == obj) - { - parent_cat->obj_list.erase(parent_cat->obj_list.iterAt(i)); - - /* If this category now has no items, mark root as changed - * so clients won't get the category drawn anymore. - */ - if (parent_cat->obj_list.size() == 0) - { - m_SerialNo++; - } - break; - } - } - - /* Update the category as changed. */ - parent_cat->reorder = true; - parent_cat->serial++; - } - } - - /* The callbacks pointer is still valid, so fire away! */ - obj->callbacks->OnTopMenuObjectRemoved(this, object_id); - - /* Finally, mark the object as free. */ - obj->is_free = true; -} - -bool TopMenu::DisplayMenu(int client, unsigned int hold_time, TopMenuPosition position) -{ - if (m_clients == NULL) - { - return false; - } - - IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(client); - if (!pPlayer->IsInGame()) - { - return false; - } - - UpdateClientRoot(client, pPlayer); - - topmenu_player_t *pClient = &m_clients[client]; - if (pClient->root == NULL) - { - return false; - } - - bool return_value = false; - - if (position == TopMenuPosition_LastCategory && - pClient->last_category < m_Categories.size()) - { - return_value = DisplayCategory(client, pClient->last_category, hold_time, true); - if (!return_value) - { - return_value = pClient->root->DisplayAtItem(client, hold_time, pClient->last_root_pos); - } - } - else if (position == TopMenuPosition_LastRoot) - { - pClient->root->DisplayAtItem(client, hold_time, pClient->last_root_pos); - } - else if (position == TopMenuPosition_Start) - { - pClient->last_position = 0; - pClient->last_category = 0; - return_value = pClient->root->Display(client, hold_time); - } - - return return_value; -} - -bool TopMenu::DisplayCategory(int client, unsigned int category, unsigned int hold_time, bool last_position) -{ - UpdateClientCategory(client, category); - - topmenu_player_t *pClient = &m_clients[client]; - if (category >= pClient->cat_count - || pClient->cats[category].menu == NULL) - { - return false; - } - - bool return_value = false; - - topmenu_player_category_t *player_cat = &(pClient->cats[category]); - - pClient->last_category = category; - if (last_position) - { - return_value = player_cat->menu->DisplayAtItem(client, hold_time, pClient->last_position); - } - else - { - return_value = player_cat->menu->Display(client, hold_time); - } - - return return_value; -} - -void TopMenu::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page) -{ - const char *item_name = menu->GetItemInfo(item, NULL); - if (!item_name) - { - return; - } - - topmenu_object_t *obj; - topmenu_player_t *pClient = &m_clients[client]; - topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); - if (pObject == NULL) - { - return; - } - - obj = *pObject; - - /* We now have the object... what do we do with it? */ - if (obj->type == TopMenuObject_Category) - { - /* If it's a category, the user wants to view it.. */ - for (size_t i = 0; i < m_Categories.size(); i++) - { - if (m_Categories[i]->obj == obj) - { - pClient->last_root_pos = item_on_page; - if (!DisplayCategory(client, (unsigned int)i, MENU_TIME_FOREVER, false)) - { - /* If we can't display the category, re-display the root menu */ - DisplayMenu(client, MENU_TIME_FOREVER, TopMenuPosition_LastRoot); - } - break; - } - } - } - else - { - pClient->last_position = item_on_page; - - /* Re-check access in case this user had their credentials revoked */ - if (obj->cmdname[0] != '\0' && !adminsys->CheckAccess(client, obj->cmdname, obj->flags, false)) - { - DisplayMenu(client, 0, TopMenuPosition_LastCategory); - return; - } - - /* Pass the information on to the callback */ - obj->callbacks->OnTopMenuSelectOption(this, client, obj->object_id); - } -} - -void TopMenu::OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style) -{ - const char *item_name = menu->GetItemInfo(item, NULL); - if (!item_name) - { - return; - } - - topmenu_object_t *obj; - topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); - if (pObject == NULL) - { - return; - } - - obj = *pObject; - - style = obj->callbacks->OnTopMenuDrawOption(this, client, obj->object_id); - if (style != ITEMDRAW_DEFAULT) - { - return; - } - - if (obj->cmdname[0] == '\0') - { - return; - } - - if (!adminsys->CheckAccess(client, obj->cmdname, obj->flags, false)) - { - style = ITEMDRAW_IGNORE; - } -} - -unsigned int TopMenu::OnMenuDisplayItem(IBaseMenu *menu, - int client, - IMenuPanel *panel, - unsigned int item, - const ItemDrawInfo &dr) -{ - const char *item_name = menu->GetItemInfo(item, NULL); - if (!item_name) - { - return 0; - } - - topmenu_object_t *obj; - topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); - if (pObject == NULL) - { - return 0; - } - - obj = *pObject; - - /* Ask the object to render the text for this client */ - char renderbuf[64]; - obj->callbacks->OnTopMenuDisplayOption(this, client, obj->object_id, renderbuf, sizeof(renderbuf)); - - /* Build the new draw info */ - ItemDrawInfo new_dr = dr; - new_dr.display = renderbuf; - - /* Man I love the menu API. Ask the panel to draw the item and give the position - * back to Core's renderer. This way we don't have to worry about keeping the - * render buffer static! - */ - return panel->DrawItem(new_dr); -} - -void TopMenu::OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason) -{ - if (reason == MenuCancel_ExitBack) - { - /* If the client chose exit back, they were on a category menu, and we can - * now display the root menu from the last known position. - */ - DisplayMenu(client, 0, TopMenuPosition_LastRoot); - } -} - -void TopMenu::UpdateClientRoot(int client, IGamePlayer *pGamePlayer) -{ - topmenu_player_t *pClient = &m_clients[client]; - IGamePlayer *pPlayer = pGamePlayer ? pGamePlayer : playerhelpers->GetGamePlayer(client); - - /* Determine if an update is necessary */ - bool is_update_needed = false; - if (pClient->menu_serial != m_SerialNo) - { - is_update_needed = true; - } - else if (pPlayer->GetUserId() != pClient->user_id) - { - is_update_needed = true; - } - - /* If no update is needed at the root level, just leave now */ - if (!is_update_needed) - { - return; - } - - /* First we need to flush the cache... */ - TearDownClient(pClient); - - /* Now, rebuild the category list, but don't create menus */ - if (m_Categories.size() == 0) - { - pClient->cat_count = 0; - pClient->cats = NULL; - } - else - { - pClient->cat_count = (unsigned int)m_Categories.size(); - pClient->cats = new topmenu_player_category_t[pClient->cat_count]; - memset(pClient->cats, 0, sizeof(topmenu_player_category_t) * pClient->cat_count); - } - - /* Re-sort the root categories if needed */ - SortCategoriesIfNeeded(); - - /* Build the root menu */ - IBaseMenu *root_menu = menus->GetDefaultStyle()->CreateMenu(this, myself->GetIdentity()); - - /* Add the sorted items */ - for (size_t i = 0; i < m_SortedCats.size(); i++) - { - if (m_Categories[m_SortedCats[i]]->obj_list.size() == 0) - { - continue; - } - root_menu->AppendItem(m_Categories[m_SortedCats[i]]->obj->name, ItemDrawInfo("")); - } - - /* Now we need to handle un-sorted items. This is slightly trickier, as we need to - * pre-render each category name, and cache those names. Phew! - */ - if (m_UnsortedCats.size()) - { - obj_by_name_t *item_list = new obj_by_name_t[m_UnsortedCats.size()]; - for (size_t i = 0; i < m_UnsortedCats.size(); i++) - { - obj_by_name_t *temp_obj = &item_list[i]; - topmenu_object_t *obj = m_Categories[m_UnsortedCats[i]]->obj; - obj->callbacks->OnTopMenuDisplayOption(this, - client, - obj->object_id, - temp_obj->name, - sizeof(temp_obj->name)); - temp_obj->obj_index = m_UnsortedCats[i]; - } - - /* Sort our temp list */ - qsort(item_list, m_UnsortedCats.size(), sizeof(obj_by_name_t), _SortObjectNamesDescending); - - /* Add the new sorted categories */ - for (size_t i = 0; i < m_UnsortedCats.size(); i++) - { - if (m_Categories[item_list[i].obj_index]->obj_list.size() == 0) - { - continue; - } - root_menu->AppendItem(m_Categories[item_list[i].obj_index]->obj->name, ItemDrawInfo("")); - } - - delete [] item_list; - } - - /* Set the menu's title */ - char renderbuf[128]; - m_pTitle->OnTopMenuDisplayTitle(this, client, 0, renderbuf, sizeof(renderbuf)); - root_menu->SetDefaultTitle(renderbuf); - - /* The client is now fully updated */ - pClient->root = root_menu; - pClient->user_id = pPlayer->GetUserId(); - pClient->menu_serial = m_SerialNo; - pClient->last_position = 0; - pClient->last_category = 0; - pClient->last_root_pos = 0; -} - -void TopMenu::UpdateClientCategory(int client, unsigned int category) -{ - /* Update the client's root menu just in case it needs it. This - * will validate that we have both a valid client and a valid - * category structure for that client. - */ - UpdateClientRoot(client); - - /* Now it's guaranteed that our category tables will be usable */ - topmenu_player_t *pClient = &m_clients[client]; - topmenu_category_t *cat = m_Categories[category]; - topmenu_player_category_t *player_cat = &(pClient->cats[category]); - - /* Does the category actually need updating? */ - if (player_cat->serial == cat->serial) - { - return; - } - - /* Destroy any existing menu */ - if (player_cat->menu) - { - player_cat->menu->Destroy(); - player_cat->menu = NULL; - } - - if (pClient->last_category == category) - { - pClient->last_position = 0; - } - - IBaseMenu *cat_menu = menus->GetDefaultStyle()->CreateMenu(this, myself->GetIdentity()); - - /* Categories get an "exit back" button */ - cat_menu->SetMenuOptionFlags(cat_menu->GetMenuOptionFlags() | MENUFLAG_BUTTON_EXITBACK); - - /* Re-sort the category if needed */ - SortCategoryIfNeeded(category); - - /* Build the menu with the sorted items first */ - for (size_t i = 0; i < cat->sorted.size(); i++) - { - cat_menu->AppendItem(cat->sorted[i]->name, ItemDrawInfo("")); - } - - /* Now handle unsorted items */ - if (cat->unsorted.size()) - { - /* Build a list of the item names */ - obj_by_name_t *item_list = new obj_by_name_t[cat->unsorted.size()]; - for (size_t i = 0; i < cat->unsorted.size(); i++) - { - obj_by_name_t *item = &item_list[i]; - topmenu_object_t *obj = cat->unsorted[i]; - obj->callbacks->OnTopMenuDisplayOption(this, - client, - obj->object_id, - item->name, - sizeof(item->name)); - item->obj_index = (unsigned int)i; - } - - /* Sort the names */ - qsort(item_list, cat->unsorted.size(), sizeof(obj_by_name_t), _SortObjectNamesDescending); - - /* Add to the menu */ - for (size_t i = 0; i < cat->unsorted.size(); i++) - { - cat_menu->AppendItem(cat->unsorted[item_list[i].obj_index]->name, ItemDrawInfo("")); - } - - delete [] item_list; - } - - /* Set the menu's title */ - char renderbuf[128]; - cat->obj->callbacks->OnTopMenuDisplayTitle(this, - client, - cat->obj->object_id, - renderbuf, - sizeof(renderbuf)); - cat_menu->SetDefaultTitle(renderbuf); - - /* We're done! */ - player_cat->menu = cat_menu; - player_cat->serial = cat->serial; -} - -void TopMenu::SortCategoryIfNeeded(unsigned int category) -{ - topmenu_category_t *cat = m_Categories[category]; - if (!cat->reorder) - { - return; - } - - cat->sorted.clear(); - cat->unsorted.clear(); - - if (cat->obj_list.size() == 0) - { - cat->reorder = false; - return; - } - - CVector<unsigned int> to_sort; - for (size_t i = 0; i < cat->obj_list.size(); i++) - { - to_sort.push_back(i); - } - - /* Find a matching category in the configs */ - config_category_t *config_cat = NULL; - for (size_t i = 0; i < m_Config.cats.size(); i++) - { - if (strcmp(m_Config.strings.GetString(m_Config.cats[i]->name), cat->obj->name) == 0) - { - config_cat = m_Config.cats[i]; - break; - } - } - - /* If there is a matching category, build a pre-sorted item list */ - if (config_cat != NULL) - { - /* Find matching objects in this category */ - for (size_t i = 0; i < config_cat->commands.size(); i++) - { - const char *config_name = m_Config.strings.GetString(config_cat->commands[i]); - for (size_t j = 0; j < to_sort.size(); j++) - { - if (strcmp(config_name, cat->obj_list[to_sort[j]]->name) == 0) - { - /* Place in the final list, then remove from the temporary list */ - cat->sorted.push_back(cat->obj_list[to_sort[j]]); - to_sort.erase(to_sort.iterAt(j)); - break; - } - } - } - } - - /* Push any remaining items onto the unsorted list */ - for (size_t i = 0; i < to_sort.size(); i++) - { - cat->unsorted.push_back(cat->obj_list[to_sort[i]]); - } - - cat->reorder = false; -} - -void TopMenu::SortCategoriesIfNeeded() -{ - if (!m_bCatsNeedResort) - { - return; - } - - /* Clear sort results */ - m_SortedCats.clear(); - m_UnsortedCats.clear(); - - if (m_Categories.size() == 0) - { - m_bCatsNeedResort = false; - return; - } - - CVector<unsigned int> to_sort; - for (unsigned int i = 0; i < (unsigned int)m_Categories.size(); i++) - { - to_sort.push_back(i); - } - - /* If we have any predefined categories, add them in as they appear. */ - for (size_t i= 0; i < m_Config.cats.size(); i++) - { - /* Find this category and map it in if we can */ - for (size_t j = 0; j < to_sort.size(); j++) - { - if (strcmp(m_Config.strings.GetString(m_Config.cats[i]->name), - m_Categories[to_sort[j]]->obj->name) == 0) - { - /* Add to the real list and remove from the temporary */ - m_SortedCats.push_back(to_sort[j]); - to_sort.erase(to_sort.iterAt(j)); - break; - } - } - } - - /* Push any remaining items onto the unsorted list */ - for (size_t i = 0; i < to_sort.size(); i++) - { - m_UnsortedCats.push_back(to_sort[i]); - } - - m_bCatsNeedResort = false; -} - -void TopMenu::CreatePlayers(int max_clients) -{ - m_max_clients = max_clients; - m_clients = (topmenu_player_t *)malloc(sizeof(topmenu_player_t) * (max_clients + 1)); - memset(m_clients, 0, sizeof(topmenu_player_t) * (max_clients + 1)); -} - -void TopMenu::TearDownClient(topmenu_player_t *player) -{ - if (player->cats != NULL) - { - for (unsigned int i = 0; i < player->cat_count; i++) - { - topmenu_player_category_t *player_cat = &(player->cats[i]); - if (player_cat->menu != NULL) - { - player_cat->menu->Destroy(); - } - } - delete [] player->cats; - } - - if (player->root != NULL) - { - player->root->Destroy(); - } - - memset(player, 0, sizeof(topmenu_player_t)); -} - -bool TopMenu::LoadConfiguration(const char *file, char *error, size_t maxlength) -{ - SMCError err; - SMCStates states; - - if ((err = textparsers->ParseFile_SMC(file, this, &states)) - != SMCError_Okay) - { - const char *err_string = textparsers->GetSMCErrorString(err); - if (!err_string) - { - err_string = "Unknown"; - } - - UTIL_Format(error, maxlength, "%s", err_string); - - return false; - } - - return true; -} - -bool TopMenu::OnIdentityRemoval(IdentityToken_t *owner) -{ - /* First sweep the categories owned by us */ - CVector<unsigned int> obj_list; - for (size_t i = 0; i < m_Categories.size(); i++) - { - if (m_Categories[i]->obj->owner == owner) - { - obj_list.push_back(m_Categories[i]->obj->object_id); - } - } - - for (size_t i = 0; i < obj_list.size(); i++) - { - RemoveFromMenu(obj_list[i]); - } - - /* Now we can look for actual items */ - for (size_t i = 0; i < m_Objects.size(); i++) - { - if (m_Objects[i]->is_free) - { - continue; - } - if (m_Objects[i]->owner == owner) - { - assert(m_Objects[i]->type != TopMenuObject_Category); - RemoveFromMenu(m_Objects[i]->object_id); - } - } - - return true; -} - -#define PARSE_STATE_NONE 0 -#define PARSE_STATE_MAIN 1 -#define PARSE_STATE_CATEGORY 2 -unsigned int ignore_parse_level = 0; -unsigned int current_parse_state = 0; -config_category_t *cur_cat = NULL; - -void TopMenu::ReadSMC_ParseStart() -{ - current_parse_state = PARSE_STATE_NONE; - ignore_parse_level = 0; - cur_cat = NULL; - - /* Reset the old config */ - m_Config.strings.Reset(); - for (size_t i = 0; i < m_Config.cats.size(); i++) - { - delete m_Config.cats[i]; - } - m_Config.cats.clear(); -} - -SMCResult TopMenu::ReadSMC_NewSection(const SMCStates *states, const char *name) -{ - if (ignore_parse_level) - { - ignore_parse_level++; - } - else - { - if (current_parse_state == PARSE_STATE_NONE) - { - if (strcmp(name, "Menu") == 0) - { - current_parse_state = PARSE_STATE_MAIN; - } - else - { - ignore_parse_level = 1; - } - } - else if (current_parse_state == PARSE_STATE_MAIN) - { - cur_cat = new config_category_t; - cur_cat->name = m_Config.strings.AddString(name); - m_Config.cats.push_back(cur_cat); - current_parse_state = PARSE_STATE_CATEGORY; - } - else - { - ignore_parse_level = 1; - } - } - - return SMCResult_Continue; -} - -SMCResult TopMenu::ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) -{ - if (ignore_parse_level > 0 - || current_parse_state != PARSE_STATE_CATEGORY - || cur_cat == NULL) - { - return SMCResult_Continue; - } - - if (strcmp(key, "item") == 0) - { - cur_cat->commands.push_back(m_Config.strings.AddString(value)); - } - - return SMCResult_Continue; -} - -SMCResult TopMenu::ReadSMC_LeavingSection(const SMCStates *states) -{ - if (ignore_parse_level) - { - ignore_parse_level--; - } - else - { - if (current_parse_state == PARSE_STATE_CATEGORY) - { - cur_cat = NULL; - current_parse_state = PARSE_STATE_MAIN; - } - else if (current_parse_state == PARSE_STATE_MAIN) - { - current_parse_state = PARSE_STATE_NONE; - } - } - - return SMCResult_Continue; -} - -unsigned int TopMenu::FindCategory(const char *name) -{ - topmenu_object_t **p_obj = m_ObjLookup.retrieve(name); - if (!p_obj) - { - return 0; - } - - topmenu_object_t *obj = *p_obj; - if (obj->type != TopMenuObject_Category) - { - return 0; - } - - return obj->object_id; -} - -int _SortObjectNamesDescending(const void *ptr1, const void *ptr2) -{ - obj_by_name_t *obj1 = (obj_by_name_t *)ptr1; - obj_by_name_t *obj2 = (obj_by_name_t *)ptr2; - return strcmp(obj1->name, obj2->name); -} - -unsigned int strncopy(char *dest, const char *src, size_t count) -{ - if (!count) - { - return 0; - } - - char *start = dest; - while ((*src) && (--count)) - { - *dest++ = *src++; - } - *dest = '\0'; - - return (dest - start); -} - -size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - size_t len = vsnprintf(buffer, maxlength, fmt, ap); - va_end(ap); - - if (len >= maxlength) - { - buffer[maxlength - 1] = '\0'; - return (maxlength - 1); - } - else - { - return len; - } -} +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <stdlib.h> +#include <stdarg.h> +#include "TopMenu.h" + +struct obj_by_name_t +{ + unsigned int obj_index; + char name[64]; +}; + +int _SortObjectNamesDescending(const void *ptr1, const void *ptr2); +unsigned int strncopy(char *dest, const char *src, size_t count); +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...); + +TopMenu::TopMenu(ITopMenuObjectCallbacks *callbacks) +{ + m_clients = NULL; + m_SerialNo = 1; + m_pTitle = callbacks; + m_max_clients = 0; + + if (playerhelpers->IsServerActivated()) + { + CreatePlayers(playerhelpers->GetMaxClients()); + } +} + +TopMenu::~TopMenu() +{ + /* Delete all categories */ + while (m_Categories.size()) + { + RemoveFromMenu(m_Categories[0]->obj->object_id); + } + + /* Remove all objects */ + for (size_t i = 0; i < m_Objects.size(); i++) + { + assert(m_Objects[i]->is_free == true); + delete m_Objects[i]; + } + + m_pTitle->OnTopMenuObjectRemoved(this, 0); + + /* Delete all cached config entries */ + for (size_t i = 0; i < m_Config.cats.size(); i++) + { + delete m_Config.cats[i]; + } + + /* Sweep players */ + for (size_t i = 0; i <= (size_t)m_max_clients; i++) + { + TearDownClient(&m_clients[i]); + } + delete [] m_clients; +} + +void TopMenu::OnClientConnected(int client) +{ + if (m_clients == NULL) + { + return; + } + + topmenu_player_t *player = &m_clients[client]; + TearDownClient(player); +} + +void TopMenu::OnClientDisconnected(int client) +{ + if (m_clients == NULL) + { + return; + } + + topmenu_player_t *player = &m_clients[client]; + TearDownClient(player); +} + +void TopMenu::OnServerActivated(int max_clients) +{ + if (m_clients == NULL) + { + CreatePlayers(max_clients); + } +} + +unsigned int TopMenu::AddToMenu(const char *name, + TopMenuObjectType type, + ITopMenuObjectCallbacks *callbacks, + IdentityToken_t *owner, + const char *cmdname, + FlagBits flags, + unsigned int parent) +{ + return AddToMenu2(name, type, callbacks, owner, cmdname, flags, parent, NULL); +} + +unsigned int TopMenu::AddToMenu2(const char *name, + TopMenuObjectType type, + ITopMenuObjectCallbacks *callbacks, + IdentityToken_t *owner, + const char *cmdname, + FlagBits flags, + unsigned int parent, + const char *info_string) +{ + /* Sanity checks */ + if (type == TopMenuObject_Category && parent != 0) + { + return 0; + } + else if (type == TopMenuObject_Item && parent == 0) + { + return 0; + } + else if (m_ObjLookup.retrieve(name) != NULL) + { + return 0; + } + else if (type != TopMenuObject_Item && type != TopMenuObject_Category) + { + return 0; + } + + /* If we're adding an item, make sure the parent is valid, + * and that the parent is a category. + */ + topmenu_object_t *parent_obj = NULL; + topmenu_category_t *parent_cat = NULL; + if (type == TopMenuObject_Item) + { + /* Check parent index. Note it will be >= 1 here. */ + if (parent > m_Objects.size() || m_Objects[parent - 1]->is_free) + { + return 0; + } + parent_obj = m_Objects[parent - 1]; + + /* Find an equivalent pointer in the category array. */ + for (size_t i = 0; i < m_Categories.size(); i++) + { + if (m_Categories[i]->obj == parent_obj) + { + parent_cat = m_Categories[i]; + break; + } + } + + /* If none was found, leave. */ + if (parent_cat == NULL) + { + return 0; + } + } + + /* Re-use an old object pointer if we can. */ + topmenu_object_t *obj = NULL; + for (size_t i = 0; i < m_Objects.size(); i++) + { + if (m_Objects[i]->is_free == true) + { + obj = m_Objects[i]; + break; + } + } + + /* Otherwise, allocate a new one. */ + if (obj == NULL) + { + obj = new topmenu_object_t; + obj->object_id = ((unsigned int)m_Objects.size()) + 1; + m_Objects.push_back(obj); + } + + /* Initialize the object's properties. */ + obj->callbacks = callbacks; + obj->flags = flags; + obj->owner = owner; + obj->type = type; + obj->is_free = false; + obj->parent = parent_obj; + strncopy(obj->name, name, sizeof(obj->name)); + strncopy(obj->cmdname, cmdname ? cmdname : "", sizeof(obj->cmdname)); + strncopy(obj->info, info_string ? info_string : "", sizeof(obj->info)); + + if (obj->type == TopMenuObject_Category) + { + /* Create a new category entry */ + topmenu_category_t *cat = new topmenu_category_t; + cat->obj = obj; + cat->reorder = false; + cat->serial = 1; + + /* Add it, then update our serial change number. */ + m_Categories.push_back(cat); + m_SerialNo++; + + /* Updating sorting info */ + m_bCatsNeedResort = true; + } + else if (obj->type == TopMenuObject_Item) + { + /* Update the category, mark it as needing changes */ + parent_cat->obj_list.push_back(obj); + parent_cat->reorder = true; + parent_cat->serial++; + + /* If the category just went from 0 to 1 items, mark it as + * changed, so clients get the category drawn. + */ + if (parent_cat->obj_list.size() == 1) + { + m_SerialNo++; + } + } + + m_ObjLookup.insert(name, obj); + + return obj->object_id; +} + +const char *TopMenu::GetObjectInfoString(unsigned int object_id) +{ + if (object_id == 0 + || object_id > m_Objects.size() + || m_Objects[object_id - 1]->is_free) + { + return NULL; + } + + topmenu_object_t *obj = m_Objects[object_id - 1]; + + return obj->info; +} + +const char *TopMenu::GetObjectName(unsigned int object_id) +{ + if (object_id == 0 + || object_id > m_Objects.size() + || m_Objects[object_id - 1]->is_free) + { + return NULL; + } + + topmenu_object_t *obj = m_Objects[object_id - 1]; + + return obj->name; +} + +void TopMenu::RemoveFromMenu(unsigned int object_id) +{ + if (object_id == 0 + || object_id > m_Objects.size() + || m_Objects[object_id - 1]->is_free) + { + return; + } + + topmenu_object_t *obj = m_Objects[object_id - 1]; + + m_ObjLookup.remove(obj->name); + + if (obj->type == TopMenuObject_Category) + { + /* Find it in the category list. */ + for (size_t i = 0; i < m_Categories.size(); i++) + { + if (m_Categories[i]->obj == obj) + { + /* Mark all children as removed + free. Note we could + * call into RemoveMenuItem() for this, but it'd be very + * inefficient! + */ + topmenu_category_t *cat = m_Categories[i]; + for (size_t j = 0; j < m_Categories[i]->obj_list.size(); j++) + { + cat->obj_list[j]->callbacks->OnTopMenuObjectRemoved(this, cat->obj_list[j]->object_id); + cat->obj_list[j]->is_free = true; + } + + /* Remove the category from the list, then delete it. */ + m_Categories.erase(m_Categories.iterAt(i)); + delete cat; + break; + } + } + + /* Update the root as changed. */ + m_SerialNo++; + m_bCatsNeedResort = true; + } + else if (obj->type == TopMenuObject_Item) + { + /* Find the category this item is in. */ + topmenu_category_t *parent_cat = NULL; + for (size_t i = 0; i < m_Categories.size(); i++) + { + if (m_Categories[i]->obj == obj->parent) + { + parent_cat = m_Categories[i]; + break; + } + } + + /* Erase it from the category's lists. */ + if (parent_cat) + { + for (size_t i = 0; i < parent_cat->obj_list.size(); i++) + { + if (parent_cat->obj_list[i] == obj) + { + parent_cat->obj_list.erase(parent_cat->obj_list.iterAt(i)); + + /* If this category now has no items, mark root as changed + * so clients won't get the category drawn anymore. + */ + if (parent_cat->obj_list.size() == 0) + { + m_SerialNo++; + } + break; + } + } + + /* Update the category as changed. */ + parent_cat->reorder = true; + parent_cat->serial++; + } + } + + /* The callbacks pointer is still valid, so fire away! */ + obj->callbacks->OnTopMenuObjectRemoved(this, object_id); + + /* Finally, mark the object as free. */ + obj->is_free = true; +} + +bool TopMenu::DisplayMenu(int client, unsigned int hold_time, TopMenuPosition position) +{ + if (m_clients == NULL) + { + return false; + } + + IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(client); + if (!pPlayer->IsInGame()) + { + return false; + } + + UpdateClientRoot(client, pPlayer); + + topmenu_player_t *pClient = &m_clients[client]; + if (pClient->root == NULL) + { + return false; + } + + bool return_value = false; + + if (position == TopMenuPosition_LastCategory && + pClient->last_category < m_Categories.size()) + { + return_value = DisplayCategory(client, pClient->last_category, hold_time, true); + if (!return_value) + { + return_value = pClient->root->DisplayAtItem(client, hold_time, pClient->last_root_pos); + } + } + else if (position == TopMenuPosition_LastRoot) + { + pClient->root->DisplayAtItem(client, hold_time, pClient->last_root_pos); + } + else if (position == TopMenuPosition_Start) + { + pClient->last_position = 0; + pClient->last_category = 0; + return_value = pClient->root->Display(client, hold_time); + } + + return return_value; +} + +bool TopMenu::DisplayCategory(int client, unsigned int category, unsigned int hold_time, bool last_position) +{ + UpdateClientCategory(client, category); + + topmenu_player_t *pClient = &m_clients[client]; + if (category >= pClient->cat_count + || pClient->cats[category].menu == NULL) + { + return false; + } + + bool return_value = false; + + topmenu_player_category_t *player_cat = &(pClient->cats[category]); + + pClient->last_category = category; + if (last_position) + { + return_value = player_cat->menu->DisplayAtItem(client, hold_time, pClient->last_position); + } + else + { + return_value = player_cat->menu->Display(client, hold_time); + } + + return return_value; +} + +void TopMenu::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page) +{ + const char *item_name = menu->GetItemInfo(item, NULL); + if (!item_name) + { + return; + } + + topmenu_object_t *obj; + topmenu_player_t *pClient = &m_clients[client]; + topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); + if (pObject == NULL) + { + return; + } + + obj = *pObject; + + /* We now have the object... what do we do with it? */ + if (obj->type == TopMenuObject_Category) + { + /* If it's a category, the user wants to view it.. */ + for (size_t i = 0; i < m_Categories.size(); i++) + { + if (m_Categories[i]->obj == obj) + { + pClient->last_root_pos = item_on_page; + if (!DisplayCategory(client, (unsigned int)i, MENU_TIME_FOREVER, false)) + { + /* If we can't display the category, re-display the root menu */ + DisplayMenu(client, MENU_TIME_FOREVER, TopMenuPosition_LastRoot); + } + break; + } + } + } + else + { + pClient->last_position = item_on_page; + + /* Re-check access in case this user had their credentials revoked */ + if (obj->cmdname[0] != '\0' && !adminsys->CheckAccess(client, obj->cmdname, obj->flags, false)) + { + DisplayMenu(client, 0, TopMenuPosition_LastCategory); + return; + } + + /* Pass the information on to the callback */ + obj->callbacks->OnTopMenuSelectOption(this, client, obj->object_id); + } +} + +void TopMenu::OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style) +{ + const char *item_name = menu->GetItemInfo(item, NULL); + if (!item_name) + { + return; + } + + topmenu_object_t *obj; + topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); + if (pObject == NULL) + { + return; + } + + obj = *pObject; + + style = obj->callbacks->OnTopMenuDrawOption(this, client, obj->object_id); + if (style != ITEMDRAW_DEFAULT) + { + return; + } + + if (obj->cmdname[0] == '\0') + { + return; + } + + if (!adminsys->CheckAccess(client, obj->cmdname, obj->flags, false)) + { + style = ITEMDRAW_IGNORE; + } +} + +unsigned int TopMenu::OnMenuDisplayItem(IBaseMenu *menu, + int client, + IMenuPanel *panel, + unsigned int item, + const ItemDrawInfo &dr) +{ + const char *item_name = menu->GetItemInfo(item, NULL); + if (!item_name) + { + return 0; + } + + topmenu_object_t *obj; + topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name); + if (pObject == NULL) + { + return 0; + } + + obj = *pObject; + + /* Ask the object to render the text for this client */ + char renderbuf[64]; + obj->callbacks->OnTopMenuDisplayOption(this, client, obj->object_id, renderbuf, sizeof(renderbuf)); + + /* Build the new draw info */ + ItemDrawInfo new_dr = dr; + new_dr.display = renderbuf; + + /* Man I love the menu API. Ask the panel to draw the item and give the position + * back to Core's renderer. This way we don't have to worry about keeping the + * render buffer static! + */ + return panel->DrawItem(new_dr); +} + +void TopMenu::OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason) +{ + if (reason == MenuCancel_ExitBack) + { + /* If the client chose exit back, they were on a category menu, and we can + * now display the root menu from the last known position. + */ + DisplayMenu(client, 0, TopMenuPosition_LastRoot); + } +} + +void TopMenu::UpdateClientRoot(int client, IGamePlayer *pGamePlayer) +{ + topmenu_player_t *pClient = &m_clients[client]; + IGamePlayer *pPlayer = pGamePlayer ? pGamePlayer : playerhelpers->GetGamePlayer(client); + + /* Determine if an update is necessary */ + bool is_update_needed = false; + if (pClient->menu_serial != m_SerialNo) + { + is_update_needed = true; + } + else if (pPlayer->GetUserId() != pClient->user_id) + { + is_update_needed = true; + } + + /* If no update is needed at the root level, just leave now */ + if (!is_update_needed) + { + return; + } + + /* First we need to flush the cache... */ + TearDownClient(pClient); + + /* Now, rebuild the category list, but don't create menus */ + if (m_Categories.size() == 0) + { + pClient->cat_count = 0; + pClient->cats = NULL; + } + else + { + pClient->cat_count = (unsigned int)m_Categories.size(); + pClient->cats = new topmenu_player_category_t[pClient->cat_count]; + memset(pClient->cats, 0, sizeof(topmenu_player_category_t) * pClient->cat_count); + } + + /* Re-sort the root categories if needed */ + SortCategoriesIfNeeded(); + + /* Build the root menu */ + IBaseMenu *root_menu = menus->GetDefaultStyle()->CreateMenu(this, myself->GetIdentity()); + + /* Add the sorted items */ + for (size_t i = 0; i < m_SortedCats.size(); i++) + { + if (m_Categories[m_SortedCats[i]]->obj_list.size() == 0) + { + continue; + } + root_menu->AppendItem(m_Categories[m_SortedCats[i]]->obj->name, ItemDrawInfo("")); + } + + /* Now we need to handle un-sorted items. This is slightly trickier, as we need to + * pre-render each category name, and cache those names. Phew! + */ + if (m_UnsortedCats.size()) + { + obj_by_name_t *item_list = new obj_by_name_t[m_UnsortedCats.size()]; + for (size_t i = 0; i < m_UnsortedCats.size(); i++) + { + obj_by_name_t *temp_obj = &item_list[i]; + topmenu_object_t *obj = m_Categories[m_UnsortedCats[i]]->obj; + obj->callbacks->OnTopMenuDisplayOption(this, + client, + obj->object_id, + temp_obj->name, + sizeof(temp_obj->name)); + temp_obj->obj_index = m_UnsortedCats[i]; + } + + /* Sort our temp list */ + qsort(item_list, m_UnsortedCats.size(), sizeof(obj_by_name_t), _SortObjectNamesDescending); + + /* Add the new sorted categories */ + for (size_t i = 0; i < m_UnsortedCats.size(); i++) + { + if (m_Categories[item_list[i].obj_index]->obj_list.size() == 0) + { + continue; + } + root_menu->AppendItem(m_Categories[item_list[i].obj_index]->obj->name, ItemDrawInfo("")); + } + + delete [] item_list; + } + + /* Set the menu's title */ + char renderbuf[128]; + m_pTitle->OnTopMenuDisplayTitle(this, client, 0, renderbuf, sizeof(renderbuf)); + root_menu->SetDefaultTitle(renderbuf); + + /* The client is now fully updated */ + pClient->root = root_menu; + pClient->user_id = pPlayer->GetUserId(); + pClient->menu_serial = m_SerialNo; + pClient->last_position = 0; + pClient->last_category = 0; + pClient->last_root_pos = 0; +} + +void TopMenu::UpdateClientCategory(int client, unsigned int category) +{ + /* Update the client's root menu just in case it needs it. This + * will validate that we have both a valid client and a valid + * category structure for that client. + */ + UpdateClientRoot(client); + + /* Now it's guaranteed that our category tables will be usable */ + topmenu_player_t *pClient = &m_clients[client]; + topmenu_category_t *cat = m_Categories[category]; + topmenu_player_category_t *player_cat = &(pClient->cats[category]); + + /* Does the category actually need updating? */ + if (player_cat->serial == cat->serial) + { + return; + } + + /* Destroy any existing menu */ + if (player_cat->menu) + { + player_cat->menu->Destroy(); + player_cat->menu = NULL; + } + + if (pClient->last_category == category) + { + pClient->last_position = 0; + } + + IBaseMenu *cat_menu = menus->GetDefaultStyle()->CreateMenu(this, myself->GetIdentity()); + + /* Categories get an "exit back" button */ + cat_menu->SetMenuOptionFlags(cat_menu->GetMenuOptionFlags() | MENUFLAG_BUTTON_EXITBACK); + + /* Re-sort the category if needed */ + SortCategoryIfNeeded(category); + + /* Build the menu with the sorted items first */ + for (size_t i = 0; i < cat->sorted.size(); i++) + { + cat_menu->AppendItem(cat->sorted[i]->name, ItemDrawInfo("")); + } + + /* Now handle unsorted items */ + if (cat->unsorted.size()) + { + /* Build a list of the item names */ + obj_by_name_t *item_list = new obj_by_name_t[cat->unsorted.size()]; + for (size_t i = 0; i < cat->unsorted.size(); i++) + { + obj_by_name_t *item = &item_list[i]; + topmenu_object_t *obj = cat->unsorted[i]; + obj->callbacks->OnTopMenuDisplayOption(this, + client, + obj->object_id, + item->name, + sizeof(item->name)); + item->obj_index = (unsigned int)i; + } + + /* Sort the names */ + qsort(item_list, cat->unsorted.size(), sizeof(obj_by_name_t), _SortObjectNamesDescending); + + /* Add to the menu */ + for (size_t i = 0; i < cat->unsorted.size(); i++) + { + cat_menu->AppendItem(cat->unsorted[item_list[i].obj_index]->name, ItemDrawInfo("")); + } + + delete [] item_list; + } + + /* Set the menu's title */ + char renderbuf[128]; + cat->obj->callbacks->OnTopMenuDisplayTitle(this, + client, + cat->obj->object_id, + renderbuf, + sizeof(renderbuf)); + cat_menu->SetDefaultTitle(renderbuf); + + /* We're done! */ + player_cat->menu = cat_menu; + player_cat->serial = cat->serial; +} + +void TopMenu::SortCategoryIfNeeded(unsigned int category) +{ + topmenu_category_t *cat = m_Categories[category]; + if (!cat->reorder) + { + return; + } + + cat->sorted.clear(); + cat->unsorted.clear(); + + if (cat->obj_list.size() == 0) + { + cat->reorder = false; + return; + } + + CVector<unsigned int> to_sort; + for (size_t i = 0; i < cat->obj_list.size(); i++) + { + to_sort.push_back(i); + } + + /* Find a matching category in the configs */ + config_category_t *config_cat = NULL; + for (size_t i = 0; i < m_Config.cats.size(); i++) + { + if (strcmp(m_Config.strings.GetString(m_Config.cats[i]->name), cat->obj->name) == 0) + { + config_cat = m_Config.cats[i]; + break; + } + } + + /* If there is a matching category, build a pre-sorted item list */ + if (config_cat != NULL) + { + /* Find matching objects in this category */ + for (size_t i = 0; i < config_cat->commands.size(); i++) + { + const char *config_name = m_Config.strings.GetString(config_cat->commands[i]); + for (size_t j = 0; j < to_sort.size(); j++) + { + if (strcmp(config_name, cat->obj_list[to_sort[j]]->name) == 0) + { + /* Place in the final list, then remove from the temporary list */ + cat->sorted.push_back(cat->obj_list[to_sort[j]]); + to_sort.erase(to_sort.iterAt(j)); + break; + } + } + } + } + + /* Push any remaining items onto the unsorted list */ + for (size_t i = 0; i < to_sort.size(); i++) + { + cat->unsorted.push_back(cat->obj_list[to_sort[i]]); + } + + cat->reorder = false; +} + +void TopMenu::SortCategoriesIfNeeded() +{ + if (!m_bCatsNeedResort) + { + return; + } + + /* Clear sort results */ + m_SortedCats.clear(); + m_UnsortedCats.clear(); + + if (m_Categories.size() == 0) + { + m_bCatsNeedResort = false; + return; + } + + CVector<unsigned int> to_sort; + for (unsigned int i = 0; i < (unsigned int)m_Categories.size(); i++) + { + to_sort.push_back(i); + } + + /* If we have any predefined categories, add them in as they appear. */ + for (size_t i= 0; i < m_Config.cats.size(); i++) + { + /* Find this category and map it in if we can */ + for (size_t j = 0; j < to_sort.size(); j++) + { + if (strcmp(m_Config.strings.GetString(m_Config.cats[i]->name), + m_Categories[to_sort[j]]->obj->name) == 0) + { + /* Add to the real list and remove from the temporary */ + m_SortedCats.push_back(to_sort[j]); + to_sort.erase(to_sort.iterAt(j)); + break; + } + } + } + + /* Push any remaining items onto the unsorted list */ + for (size_t i = 0; i < to_sort.size(); i++) + { + m_UnsortedCats.push_back(to_sort[i]); + } + + m_bCatsNeedResort = false; +} + +void TopMenu::CreatePlayers(int max_clients) +{ + m_max_clients = max_clients; + m_clients = (topmenu_player_t *)malloc(sizeof(topmenu_player_t) * (max_clients + 1)); + memset(m_clients, 0, sizeof(topmenu_player_t) * (max_clients + 1)); +} + +void TopMenu::TearDownClient(topmenu_player_t *player) +{ + if (player->cats != NULL) + { + for (unsigned int i = 0; i < player->cat_count; i++) + { + topmenu_player_category_t *player_cat = &(player->cats[i]); + if (player_cat->menu != NULL) + { + player_cat->menu->Destroy(); + } + } + delete [] player->cats; + } + + if (player->root != NULL) + { + player->root->Destroy(); + } + + memset(player, 0, sizeof(topmenu_player_t)); +} + +bool TopMenu::LoadConfiguration(const char *file, char *error, size_t maxlength) +{ + SMCError err; + SMCStates states; + + if ((err = textparsers->ParseFile_SMC(file, this, &states)) + != SMCError_Okay) + { + const char *err_string = textparsers->GetSMCErrorString(err); + if (!err_string) + { + err_string = "Unknown"; + } + + UTIL_Format(error, maxlength, "%s", err_string); + + return false; + } + + return true; +} + +bool TopMenu::OnIdentityRemoval(IdentityToken_t *owner) +{ + /* First sweep the categories owned by us */ + CVector<unsigned int> obj_list; + for (size_t i = 0; i < m_Categories.size(); i++) + { + if (m_Categories[i]->obj->owner == owner) + { + obj_list.push_back(m_Categories[i]->obj->object_id); + } + } + + for (size_t i = 0; i < obj_list.size(); i++) + { + RemoveFromMenu(obj_list[i]); + } + + /* Now we can look for actual items */ + for (size_t i = 0; i < m_Objects.size(); i++) + { + if (m_Objects[i]->is_free) + { + continue; + } + if (m_Objects[i]->owner == owner) + { + assert(m_Objects[i]->type != TopMenuObject_Category); + RemoveFromMenu(m_Objects[i]->object_id); + } + } + + return true; +} + +#define PARSE_STATE_NONE 0 +#define PARSE_STATE_MAIN 1 +#define PARSE_STATE_CATEGORY 2 +unsigned int ignore_parse_level = 0; +unsigned int current_parse_state = 0; +config_category_t *cur_cat = NULL; + +void TopMenu::ReadSMC_ParseStart() +{ + current_parse_state = PARSE_STATE_NONE; + ignore_parse_level = 0; + cur_cat = NULL; + + /* Reset the old config */ + m_Config.strings.Reset(); + for (size_t i = 0; i < m_Config.cats.size(); i++) + { + delete m_Config.cats[i]; + } + m_Config.cats.clear(); +} + +SMCResult TopMenu::ReadSMC_NewSection(const SMCStates *states, const char *name) +{ + if (ignore_parse_level) + { + ignore_parse_level++; + } + else + { + if (current_parse_state == PARSE_STATE_NONE) + { + if (strcmp(name, "Menu") == 0) + { + current_parse_state = PARSE_STATE_MAIN; + } + else + { + ignore_parse_level = 1; + } + } + else if (current_parse_state == PARSE_STATE_MAIN) + { + cur_cat = new config_category_t; + cur_cat->name = m_Config.strings.AddString(name); + m_Config.cats.push_back(cur_cat); + current_parse_state = PARSE_STATE_CATEGORY; + } + else + { + ignore_parse_level = 1; + } + } + + return SMCResult_Continue; +} + +SMCResult TopMenu::ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) +{ + if (ignore_parse_level > 0 + || current_parse_state != PARSE_STATE_CATEGORY + || cur_cat == NULL) + { + return SMCResult_Continue; + } + + if (strcmp(key, "item") == 0) + { + cur_cat->commands.push_back(m_Config.strings.AddString(value)); + } + + return SMCResult_Continue; +} + +SMCResult TopMenu::ReadSMC_LeavingSection(const SMCStates *states) +{ + if (ignore_parse_level) + { + ignore_parse_level--; + } + else + { + if (current_parse_state == PARSE_STATE_CATEGORY) + { + cur_cat = NULL; + current_parse_state = PARSE_STATE_MAIN; + } + else if (current_parse_state == PARSE_STATE_MAIN) + { + current_parse_state = PARSE_STATE_NONE; + } + } + + return SMCResult_Continue; +} + +unsigned int TopMenu::FindCategory(const char *name) +{ + topmenu_object_t **p_obj = m_ObjLookup.retrieve(name); + if (!p_obj) + { + return 0; + } + + topmenu_object_t *obj = *p_obj; + if (obj->type != TopMenuObject_Category) + { + return 0; + } + + return obj->object_id; +} + +int _SortObjectNamesDescending(const void *ptr1, const void *ptr2) +{ + obj_by_name_t *obj1 = (obj_by_name_t *)ptr1; + obj_by_name_t *obj2 = (obj_by_name_t *)ptr2; + return strcmp(obj1->name, obj2->name); +} + +unsigned int strncopy(char *dest, const char *src, size_t count) +{ + if (!count) + { + return 0; + } + + char *start = dest; + while ((*src) && (--count)) + { + *dest++ = *src++; + } + *dest = '\0'; + + return (dest - start); +} + +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + size_t len = vsnprintf(buffer, maxlength, fmt, ap); + va_end(ap); + + if (len >= maxlength) + { + buffer[maxlength - 1] = '\0'; + return (maxlength - 1); + } + else + { + return len; + } +} diff --git a/extensions/topmenus/TopMenu.h b/extensions/topmenus/TopMenu.h index 1c80f25b..c4c0ec86 100644 --- a/extensions/topmenus/TopMenu.h +++ b/extensions/topmenus/TopMenu.h @@ -1,178 +1,179 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#ifndef _INCLUDE_SOURCEMOD_TOP_MENU_H_ -#define _INCLUDE_SOURCEMOD_TOP_MENU_H_ - -#include <sh_list.h> -#include <sh_vector.h> -#include <sm_trie_tpl.h> -#include <ITopMenus.h> -#include "smsdk_ext.h" -#include "sm_memtable.h" - -using namespace SourceHook; -using namespace SourceMod; - -struct config_category_t -{ - int name; - CVector<int> commands; -}; - -struct config_root_t -{ - config_root_t() : strings(1024) - { - } - BaseStringTable strings; - CVector<config_category_t *> cats; -}; - -struct topmenu_object_t -{ - char name[64]; /** Name */ - char cmdname[64]; /** Command name */ - FlagBits flags; /** Admin flags */ - ITopMenuObjectCallbacks *callbacks; /** Callbacks */ - IdentityToken_t *owner; /** Owner */ - unsigned int object_id; /** Object ID */ - topmenu_object_t *parent; /** Parent, if any */ - TopMenuObjectType type; /** Object Type */ - bool is_free; /** Free or not? */ - char info[255]; /** Info string */ -}; - -struct topmenu_category_t -{ - CVector<topmenu_object_t *> obj_list; /** Full object list */ - CVector<topmenu_object_t *> sorted; /** Sorted items */ - CVector<topmenu_object_t *> unsorted; /** Unsorted items */ - topmenu_object_t *obj; /** Bound object */ - unsigned int serial; /** Serial number */ - bool reorder; /** Whether ordering needs updating */ -}; - -struct topmenu_player_category_t -{ - IBaseMenu *menu; /** menu pointer */ - unsigned int serial; /** last known serial */ -}; - -struct topmenu_player_t -{ - int user_id; /** userid on server */ - unsigned int menu_serial; /** menu serial no */ - IBaseMenu *root; /** root menu display */ - topmenu_player_category_t *cats; /** category display */ - unsigned int cat_count; /** number of categories */ - unsigned int last_category; /** last category they selected */ - unsigned int last_position; /** last position in that category */ - unsigned int last_root_pos; /** last page in the root menu */ -}; - -class TopMenu : - public ITopMenu, - public IMenuHandler, - public ITextListener_SMC -{ - friend class TopMenuManager; -public: - TopMenu(ITopMenuObjectCallbacks *callbacks); - ~TopMenu(); -public: //ITopMenu - virtual unsigned int AddToMenu(const char *name, - TopMenuObjectType type, - ITopMenuObjectCallbacks *callbacks, - IdentityToken_t *owner, - const char *cmdname, - FlagBits flags, - unsigned int parent); - unsigned int AddToMenu2(const char *name, - TopMenuObjectType type, - ITopMenuObjectCallbacks *callbacks, - IdentityToken_t *owner, - const char *cmdname, - FlagBits flags, - unsigned int parent, - const char *info_string); - virtual void RemoveFromMenu(unsigned int object_id); - virtual bool DisplayMenu(int client, - unsigned int hold_time, - TopMenuPosition position); - virtual bool LoadConfiguration(const char *file, char *error, size_t maxlength); - virtual unsigned int FindCategory(const char *name); - const char *GetObjectInfoString(unsigned int object_id); -public: //IMenuHandler - virtual void OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page); - virtual void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style); - virtual unsigned int OnMenuDisplayItem(IBaseMenu *menu, - int client, - IMenuPanel *panel, - unsigned int item, - const ItemDrawInfo &dr); - virtual void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason); -public: //ITextListener_SMC - void ReadSMC_ParseStart(); - SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name); - SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value); - SMCResult ReadSMC_LeavingSection(const SMCStates *states); -private: - void SortCategoriesIfNeeded(); - void SortCategoryIfNeeded(unsigned int category); -private: - bool DisplayCategory(int client, unsigned int category, unsigned int hold_time, bool last_position); - void CreatePlayers(int max_clients); - void UpdateClientRoot(int client, IGamePlayer *pGamePlayer=NULL); - void UpdateClientCategory(int client, unsigned int category); - void TearDownClient(topmenu_player_t *player); -private: - void OnClientConnected(int client); - void OnClientDisconnected(int client); - void OnServerActivated(int max_clients); - bool OnIdentityRemoval(IdentityToken_t *owner); -private: - config_root_t m_Config; /* Configuration from file */ - topmenu_player_t *m_clients; /* Client array */ - CVector<unsigned int> m_SortedCats; /* Sorted categories */ - CVector<unsigned int> m_UnsortedCats; /* Un-sorted categories */ - CVector<topmenu_category_t *> m_Categories; /* Category array */ - CVector<topmenu_object_t *> m_Objects; /* Object array */ - KTrie<topmenu_object_t *> m_ObjLookup; /* Object lookup trie */ - unsigned int m_SerialNo; /* Serial number for updating */ - ITopMenuObjectCallbacks *m_pTitle; /* Title callbacks */ - int m_max_clients; /* Maximum number of clients */ - bool m_bCatsNeedResort; /* True if categories need a resort */ -}; - -unsigned int strncopy(char *dest, const char *src, size_t count); - -#endif //_INCLUDE_SOURCEMOD_TOP_MENU_H_ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_TOP_MENU_H_ +#define _INCLUDE_SOURCEMOD_TOP_MENU_H_ + +#include <sh_list.h> +#include <sh_vector.h> +#include <sm_trie_tpl.h> +#include <ITopMenus.h> +#include "smsdk_ext.h" +#include "sm_memtable.h" + +using namespace SourceHook; +using namespace SourceMod; + +struct config_category_t +{ + int name; + CVector<int> commands; +}; + +struct config_root_t +{ + config_root_t() : strings(1024) + { + } + BaseStringTable strings; + CVector<config_category_t *> cats; +}; + +struct topmenu_object_t +{ + char name[64]; /** Name */ + char cmdname[64]; /** Command name */ + FlagBits flags; /** Admin flags */ + ITopMenuObjectCallbacks *callbacks; /** Callbacks */ + IdentityToken_t *owner; /** Owner */ + unsigned int object_id; /** Object ID */ + topmenu_object_t *parent; /** Parent, if any */ + TopMenuObjectType type; /** Object Type */ + bool is_free; /** Free or not? */ + char info[255]; /** Info string */ +}; + +struct topmenu_category_t +{ + CVector<topmenu_object_t *> obj_list; /** Full object list */ + CVector<topmenu_object_t *> sorted; /** Sorted items */ + CVector<topmenu_object_t *> unsorted; /** Unsorted items */ + topmenu_object_t *obj; /** Bound object */ + unsigned int serial; /** Serial number */ + bool reorder; /** Whether ordering needs updating */ +}; + +struct topmenu_player_category_t +{ + IBaseMenu *menu; /** menu pointer */ + unsigned int serial; /** last known serial */ +}; + +struct topmenu_player_t +{ + int user_id; /** userid on server */ + unsigned int menu_serial; /** menu serial no */ + IBaseMenu *root; /** root menu display */ + topmenu_player_category_t *cats; /** category display */ + unsigned int cat_count; /** number of categories */ + unsigned int last_category; /** last category they selected */ + unsigned int last_position; /** last position in that category */ + unsigned int last_root_pos; /** last page in the root menu */ +}; + +class TopMenu : + public ITopMenu, + public IMenuHandler, + public ITextListener_SMC +{ + friend class TopMenuManager; +public: + TopMenu(ITopMenuObjectCallbacks *callbacks); + ~TopMenu(); +public: //ITopMenu + virtual unsigned int AddToMenu(const char *name, + TopMenuObjectType type, + ITopMenuObjectCallbacks *callbacks, + IdentityToken_t *owner, + const char *cmdname, + FlagBits flags, + unsigned int parent); + unsigned int AddToMenu2(const char *name, + TopMenuObjectType type, + ITopMenuObjectCallbacks *callbacks, + IdentityToken_t *owner, + const char *cmdname, + FlagBits flags, + unsigned int parent, + const char *info_string); + virtual void RemoveFromMenu(unsigned int object_id); + virtual bool DisplayMenu(int client, + unsigned int hold_time, + TopMenuPosition position); + virtual bool LoadConfiguration(const char *file, char *error, size_t maxlength); + virtual unsigned int FindCategory(const char *name); + const char *GetObjectInfoString(unsigned int object_id); + const char *GetObjectName(unsigned int object_id); +public: //IMenuHandler + virtual void OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page); + virtual void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style); + virtual unsigned int OnMenuDisplayItem(IBaseMenu *menu, + int client, + IMenuPanel *panel, + unsigned int item, + const ItemDrawInfo &dr); + virtual void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason); +public: //ITextListener_SMC + void ReadSMC_ParseStart(); + SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name); + SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value); + SMCResult ReadSMC_LeavingSection(const SMCStates *states); +private: + void SortCategoriesIfNeeded(); + void SortCategoryIfNeeded(unsigned int category); +private: + bool DisplayCategory(int client, unsigned int category, unsigned int hold_time, bool last_position); + void CreatePlayers(int max_clients); + void UpdateClientRoot(int client, IGamePlayer *pGamePlayer=NULL); + void UpdateClientCategory(int client, unsigned int category); + void TearDownClient(topmenu_player_t *player); +private: + void OnClientConnected(int client); + void OnClientDisconnected(int client); + void OnServerActivated(int max_clients); + bool OnIdentityRemoval(IdentityToken_t *owner); +private: + config_root_t m_Config; /* Configuration from file */ + topmenu_player_t *m_clients; /* Client array */ + CVector<unsigned int> m_SortedCats; /* Sorted categories */ + CVector<unsigned int> m_UnsortedCats; /* Un-sorted categories */ + CVector<topmenu_category_t *> m_Categories; /* Category array */ + CVector<topmenu_object_t *> m_Objects; /* Object array */ + KTrie<topmenu_object_t *> m_ObjLookup; /* Object lookup trie */ + unsigned int m_SerialNo; /* Serial number for updating */ + ITopMenuObjectCallbacks *m_pTitle; /* Title callbacks */ + int m_max_clients; /* Maximum number of clients */ + bool m_bCatsNeedResort; /* True if categories need a resort */ +}; + +unsigned int strncopy(char *dest, const char *src, size_t count); + +#endif //_INCLUDE_SOURCEMOD_TOP_MENU_H_ diff --git a/extensions/topmenus/smn_topmenus.cpp b/extensions/topmenus/smn_topmenus.cpp index 4799b9fd..42cc17fa 100644 --- a/extensions/topmenus/smn_topmenus.cpp +++ b/extensions/topmenus/smn_topmenus.cpp @@ -1,358 +1,383 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#include "extension.h" -#include "TopMenuManager.h" -#include "TopMenu.h" - -HandleType_t hTopMenuType; - -class TopMenuHandle : public IHandleTypeDispatch -{ -public: - void OnHandleDestroy(HandleType_t type, void *object) - { - ITopMenu *pTopMenu = (ITopMenu *)object; - g_TopMenus.DestroyTopMenu(pTopMenu); - } -} s_TopMenuHandle; - -void Initialize_Natives() -{ - hTopMenuType = handlesys->CreateType("ITopMenu", - &s_TopMenuHandle, - 0, - NULL, - NULL, - myself->GetIdentity(), - NULL); -} - -void Shutdown_Natives() -{ - handlesys->RemoveType(hTopMenuType, myself->GetIdentity()); -} - -enum TopMenuAction -{ - TopMenuAction_DisplayOption = 0, - TopMenuAction_DisplayTitle = 1, - TopMenuAction_SelectOption = 2, - TopMenuAction_DrawOption = 3, - TopMenuAction_RemoveObject = 4, -}; - -class TopMenuCallbacks : public ITopMenuObjectCallbacks -{ -public: - TopMenuCallbacks(IPluginFunction *pFunction) : m_pFunction(pFunction) - { - } - - unsigned int OnTopMenuDrawOption(ITopMenu *menu, - int client, - unsigned int object_id) - { - char buffer[2] = {ITEMDRAW_DEFAULT, 0x0}; - m_pFunction->PushCell(m_hMenuHandle); - m_pFunction->PushCell(TopMenuAction_DrawOption); - m_pFunction->PushCell(object_id); - m_pFunction->PushCell(client); - m_pFunction->PushStringEx(buffer, sizeof(buffer), SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); - m_pFunction->PushCell(sizeof(buffer)); - m_pFunction->Execute(NULL); - return (unsigned int)buffer[0]; - } - - void OnTopMenuDisplayOption(ITopMenu *menu, - int client, - unsigned int object_id, - char buffer[], - size_t maxlength) - { - m_pFunction->PushCell(m_hMenuHandle); - m_pFunction->PushCell(TopMenuAction_DisplayOption); - m_pFunction->PushCell(object_id); - m_pFunction->PushCell(client); - m_pFunction->PushStringEx(buffer, maxlength, 0, SM_PARAM_COPYBACK); - m_pFunction->PushCell(maxlength); - m_pFunction->Execute(NULL); - } - - void OnTopMenuDisplayTitle(ITopMenu *menu, - int client, - unsigned int object_id, - char buffer[], - size_t maxlength) - { - m_pFunction->PushCell(m_hMenuHandle); - m_pFunction->PushCell(TopMenuAction_DisplayTitle); - m_pFunction->PushCell(object_id); - m_pFunction->PushCell(client); - m_pFunction->PushStringEx(buffer, maxlength, 0, SM_PARAM_COPYBACK); - m_pFunction->PushCell(maxlength); - m_pFunction->Execute(NULL); - } - - void OnTopMenuSelectOption(ITopMenu *menu, - int client, - unsigned int object_id) - { - unsigned int old_reply = playerhelpers->SetReplyTo(SM_REPLY_CHAT); - m_pFunction->PushCell(m_hMenuHandle); - m_pFunction->PushCell(TopMenuAction_SelectOption); - m_pFunction->PushCell(object_id); - m_pFunction->PushCell(client); - m_pFunction->PushString(""); - m_pFunction->PushCell(0); - m_pFunction->Execute(NULL); - playerhelpers->SetReplyTo(old_reply); - } - - void OnTopMenuObjectRemoved(ITopMenu *menu, unsigned int object_id) - { - m_pFunction->PushCell(m_hMenuHandle); - m_pFunction->PushCell(TopMenuAction_RemoveObject); - m_pFunction->PushCell(object_id); - m_pFunction->PushCell(0); - m_pFunction->PushString(""); - m_pFunction->PushCell(0); - m_pFunction->Execute(NULL); - - delete this; - } - - Handle_t m_hMenuHandle; - IPluginFunction *m_pFunction; -}; - -static cell_t CreateTopMenu(IPluginContext *pContext, const cell_t *params) -{ - IPluginFunction *func = pContext->GetFunctionById(params[1]); - if (func == NULL) - { - return pContext ->ThrowNativeError("Invalid function specified"); - } - - TopMenuCallbacks *cb = new TopMenuCallbacks(func); - - ITopMenu *pMenu = g_TopMenus.CreateTopMenu(cb); - - if (!pMenu) - { - delete cb; - return BAD_HANDLE; - } - - Handle_t hndl = handlesys->CreateHandle(hTopMenuType, - pMenu, - pContext->GetIdentity(), - myself->GetIdentity(), - NULL); - if (hndl == 0) - { - g_TopMenus.DestroyTopMenu(pMenu); - return BAD_HANDLE; - } - - cb->m_hMenuHandle = hndl; - - return hndl; -} - -static cell_t LoadTopMenuConfig(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - char *file, *err_buf; - pContext->LocalToString(params[2], &file); - pContext->LocalToString(params[3], &err_buf); - - char path[PLATFORM_MAX_PATH]; - g_pSM->BuildPath(Path_Game, path, sizeof(path), "%s", file); - - return pMenu->LoadConfiguration(path, err_buf, params[4]) ? 1 : 0; -} - -static cell_t AddToTopMenu(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - IPluginFunction *func = pContext->GetFunctionById(params[4]); - if (func == NULL) - { - return pContext ->ThrowNativeError("Invalid function specified"); - } - - TopMenuCallbacks *cb = new TopMenuCallbacks(func); - - char *name, *cmdname, *info_string = NULL; - pContext->LocalToString(params[2], &name); - pContext->LocalToString(params[6], &cmdname); - - if (params[0] >= 8) - { - pContext->LocalToString(params[8], &info_string); - } - - TopMenuObjectType obj_type = (TopMenuObjectType)params[3]; - - unsigned int object_id; - if ((object_id = pMenu->AddToMenu2(name, - obj_type, - cb, - pContext->GetIdentity(), - cmdname, - params[7], - params[5], - info_string)) == 0) - { - delete cb; - return 0; - } - - cb->m_hMenuHandle = params[1]; - - return object_id; -} - -static cell_t RemoveFromTopMenu(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - pMenu->RemoveFromMenu(params[2]); - - return 1; -} - -static cell_t FindTopMenuCategory(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - char *name; - pContext->LocalToString(params[2], &name); - - return pMenu->FindCategory(name); -} - -static cell_t DisplayTopMenu(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - int client = params[2]; - IGamePlayer *player = playerhelpers->GetGamePlayer(client); - if (!player) - { - return pContext->ThrowNativeError("Invalid client index %d", client); - } - else if (!player->IsInGame()) - { - return pContext->ThrowNativeError("Client %d is not in game", client); - } - - return pMenu->DisplayMenu(client, 0, (TopMenuPosition)params[3]); -} - -static cell_t GetTopMenuInfoString(IPluginContext *pContext, const cell_t *params) -{ - HandleError err; - ITopMenu *pMenu; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) - != HandleError_None) - { - return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); - } - - const char *str; - if ((str = pMenu->GetObjectInfoString(params[2])) == NULL) - { - return pContext->ThrowNativeError("Invalid menu object %d", params[2]); - } - - char *buffer; - pContext->LocalToString(params[3], &buffer); - - return strncopy(buffer, str, params[4]); -} - -sp_nativeinfo_t g_TopMenuNatives[] = -{ - {"AddToTopMenu", AddToTopMenu}, - {"CreateTopMenu", CreateTopMenu}, - {"DisplayTopMenu", DisplayTopMenu}, - {"LoadTopMenuConfig", LoadTopMenuConfig}, - {"RemoveFromTopMenu", RemoveFromTopMenu}, - {"FindTopMenuCategory", FindTopMenuCategory}, - {"GetTopMenuInfoString", GetTopMenuInfoString}, - {NULL, NULL}, -}; +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" +#include "TopMenuManager.h" +#include "TopMenu.h" + +HandleType_t hTopMenuType; + +class TopMenuHandle : public IHandleTypeDispatch +{ +public: + void OnHandleDestroy(HandleType_t type, void *object) + { + ITopMenu *pTopMenu = (ITopMenu *)object; + g_TopMenus.DestroyTopMenu(pTopMenu); + } +} s_TopMenuHandle; + +void Initialize_Natives() +{ + hTopMenuType = handlesys->CreateType("ITopMenu", + &s_TopMenuHandle, + 0, + NULL, + NULL, + myself->GetIdentity(), + NULL); +} + +void Shutdown_Natives() +{ + handlesys->RemoveType(hTopMenuType, myself->GetIdentity()); +} + +enum TopMenuAction +{ + TopMenuAction_DisplayOption = 0, + TopMenuAction_DisplayTitle = 1, + TopMenuAction_SelectOption = 2, + TopMenuAction_DrawOption = 3, + TopMenuAction_RemoveObject = 4, +}; + +class TopMenuCallbacks : public ITopMenuObjectCallbacks +{ +public: + TopMenuCallbacks(IPluginFunction *pFunction) : m_pFunction(pFunction) + { + } + + unsigned int OnTopMenuDrawOption(ITopMenu *menu, + int client, + unsigned int object_id) + { + char buffer[2] = {ITEMDRAW_DEFAULT, 0x0}; + m_pFunction->PushCell(m_hMenuHandle); + m_pFunction->PushCell(TopMenuAction_DrawOption); + m_pFunction->PushCell(object_id); + m_pFunction->PushCell(client); + m_pFunction->PushStringEx(buffer, sizeof(buffer), SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); + m_pFunction->PushCell(sizeof(buffer)); + m_pFunction->Execute(NULL); + return (unsigned int)buffer[0]; + } + + void OnTopMenuDisplayOption(ITopMenu *menu, + int client, + unsigned int object_id, + char buffer[], + size_t maxlength) + { + m_pFunction->PushCell(m_hMenuHandle); + m_pFunction->PushCell(TopMenuAction_DisplayOption); + m_pFunction->PushCell(object_id); + m_pFunction->PushCell(client); + m_pFunction->PushStringEx(buffer, maxlength, 0, SM_PARAM_COPYBACK); + m_pFunction->PushCell(maxlength); + m_pFunction->Execute(NULL); + } + + void OnTopMenuDisplayTitle(ITopMenu *menu, + int client, + unsigned int object_id, + char buffer[], + size_t maxlength) + { + m_pFunction->PushCell(m_hMenuHandle); + m_pFunction->PushCell(TopMenuAction_DisplayTitle); + m_pFunction->PushCell(object_id); + m_pFunction->PushCell(client); + m_pFunction->PushStringEx(buffer, maxlength, 0, SM_PARAM_COPYBACK); + m_pFunction->PushCell(maxlength); + m_pFunction->Execute(NULL); + } + + void OnTopMenuSelectOption(ITopMenu *menu, + int client, + unsigned int object_id) + { + unsigned int old_reply = playerhelpers->SetReplyTo(SM_REPLY_CHAT); + m_pFunction->PushCell(m_hMenuHandle); + m_pFunction->PushCell(TopMenuAction_SelectOption); + m_pFunction->PushCell(object_id); + m_pFunction->PushCell(client); + m_pFunction->PushString(""); + m_pFunction->PushCell(0); + m_pFunction->Execute(NULL); + playerhelpers->SetReplyTo(old_reply); + } + + void OnTopMenuObjectRemoved(ITopMenu *menu, unsigned int object_id) + { + m_pFunction->PushCell(m_hMenuHandle); + m_pFunction->PushCell(TopMenuAction_RemoveObject); + m_pFunction->PushCell(object_id); + m_pFunction->PushCell(0); + m_pFunction->PushString(""); + m_pFunction->PushCell(0); + m_pFunction->Execute(NULL); + + delete this; + } + + Handle_t m_hMenuHandle; + IPluginFunction *m_pFunction; +}; + +static cell_t CreateTopMenu(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *func = pContext->GetFunctionById(params[1]); + if (func == NULL) + { + return pContext ->ThrowNativeError("Invalid function specified"); + } + + TopMenuCallbacks *cb = new TopMenuCallbacks(func); + + ITopMenu *pMenu = g_TopMenus.CreateTopMenu(cb); + + if (!pMenu) + { + delete cb; + return BAD_HANDLE; + } + + Handle_t hndl = handlesys->CreateHandle(hTopMenuType, + pMenu, + pContext->GetIdentity(), + myself->GetIdentity(), + NULL); + if (hndl == 0) + { + g_TopMenus.DestroyTopMenu(pMenu); + return BAD_HANDLE; + } + + cb->m_hMenuHandle = hndl; + + return hndl; +} + +static cell_t LoadTopMenuConfig(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + char *file, *err_buf; + pContext->LocalToString(params[2], &file); + pContext->LocalToString(params[3], &err_buf); + + char path[PLATFORM_MAX_PATH]; + g_pSM->BuildPath(Path_Game, path, sizeof(path), "%s", file); + + return pMenu->LoadConfiguration(path, err_buf, params[4]) ? 1 : 0; +} + +static cell_t AddToTopMenu(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + IPluginFunction *func = pContext->GetFunctionById(params[4]); + if (func == NULL) + { + return pContext ->ThrowNativeError("Invalid function specified"); + } + + TopMenuCallbacks *cb = new TopMenuCallbacks(func); + + char *name, *cmdname, *info_string = NULL; + pContext->LocalToString(params[2], &name); + pContext->LocalToString(params[6], &cmdname); + + if (params[0] >= 8) + { + pContext->LocalToString(params[8], &info_string); + } + + TopMenuObjectType obj_type = (TopMenuObjectType)params[3]; + + unsigned int object_id; + if ((object_id = pMenu->AddToMenu2(name, + obj_type, + cb, + pContext->GetIdentity(), + cmdname, + params[7], + params[5], + info_string)) == 0) + { + delete cb; + return 0; + } + + cb->m_hMenuHandle = params[1]; + + return object_id; +} + +static cell_t RemoveFromTopMenu(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + pMenu->RemoveFromMenu(params[2]); + + return 1; +} + +static cell_t FindTopMenuCategory(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + char *name; + pContext->LocalToString(params[2], &name); + + return pMenu->FindCategory(name); +} + +static cell_t DisplayTopMenu(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + int client = params[2]; + IGamePlayer *player = playerhelpers->GetGamePlayer(client); + if (!player) + { + return pContext->ThrowNativeError("Invalid client index %d", client); + } + else if (!player->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in game", client); + } + + return pMenu->DisplayMenu(client, 0, (TopMenuPosition)params[3]); +} + +static cell_t GetTopMenuInfoString(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + const char *str; + if ((str = pMenu->GetObjectInfoString(params[2])) == NULL) + { + return pContext->ThrowNativeError("Invalid menu object %d", params[2]); + } + + char *buffer; + pContext->LocalToString(params[3], &buffer); + + return strncopy(buffer, str, params[4]); +} + +static cell_t GetTopMenuName(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ITopMenu *pMenu; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if ((err = handlesys->ReadHandle(params[1], hTopMenuType, &sec, (void **)&pMenu)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + const char *str; + if ((str = pMenu->GetObjectName(params[2])) == NULL) + { + return pContext->ThrowNativeError("Invalid menu object %d", params[2]); + } + + char *buffer; + pContext->LocalToString(params[3], &buffer); + + return strncopy(buffer, str, params[4]); +} + +sp_nativeinfo_t g_TopMenuNatives[] = +{ + {"AddToTopMenu", AddToTopMenu}, + {"CreateTopMenu", CreateTopMenu}, + {"DisplayTopMenu", DisplayTopMenu}, + {"LoadTopMenuConfig", LoadTopMenuConfig}, + {"RemoveFromTopMenu", RemoveFromTopMenu}, + {"FindTopMenuCategory", FindTopMenuCategory}, + {"GetTopMenuInfoString", GetTopMenuInfoString}, + {"GetTopMenuName", GetTopMenuName}, + {NULL, NULL}, +}; diff --git a/plugins/include/topmenus.inc b/plugins/include/topmenus.inc index e3dc823f..049b8b62 100644 --- a/plugins/include/topmenus.inc +++ b/plugins/include/topmenus.inc @@ -1,277 +1,290 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This file is part of the SourceMod/SourcePawn SDK. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#if defined _topmenus_included - #endinput -#endif -#define _topmenus_included - -#include <menus> - -/** - * Actions a top menu will take on an object. - */ -enum TopMenuAction -{ - /** - * An option is being drawn for a menu (or for sorting purposes). - * - * INPUT : TopMenu Handle, object ID, client index. - * OUTPUT: Buffer for rendering, maxlength of buffer. - */ - TopMenuAction_DisplayOption = 0, - - /** - * The title of a menu is being drawn for a given object. - * - * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the - * root title. Otherwise, the Object ID is a category. - * - * INPUT : TopMenu Handle, object ID, client index. - * OUTPUT: Buffer for rendering, maxlength of buffer. - */ - TopMenuAction_DisplayTitle = 1, - - /** - * A menu option has been selected. - * - * The Object ID will always be an item (not a category). - * - * INPUT : TopMenu Handle, object ID, client index. - */ - TopMenuAction_SelectOption = 2, - - /** - * A menu option is being drawn and its flags can be overridden. - * - * INPUT : TopMenu Handle, object ID, client index. - * OUTPUT: The first byte of the 'buffer' string should be set - * to the desired flags. By default, it will contain - * ITEMDRAW_DEFAULT. - */ - TopMenuAction_DrawOption = 3, - - /** - * Called when an object is being removed from the menu. - * This can be used to clean up data stored in the info string. - * - * INPUT : TopMenu Handle, object ID. - */ - TopMenuAction_RemoveObject = 4, -}; - -/** - * Top menu object types. - */ -enum TopMenuObjectType -{ - TopMenuObject_Category = 0, /**< Category (sub-menu branching from root) */ - TopMenuObject_Item = 1 /**< Item on a sub-menu */ -}; - -/** - * Top menu starting positions for display. - */ -enum TopMenuPosition -{ - TopMenuPosition_Start = 0, /**< Start/root of the menu */ - TopMenuPosition_LastRoot = 1, /**< Last position in the root menu */ - TopMenuPosition_LastCategory = 3, /**< Last position in their last category */ -}; - -/** - * Top menu object tag for type checking. - */ -enum TopMenuObject -{ - INVALID_TOPMENUOBJECT = 0, -} - -/** - * TopMenu callback prototype. - * - * @param topmenu Handle to the TopMenu. - * @param action TopMenuAction being performed. - * @param object_id The object ID (if used). - * @param param Extra parameter (if used). - * @param buffer Output buffer (if used). - * @param maxlength Output buffer (if used). - * @noreturn - */ -functag TopMenuHandler public(Handle:topmenu, - TopMenuAction:action, - TopMenuObject:object_id, - param, - String:buffer[], - maxlength); - -/** - * Creates a TopMenu. - * - * @param handler Handler to use for drawing the root title. - * @return A new TopMenu Handle, or INVALID_HANDLE on failure. - */ -native Handle:CreateTopMenu(TopMenuHandler:handler); - -/** - * Re-sorts the items in a TopMenu via a configuration file. - * - * The format of the configuration file should be a Valve Key-Values - * formatted file that SourceMod can parse. There should be one root - * section, and one sub-section for each category. Each sub-section's - * name should match the category name. - * - * Each sub-section may only contain key/value pairs in the form of: - * key: "item" - * value: Name of the item as passed to AddToTopMenu(). - * - * The TopMenu will draw items in the order declared in the configuration - * file. If items do not appear in the configuration file, they are sorted - * per-player based on how the handler function renders for that player. - * These items appear after the configuration sorted items. - * - * @param topmenu TopMenu Handle. - * @param file File path. - * @param error Error buffer. - * @param maxlength Maximum size of the error buffer. - * Error buffer will be filled with a - * zero-terminated string if false is - * returned. - * @return True on success, false on failure. - * @error Invalid TopMenu Handle. - */ -native bool:LoadTopMenuConfig(Handle:topmenu, const String:file[], String:error[], maxlength); - -/** - * Adds an object to a TopMenu. - * - * @param topmenu TopMenu Handle. - * @param name Object name (MUST be unique). - * @param type Object type. - * @param handler Handler for object. - * @param cmdname Command name (for access overrides). - * @param flags Default access flags. - * @param parent Parent object ID, or INVALID_TOPMENUOBJECT for none. - * Items must have a category parent. - * Categories must not have a parent. - * @param info_string Arbitrary storage (max 255 bytes). - * @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on - * failure. - * @error Invalid TopMenu Handle. - */ -native TopMenuObject:AddToTopMenu(Handle:topmenu, - const String:name[], - TopMenuObjectType:type, - TopMenuHandler:handler, - TopMenuObject:parent, - const String:cmdname[]="", - flags=0, - const String:info_string[]=""); - -/** - * Retrieves the info string of a top menu item. - * - * @param topmenu TopMenu Handle. - * @param object TopMenuObject ID. - * @param buffer Buffer to store info string. - * @param maxlength Maximum size of info string. - * @return Number of bytes written, not including the - * null terminator. - * @error Invalid TopMenu Handle or TopMenuObject ID. - */ -native GetTopMenuInfoString(Handle:topmenu, TopMenuObject:parent, String:buffer[], maxlength); - -/** - * Removes an object from a TopMenu. - * - * Plugins' objects are automatically removed all TopMenus when the given - * plugin unloads or pauses. In the case of unpausing, all items are restored. - * - * @param topmenu TopMenu Handle. - * @param object TopMenuObject ID. - * @noreturn - * @error Invalid TopMenu Handle. - */ -native RemoveFromTopMenu(Handle:topmenu, TopMenuObject:object); - -/** - * Displays a TopMenu to a client. - * - * @param topmenu TopMenu Handle. - * @param client Client index. - * @param position Position to display from. - * @return True on success, false on failure. - * @error Invalid TopMenu Handle or client not in game. - */ -native bool:DisplayTopMenu(Handle:topmenu, client, TopMenuPosition:position); - -/** - * Finds a category's object ID in a TopMenu. - * - * @param topmenu TopMenu Handle. - * @param name Object's unique name. - * @return TopMenuObject ID on success, or - * INVALID_TOPMENUOBJECT on failure. - * @error Invalid TopMenu Handle. - */ -native TopMenuObject:FindTopMenuCategory(Handle:topmenu, const String:name[]); - -/** - * Do not edit below this line! - */ -public Extension:__ext_topmenus = -{ - name = "TopMenus", - file = "topmenus.ext", -#if defined AUTOLOAD_EXTENSIONS - autoload = 1, -#else - autoload = 0, -#endif -#if defined REQUIRE_EXTENSIONS - required = 1, -#else - required = 0, -#endif -}; - -#if !defined REQUIRE_EXTENSIONS -public __ext_topmenus_SetNTVOptional() -{ - MarkNativeAsOptional("CreateTopMenu"); - MarkNativeAsOptional("LoadTopMenuConfig"); - MarkNativeAsOptional("AddToTopMenu"); - MarkNativeAsOptional("RemoveFromTopMenu"); - MarkNativeAsOptional("DisplayTopMenu"); - MarkNativeAsOptional("FindTopMenuCategory"); -} -#endif +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _topmenus_included + #endinput +#endif +#define _topmenus_included + +#include <menus> + +/** + * Actions a top menu will take on an object. + */ +enum TopMenuAction +{ + /** + * An option is being drawn for a menu (or for sorting purposes). + * + * INPUT : TopMenu Handle, object ID, client index. + * OUTPUT: Buffer for rendering, maxlength of buffer. + */ + TopMenuAction_DisplayOption = 0, + + /** + * The title of a menu is being drawn for a given object. + * + * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the + * root title. Otherwise, the Object ID is a category. + * + * INPUT : TopMenu Handle, object ID, client index. + * OUTPUT: Buffer for rendering, maxlength of buffer. + */ + TopMenuAction_DisplayTitle = 1, + + /** + * A menu option has been selected. + * + * The Object ID will always be an item (not a category). + * + * INPUT : TopMenu Handle, object ID, client index. + */ + TopMenuAction_SelectOption = 2, + + /** + * A menu option is being drawn and its flags can be overridden. + * + * INPUT : TopMenu Handle, object ID, client index. + * OUTPUT: The first byte of the 'buffer' string should be set + * to the desired flags. By default, it will contain + * ITEMDRAW_DEFAULT. + */ + TopMenuAction_DrawOption = 3, + + /** + * Called when an object is being removed from the menu. + * This can be used to clean up data stored in the info string. + * + * INPUT : TopMenu Handle, object ID. + */ + TopMenuAction_RemoveObject = 4, +}; + +/** + * Top menu object types. + */ +enum TopMenuObjectType +{ + TopMenuObject_Category = 0, /**< Category (sub-menu branching from root) */ + TopMenuObject_Item = 1 /**< Item on a sub-menu */ +}; + +/** + * Top menu starting positions for display. + */ +enum TopMenuPosition +{ + TopMenuPosition_Start = 0, /**< Start/root of the menu */ + TopMenuPosition_LastRoot = 1, /**< Last position in the root menu */ + TopMenuPosition_LastCategory = 3, /**< Last position in their last category */ +}; + +/** + * Top menu object tag for type checking. + */ +enum TopMenuObject +{ + INVALID_TOPMENUOBJECT = 0, +} + +/** + * TopMenu callback prototype. + * + * @param topmenu Handle to the TopMenu. + * @param action TopMenuAction being performed. + * @param object_id The object ID (if used). + * @param param Extra parameter (if used). + * @param buffer Output buffer (if used). + * @param maxlength Output buffer (if used). + * @noreturn + */ +functag TopMenuHandler public(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength); + +/** + * Creates a TopMenu. + * + * @param handler Handler to use for drawing the root title. + * @return A new TopMenu Handle, or INVALID_HANDLE on failure. + */ +native Handle:CreateTopMenu(TopMenuHandler:handler); + +/** + * Re-sorts the items in a TopMenu via a configuration file. + * + * The format of the configuration file should be a Valve Key-Values + * formatted file that SourceMod can parse. There should be one root + * section, and one sub-section for each category. Each sub-section's + * name should match the category name. + * + * Each sub-section may only contain key/value pairs in the form of: + * key: "item" + * value: Name of the item as passed to AddToTopMenu(). + * + * The TopMenu will draw items in the order declared in the configuration + * file. If items do not appear in the configuration file, they are sorted + * per-player based on how the handler function renders for that player. + * These items appear after the configuration sorted items. + * + * @param topmenu TopMenu Handle. + * @param file File path. + * @param error Error buffer. + * @param maxlength Maximum size of the error buffer. + * Error buffer will be filled with a + * zero-terminated string if false is + * returned. + * @return True on success, false on failure. + * @error Invalid TopMenu Handle. + */ +native bool:LoadTopMenuConfig(Handle:topmenu, const String:file[], String:error[], maxlength); + +/** + * Adds an object to a TopMenu. + * + * @param topmenu TopMenu Handle. + * @param name Object name (MUST be unique). + * @param type Object type. + * @param handler Handler for object. + * @param cmdname Command name (for access overrides). + * @param flags Default access flags. + * @param parent Parent object ID, or INVALID_TOPMENUOBJECT for none. + * Items must have a category parent. + * Categories must not have a parent. + * @param info_string Arbitrary storage (max 255 bytes). + * @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on + * failure. + * @error Invalid TopMenu Handle. + */ +native TopMenuObject:AddToTopMenu(Handle:topmenu, + const String:name[], + TopMenuObjectType:type, + TopMenuHandler:handler, + TopMenuObject:parent, + const String:cmdname[]="", + flags=0, + const String:info_string[]=""); + +/** + * Retrieves the info string of a top menu item. + * + * @param topmenu TopMenu Handle. + * @param object TopMenuObject ID. + * @param buffer Buffer to store info string. + * @param maxlength Maximum size of info string. + * @return Number of bytes written, not including the + * null terminator. + * @error Invalid TopMenu Handle or TopMenuObject ID. + */ +native GetTopMenuInfoString(Handle:topmenu, TopMenuObject:parent, String:buffer[], maxlength); + +/** + * Retrieves the name string of a top menu item. + * + * @param topmenu TopMenu Handle. + * @param object TopMenuObject ID. + * @param buffer Buffer to store info string. + * @param maxlength Maximum size of info string. + * @return Number of bytes written, not including the + * null terminator. + * @error Invalid TopMenu Handle or TopMenuObject ID. + */ +native GetTopMenuName(Handle:topmenu, TopMenuObject:parent, String:buffer[], maxlength); + +/** + * Removes an object from a TopMenu. + * + * Plugins' objects are automatically removed all TopMenus when the given + * plugin unloads or pauses. In the case of unpausing, all items are restored. + * + * @param topmenu TopMenu Handle. + * @param object TopMenuObject ID. + * @noreturn + * @error Invalid TopMenu Handle. + */ +native RemoveFromTopMenu(Handle:topmenu, TopMenuObject:object); + +/** + * Displays a TopMenu to a client. + * + * @param topmenu TopMenu Handle. + * @param client Client index. + * @param position Position to display from. + * @return True on success, false on failure. + * @error Invalid TopMenu Handle or client not in game. + */ +native bool:DisplayTopMenu(Handle:topmenu, client, TopMenuPosition:position); + +/** + * Finds a category's object ID in a TopMenu. + * + * @param topmenu TopMenu Handle. + * @param name Object's unique name. + * @return TopMenuObject ID on success, or + * INVALID_TOPMENUOBJECT on failure. + * @error Invalid TopMenu Handle. + */ +native TopMenuObject:FindTopMenuCategory(Handle:topmenu, const String:name[]); + +/** + * Do not edit below this line! + */ +public Extension:__ext_topmenus = +{ + name = "TopMenus", + file = "topmenus.ext", +#if defined AUTOLOAD_EXTENSIONS + autoload = 1, +#else + autoload = 0, +#endif +#if defined REQUIRE_EXTENSIONS + required = 1, +#else + required = 0, +#endif +}; + +#if !defined REQUIRE_EXTENSIONS +public __ext_topmenus_SetNTVOptional() +{ + MarkNativeAsOptional("CreateTopMenu"); + MarkNativeAsOptional("LoadTopMenuConfig"); + MarkNativeAsOptional("AddToTopMenu"); + MarkNativeAsOptional("RemoveFromTopMenu"); + MarkNativeAsOptional("DisplayTopMenu"); + MarkNativeAsOptional("FindTopMenuCategory"); +} +#endif From 4aa9ae379fcb7d108dfc452f700a05a23d255545 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 20 Nov 2007 02:24:10 +0000 Subject: [PATCH 025/263] renamed the new native --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401706 --- extensions/topmenus/smn_topmenus.cpp | 2 +- plugins/include/topmenus.inc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/topmenus/smn_topmenus.cpp b/extensions/topmenus/smn_topmenus.cpp index 42cc17fa..98575ec7 100644 --- a/extensions/topmenus/smn_topmenus.cpp +++ b/extensions/topmenus/smn_topmenus.cpp @@ -378,6 +378,6 @@ sp_nativeinfo_t g_TopMenuNatives[] = {"RemoveFromTopMenu", RemoveFromTopMenu}, {"FindTopMenuCategory", FindTopMenuCategory}, {"GetTopMenuInfoString", GetTopMenuInfoString}, - {"GetTopMenuName", GetTopMenuName}, + {"GetTopMenuObjName", GetTopMenuName}, {NULL, NULL}, }; diff --git a/plugins/include/topmenus.inc b/plugins/include/topmenus.inc index 049b8b62..a59f2fa0 100644 --- a/plugins/include/topmenus.inc +++ b/plugins/include/topmenus.inc @@ -221,7 +221,7 @@ native GetTopMenuInfoString(Handle:topmenu, TopMenuObject:parent, String:buffer[ * null terminator. * @error Invalid TopMenu Handle or TopMenuObject ID. */ -native GetTopMenuName(Handle:topmenu, TopMenuObject:parent, String:buffer[], maxlength); +native GetTopMenuObjName(Handle:topmenu, TopMenuObject:object, String:buffer[], maxlength); /** * Removes an object from a TopMenu. From fa3f1991ff93f2de1eaa768bcfc4412f75a85aa9 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Tue, 20 Nov 2007 03:02:11 +0000 Subject: [PATCH 026/263] Added sort functions for ADT Arrays, see sorting.inc --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401707 --- core/CellArray.h | 7 ++ core/smn_sorting.cpp | 137 +++++++++++++++++++++++++++++++ plugins/include/sorting.inc | 45 +++++++++++ plugins/testsuite/sorttest.sp | 147 +++++++++++++++++++++++++++++++++- 4 files changed, 334 insertions(+), 2 deletions(-) diff --git a/core/CellArray.h b/core/CellArray.h index 39e9197b..c9ee2831 100644 --- a/core/CellArray.h +++ b/core/CellArray.h @@ -32,6 +32,8 @@ #include <malloc.h> #include <string.h> +extern HandleType_t htCellArray; + class CellArray { public: @@ -149,6 +151,11 @@ public: return array; } + cell_t *base() + { + return m_Data; + } + private: bool GrowIfNeeded(size_t count) { diff --git a/core/smn_sorting.cpp b/core/smn_sorting.cpp index f78bff74..9bf9426d 100644 --- a/core/smn_sorting.cpp +++ b/core/smn_sorting.cpp @@ -33,6 +33,8 @@ #include <IHandleSys.h> #include <stdlib.h> #include <string.h> +#include "HandleSys.h" +#include "CellArray.h" /*********************************** * About the double array hack * @@ -373,6 +375,139 @@ static cell_t sm_SortCustom2D(IPluginContext *pContext, const cell_t *params) return 1; } +enum SortType +{ + Sort_Integer = 0, + Sort_Float, + Sort_String, +}; + +int sort_adtarray_strings_asc(const void *str1, const void *str2) +{ + return strcmp((char *) str1, (char *) str2); +} + +int sort_adtarray_strings_desc(const void *str1, const void *str2) +{ + return strcmp((char *) str2, (char *) str1); +} + +static cell_t sm_SortADTArray(IPluginContext *pContext, const cell_t *params) +{ + CellArray *cArray; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + + if ((err = g_HandleSys.ReadHandle(params[1], htCellArray, &sec, (void **)&cArray)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + cell_t order = params[2]; + cell_t type = params[3]; + size_t arraysize = cArray->size(); + size_t blocksize = cArray->blocksize(); + cell_t *array = cArray->base(); + + if (type == Sort_Integer) + { + if (order == Sort_Ascending) + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_ints_asc); + } + else + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_ints_desc); + } + } + else if (type == Sort_Float) + { + if (type == Sort_Ascending) + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_floats_asc); + } + else + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_floats_desc); + } + } + else if (type == Sort_String) + { + if (type == Sort_Ascending) + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_adtarray_strings_asc); + } + else + { + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_adtarray_strings_desc); + } + } + + return 1; +} + +struct sort_infoADT +{ + IPluginFunction *pFunc; + cell_t *array_base; + cell_t array_bsize; + Handle_t array_hndl; + Handle_t hndl; +}; + +sort_infoADT g_SortInfoADT; + +int sort_adtarray_custom(const void *elem1, const void *elem2) +{ + cell_t result = 0; + IPluginFunction *pf = g_SortInfoADT.pFunc; + pf->PushCell(((cell_t) ((cell_t *) elem1 - g_SortInfoADT.array_base)) / g_SortInfoADT.array_bsize); + pf->PushCell(((cell_t) ((cell_t *) elem2 - g_SortInfoADT.array_base)) / g_SortInfoADT.array_bsize); + pf->PushCell(g_SortInfoADT.array_hndl); + pf->PushCell(g_SortInfoADT.hndl); + pf->Execute(&result); + + return result; +} + +static cell_t sm_SortADTArrayCustom(IPluginContext *pContext, const cell_t *params) +{ + CellArray *cArray; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + + if ((err = g_HandleSys.ReadHandle(params[1], htCellArray, &sec, (void **)&cArray)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); + } + + IPluginFunction *pFunction = pContext->GetFunctionById(params[2]); + if (!pFunction) + { + return pContext->ThrowNativeError("Function %x is not a valid function", params[2]); + } + + size_t arraysize = cArray->size(); + size_t blocksize = cArray->blocksize(); + cell_t *array = cArray->base(); + + sort_infoADT oldinfo = g_SortInfoADT; + + g_SortInfoADT.pFunc = pFunction; + g_SortInfoADT.array_base = array; + g_SortInfoADT.array_bsize = (cell_t) blocksize; + g_SortInfoADT.array_hndl = params[1]; + g_SortInfoADT.hndl = params[3]; + + qsort(array, arraysize, blocksize * sizeof(cell_t), sort_adtarray_custom); + + g_SortInfoADT = oldinfo; + + return 1; +} + REGISTER_NATIVES(sortNatives) { {"SortIntegers", sm_SortIntegers}, @@ -380,5 +515,7 @@ REGISTER_NATIVES(sortNatives) {"SortStrings", sm_SortStrings}, {"SortCustom1D", sm_SortCustom1D}, {"SortCustom2D", sm_SortCustom2D}, + {"SortADTArray", sm_SortADTArray}, + {"SortADTArrayCustom", sm_SortADTArrayCustom}, {NULL, NULL}, }; diff --git a/plugins/include/sorting.inc b/plugins/include/sorting.inc index dfdcb53e..6d49a238 100644 --- a/plugins/include/sorting.inc +++ b/plugins/include/sorting.inc @@ -45,6 +45,16 @@ enum SortOrder Sort_Descending = 1, /**< Descending order */ }; +/** + * Data types for ADT Array Sorts + */ + enum SortType + { + Sort_Integer = 0, + Sort_Float, + Sort_String, +}; + /** * Sorts an array of integers. * @@ -128,3 +138,38 @@ funcenum SortFunc2D * @noreturn */ native SortCustom2D(array[][], array_size, SortFunc2D:sortfunc, Handle:hndl=INVALID_HANDLE); + +/** + * Sort an ADT Array. Specify the type as Integer, Float, or String. + * + * @param array Array Handle to sort + * @param order Sort order to use, same as other sorts. + * @param type Data type stored in the ADT Array + * @noreturn + */ +native SortADTArray(Handle:array, SortOrder:order = Sort_Ascending, SortType:type = Sort_Integer); + +/** + * Sort comparison function for ADT Array elements. Function provides you with + * indexes currently being sorted, use ADT Array functions to retrieve the + * index values and compare. + * + * @param index1 First index to compare. + * @param index2 Second index to compare. + * @param array Array that is being sorted (order is undefined). + * @param hndl Handle optionally passed in while sorting. + * @return -1 if first should go before second + * 0 if first is equal to second + * 1 if first should go after second + */ +functag SortFuncADTArray public(index1, index2, Handle:array, Handle:hndl); + +/** + * Custom sorts an ADT Array. You must pass in a comparison function. + * + * @param array Array Handle to sort + * @param sortfunc Sort comparision function to use + * @param hndl Optional Handle to pass through the comparison calls. + * @noreturn + */ +native SortADTArrayCustom(Handle:array, SortFuncADTArray:sortfunc, Handle:hndl=INVALID_HANDLE); \ No newline at end of file diff --git a/plugins/testsuite/sorttest.sp b/plugins/testsuite/sorttest.sp index 1398a7d5..bd9d4d87 100644 --- a/plugins/testsuite/sorttest.sp +++ b/plugins/testsuite/sorttest.sp @@ -9,13 +9,17 @@ public Plugin:myinfo = url = "http://www.sourcemod.net/" }; -public OnPluginStart(Handle:myself) +public OnPluginStart() { RegServerCmd("test_sort_ints", Command_TestSortInts) RegServerCmd("test_sort_floats", Command_TestSortFloats) RegServerCmd("test_sort_strings", Command_TestSortStrings) RegServerCmd("test_sort_1d", Command_TestSort1D) RegServerCmd("test_sort_2d", Command_TestSort2D) + RegServerCmd("test_adtsort_ints", Command_TestSortADTInts) + RegServerCmd("test_adtsort_floats", Command_TestSortADTFloats) + RegServerCmd("test_adtsort_strings", Command_TestSortADTStrings) + RegServerCmd("test_adtsort_custom", Command_TestSortADTCustom) } /***************** @@ -138,7 +142,7 @@ public Action:Command_TestSortStrings(args) public Custom2DSort(String:elem1[], String:elem2[], String:array[][], Handle:hndl) { - return StrCompare(elem1, elem2) + return strcmp(elem1, elem2) } public Action:Command_TestSort2D(args) @@ -162,3 +166,142 @@ public Action:Command_TestSort2D(args) return Plugin_Handled } + +/******************* + * ADT ARRAY TESTS * + *******************/ +// Int and floats work the same as normal comparisions. Strings are direct +// comparisions with no hacky memory stuff like Pawn arrays. + +PrintADTArrayIntegers(Handle:array) +{ + new size = GetArraySize(array); + for (new i=0; i<size;i++) + { + PrintToServer("array[%d] = %d", i, GetArrayCell(array, i)); + } +} + +public Action:Command_TestSortADTInts(args) +{ + new Handle:array = CreateArray(); + PushArrayCell(array, 6); + PushArrayCell(array, 7); + PushArrayCell(array, 3); + PushArrayCell(array, 2); + PushArrayCell(array, 8); + PushArrayCell(array, 5); + PushArrayCell(array, 0); + PushArrayCell(array, 1); + PushArrayCell(array, 4); + PushArrayCell(array, 9); + + PrintToServer("Testing ascending sort:") + SortADTArray(array, Sort_Ascending, Sort_Integer) + PrintADTArrayIntegers(array) + + PrintToServer("Testing descending sort:") + SortADTArray(array, Sort_Descending, Sort_Integer) + PrintADTArrayIntegers(array) + + return Plugin_Handled + +} + +PrintADTArrayFloats(Handle:array) +{ + new size = GetArraySize(array); + for (new i=0; i<size;i++) + { + PrintToServer("array[%d] = %f", i, float:GetArrayCell(array, i)); + } +} + +public Action:Command_TestSortADTFloats(args) +{ + new Handle:array = CreateArray(); + PushArrayCell(array, 6.0); + PushArrayCell(array, 7.0); + PushArrayCell(array, 3.0); + PushArrayCell(array, 2.0); + PushArrayCell(array, 8.0); + PushArrayCell(array, 5.0); + PushArrayCell(array, 0.0); + PushArrayCell(array, 1.0); + PushArrayCell(array, 4.0); + PushArrayCell(array, 9.0); + + PrintToServer("Testing ascending sort:") + SortADTArray(array, Sort_Ascending, Sort_Float) + PrintADTArrayFloats(array) + + PrintToServer("Testing descending sort:") + SortADTArray(array, Sort_Descending, Sort_Float) + PrintADTArrayFloats(array) + + return Plugin_Handled +} + +PrintADTArrayStrings(Handle:array) +{ + new size = GetArraySize(array); + decl String:buffer[64]; + for (new i=0; i<size;i++) + { + GetArrayString(array, i, buffer, sizeof(buffer)); + PrintToServer("array[%d] = %s", i, buffer); + } +} + +public Action:Command_TestSortADTStrings(args) +{ + new Handle:array = CreateArray(ByteCountToCells(64)); + PushArrayString(array, "faluco"); + PushArrayString(array, "bailopan"); + PushArrayString(array, "pm onoto"); + PushArrayString(array, "damaged soul"); + PushArrayString(array, "sniperbeamer"); + PushArrayString(array, "sidluke"); + PushArrayString(array, "johnny got his gun"); + PushArrayString(array, "gabe newell"); + PushArrayString(array, "hello"); + PushArrayString(array, "WHAT?!"); + + PrintToServer("Testing ascending sort:") + SortADTArray(array, Sort_Ascending, Sort_String) + PrintADTArrayStrings(array) + + PrintToServer("Testing descending sort:") + SortADTArray(array, Sort_Descending, Sort_String) + PrintADTArrayStrings(array) + + return Plugin_Handled +} + +public ArrayADTCustomCallback(index1, index2, Handle:array, Handle:hndl) +{ + decl String:buffer1[64], String:buffer2[64]; + GetArrayString(array, index1, buffer1, sizeof(buffer1)); + GetArrayString(array, index2, buffer2, sizeof(buffer2)); + + return strcmp(buffer1, buffer2); +} + +public Action:Command_TestSortADTCustom(args) +{ + new Handle:array = CreateArray(ByteCountToCells(64)); + PushArrayString(array, "faluco"); + PushArrayString(array, "bailopan"); + PushArrayString(array, "pm onoto"); + PushArrayString(array, "damaged soul"); + PushArrayString(array, "sniperbeamer"); + PushArrayString(array, "sidluke"); + PushArrayString(array, "johnny got his gun"); + PushArrayString(array, "gabe newell"); + PushArrayString(array, "hello"); + PushArrayString(array, "WHAT?!"); + + PrintToServer("Testing custom sort:") + SortADTArrayCustom(array, ArrayADTCustomCallback) + PrintADTArrayStrings(array); +} From d09ea8fda2387a1489315834b9c8269b258bbd17 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 20 Nov 2007 03:50:55 +0000 Subject: [PATCH 027/263] added ITopMenu::GetObjectName() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401708 --- public/extensions/ITopMenus.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/public/extensions/ITopMenus.h b/public/extensions/ITopMenus.h index 97cba05f..ef063e2d 100644 --- a/public/extensions/ITopMenus.h +++ b/public/extensions/ITopMenus.h @@ -43,7 +43,7 @@ */ #define SMINTERFACE_TOPMENUS_NAME "ITopMenus" -#define SMINTERFACE_TOPMENUS_VERSION 3 +#define SMINTERFACE_TOPMENUS_VERSION 4 namespace SourceMod { @@ -268,6 +268,14 @@ namespace SourceMod * @return Object's info string, or NULL if none. */ virtual const char *GetObjectInfoString(unsigned int object_id) =0; + + /** + * @brief Returns an object's name string. + * + * @param object_id Object ID. + * @return Object's name string, or NULL if none. + */ + virtual const char *GetObjectName(unsigned int object_id) =0; }; /** From 776e51dbacd43d5af44ddb52fa3b77a4b5b46d86 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Tue, 20 Nov 2007 03:55:54 +0000 Subject: [PATCH 028/263] Moved some variables in RTV to OnMapStart --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401709 --- plugins/rockthevote.sp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index 1e0d9ee0..25f3a8a8 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -88,7 +88,7 @@ public OnPluginStart() AutoExecConfig(true, "rtv"); } - + public OnConfigsExecuted() { if (g_RTVMapList != INVALID_HANDLE) @@ -96,12 +96,6 @@ public OnConfigsExecuted() ClearArray(g_RTVMapList); } - g_Voters = 0; - g_Votes = 0; - g_VotesNeeded = 0; - g_RTVStarted = false; - g_RTVEnded = false; - if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_File)) { BuildMapMenu(); @@ -109,6 +103,15 @@ public OnConfigsExecuted() CreateTimer(30.0, Timer_DelayRTV); } } + +public OnMapStart() +{ + g_Voters = 0; + g_Votes = 0; + g_VotesNeeded = 0; + g_RTVStarted = false; + g_RTVEnded = false; +} public OnMapEnd() { From 81f6856ad9b12e524287c964371af27d5b4aa8ba Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 20 Nov 2007 04:36:38 +0000 Subject: [PATCH 029/263] fixed small bug in SortADTArray --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401710 --- core/smn_sorting.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/smn_sorting.cpp b/core/smn_sorting.cpp index 9bf9426d..e300e282 100644 --- a/core/smn_sorting.cpp +++ b/core/smn_sorting.cpp @@ -423,7 +423,7 @@ static cell_t sm_SortADTArray(IPluginContext *pContext, const cell_t *params) } else if (type == Sort_Float) { - if (type == Sort_Ascending) + if (order == Sort_Ascending) { qsort(array, arraysize, blocksize * sizeof(cell_t), sort_floats_asc); } @@ -434,7 +434,7 @@ static cell_t sm_SortADTArray(IPluginContext *pContext, const cell_t *params) } else if (type == Sort_String) { - if (type == Sort_Ascending) + if (order == Sort_Ascending) { qsort(array, arraysize, blocksize * sizeof(cell_t), sort_adtarray_strings_asc); } From 09b6c5ead158b6178a55af35ecdcf6722acb791c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 20 Nov 2007 17:16:50 +0000 Subject: [PATCH 030/263] added new menu feature for old plugins --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401711 --- core/MenuStyle_Radio.cpp | 40 +++++++++++++++++++---- core/MenuStyle_Radio.h | 3 ++ core/smn_menus.cpp | 69 +++++++++++++++++++++++++++++++++++++++ plugins/include/menus.inc | 20 ++++++++++++ 4 files changed, 126 insertions(+), 6 deletions(-) diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index 1a5d033f..a1eee8ec 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -206,7 +206,9 @@ CRadioDisplay *CRadioStyle::MakeRadioDisplay(CRadioMenu *menu) if (m_FreeDisplays.empty()) { display = new CRadioDisplay(); - } else { + } + else + { display = m_FreeDisplays.front(); m_FreeDisplays.pop(); display->Reset(); @@ -214,6 +216,15 @@ CRadioDisplay *CRadioStyle::MakeRadioDisplay(CRadioMenu *menu) return display; } +IMenuPanel *CRadioStyle::MakeRadioDisplay(const char *str, int keys) +{ + CRadioDisplay *pPanel = MakeRadioDisplay(NULL); + + pPanel->DirectSet(str, keys); + + return pPanel; +} + void CRadioStyle::FreeRadioDisplay(CRadioDisplay *display) { m_FreeDisplays.push(display); @@ -275,6 +286,13 @@ void CRadioDisplay::Reset() keys = 0; } +void CRadioDisplay::DirectSet(const char *str, int keymap) +{ + m_Title.clear(); + m_BufferText.assign(str); + keys = keymap; +} + unsigned int CRadioDisplay::GetCurrentKey() { return m_NextPos; @@ -391,11 +409,21 @@ bool CRadioMenuPlayer::Radio_NeedsRefresh() void CRadioMenuPlayer::Radio_Init(int keys, const char *title, const char *text) { - display_len = UTIL_Format(display_pkt, - sizeof(display_pkt), - "%s\n%s", - title, - text); + if (title[0] != '\0') + { + display_len = UTIL_Format(display_pkt, + sizeof(display_pkt), + "%s\n%s", + title, + text); + } + else + { + display_len = UTIL_Format(display_pkt, + sizeof(display_pkt), + "%s", + text); + } display_keys = keys; } diff --git a/core/MenuStyle_Radio.h b/core/MenuStyle_Radio.h index a1b8971b..e8ba85f5 100644 --- a/core/MenuStyle_Radio.h +++ b/core/MenuStyle_Radio.h @@ -92,6 +92,7 @@ public: CRadioDisplay *MakeRadioDisplay(CRadioMenu *menu=NULL); void FreeRadioDisplay(CRadioDisplay *display); CRadioMenuPlayer *GetRadioMenuPlayer(int client); + IMenuPanel *MakeRadioDisplay(const char *str, int keys); private: CRadioMenuPlayer *m_players; CStack<CRadioDisplay *> m_FreeDisplays; @@ -118,6 +119,8 @@ public: //IMenuPanel unsigned int GetCurrentKey(); bool SetCurrentKey(unsigned int key); int GetAmountRemaining(); +public: + void DirectSet(const char *str, int keymap); private: String m_BufferText; String m_Title; diff --git a/core/smn_menus.cpp b/core/smn_menus.cpp index 4074c8df..22534c7e 100644 --- a/core/smn_menus.cpp +++ b/core/smn_menus.cpp @@ -37,6 +37,7 @@ #include "MenuStyle_Radio.h" #include "HandleSys.h" #include "PluginSys.h" +#include "PlayerManager.h" #include "sm_stringutil.h" #include "sourcemm_api.h" #if defined MENU_DEBUG @@ -1398,6 +1399,73 @@ static cell_t GetMenuSelectionPosition(IPluginContext *pContext, const cell_t *p return *s_CurSelectPosition; } +class EmptyMenuHandler : public IMenuHandler +{ +public: +} s_EmptyMenuHandler; + +static cell_t InternalShowMenu(IPluginContext *pContext, const cell_t *params) +{ + int client = params[1]; + CPlayer *pPlayer = g_Players.GetPlayerByIndex(client); + + if (pPlayer == NULL) + { + return pContext->ThrowNativeError("Invalid client index %d", client); + } + else if (!pPlayer->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in game", client); + } + + if (!g_RadioMenuStyle.IsSupported()) + { + return pContext->ThrowNativeError("Radio menus are not supported on this mod"); + } + + char *str; + pContext->LocalToString(params[2], &str); + + IMenuPanel *pPanel = g_RadioMenuStyle.MakeRadioDisplay(str, params[4]); + + if (pPanel == NULL) + { + return 0; + } + + IMenuHandler *pHandler; + CPanelHandler *pActualHandler = NULL; + if (params[5] != -1) + { + IPluginFunction *pFunction = pContext->GetFunctionById(params[5]); + if (pFunction == NULL) + { + return pContext->ThrowNativeError("Invalid function index %x", params[5]); + } + pActualHandler = g_MenuHelpers.GetPanelHandler(pFunction); + } + + if (pActualHandler == NULL) + { + pHandler = &s_EmptyMenuHandler; + } + else + { + pHandler = pActualHandler; + } + + bool bSuccess = pPanel->SendDisplay(client, pHandler, params[3]); + + pPanel->DeleteThis(); + + if (!bSuccess && pActualHandler != NULL) + { + g_MenuHelpers.FreePanelHandler(pActualHandler); + } + + return bSuccess ? 1 : 0; +} + REGISTER_NATIVES(menuNatives) { {"AddMenuItem", AddMenuItem}, @@ -1430,6 +1498,7 @@ REGISTER_NATIVES(menuNatives) {"GetPanelCurrentKey", GetPanelCurrentKey}, {"GetPanelStyle", GetPanelStyle}, {"InsertMenuItem", InsertMenuItem}, + {"InternalShowMenu", InternalShowMenu}, {"IsVoteInProgress", IsVoteInProgress}, {"RedrawMenuItem", RedrawMenuItem}, {"RemoveAllMenuItems", RemoveAllMenuItems}, diff --git a/plugins/include/menus.inc b/plugins/include/menus.inc index 90559b0c..7bac6f76 100644 --- a/plugins/include/menus.inc +++ b/plugins/include/menus.inc @@ -732,6 +732,26 @@ native bool:SetPanelCurrentKey(Handle:panel, key); */ native RedrawMenuItem(const String:text[]); +/** + * This function is provided for legacy code only. Some older plugins may use + * network messages instead of the panel API. This function wraps the panel + * API for eased portability into the SourceMod menu system. + * + * This function is only usable with the Radio Menu style. You do not need to + * split up your menu into multiple packets; SourceMod will break the string + * up internally. + * + * @param client Client index. + * @param str Full menu string as would be passed over the network. + * @param time Time to hold the menu for. + * @param keys Selectable key bitstring. + * @param handler Optional handler function, with the same rules as + * SendPanelToClient(). + * @return True on success, false on failure. + * @error Invalid client index, or radio menus not supported. + */ +native bool:InternalShowMenu(client, const String:str[], time, keys=-1, MenuHandler:handler=MenuHandler:-1); + /** * Retrieves voting information from MenuAction_VoteEnd. * From 58ff2d14af5ae09c2851aeec9448cbaafe4feca3 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 21 Nov 2007 01:21:32 +0000 Subject: [PATCH 031/263] Fixed permissions for Basechat say aliases, removed sm_psay_mode. Use command overrides for sm_psay instead. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401712 --- configs/cfg/sourcemod.cfg | 7 ------- plugins/basechat.sp | 22 +++++----------------- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/configs/cfg/sourcemod.cfg b/configs/cfg/sourcemod.cfg index ea9e61a4..b98133a6 100644 --- a/configs/cfg/sourcemod.cfg +++ b/configs/cfg/sourcemod.cfg @@ -93,13 +93,6 @@ sm_hide_slots 0 // Default: 1 sm_chat_mode 1 -// Specifies whether or not non-admins can send private messages to each other -// using say @@<target> <message>. Valid values are 0 (disabled) or 1 (enabled) -// -- -// Required: basechat.smx -// Default: 1 -sm_psay_mode 0 - // Specifies whether or not "timeleft" will automaticly be triggered every // x seconds. Valid values are 0 (disabled) to 1800 seconds. // -- diff --git a/plugins/basechat.sp b/plugins/basechat.sp index 868c3c45..17c803bf 100644 --- a/plugins/basechat.sp +++ b/plugins/basechat.sp @@ -50,7 +50,6 @@ new String:g_ColorNames[13][10] = {"White", "Red", "Green", "Blue", "Yellow", "P new g_Colors[13][3] = {{255,255,255},{255,0,0},{0,255,0},{0,0,255},{255,255,0},{255,0,255},{0,255,255},{255,128,0},{255,0,128},{128,255,0},{0,255,128},{128,0,255},{0,128,255}}; new Handle:g_Cvar_Chatmode = INVALID_HANDLE; -new Handle:g_Cvar_Psaymode = INVALID_HANDLE; new bool:g_DoColor = true; @@ -59,7 +58,6 @@ public OnPluginStart() LoadTranslations("common.phrases"); g_Cvar_Chatmode = CreateConVar("sm_chat_mode", "1", "Allows player's to send messages to admin chat.", 0, true, 0.0, true, 1.0); - g_Cvar_Psaymode = CreateConVar("sm_psay_mode", "0", "Allows player's to use psay 'say @@' alias.", 0, true, 0.0, true, 1.0); RegConsoleCmd("say", Command_SayChat); RegConsoleCmd("say_team", Command_SayAdmin); @@ -114,17 +112,17 @@ public Action:Command_SayChat(client, args) decl String:name[64]; GetClientName(client, name, sizeof(name)); - if (msgStart == 1 && CheckAdminForChat(client)) // sm_say alias + if (msgStart == 1 && CheckCommandAccess(client, "sm_say", ADMFLAG_CHAT)) // sm_say alias { SendChatToAll(name, message); LogAction(client, -1, "%L triggered sm_say (text %s)", client, message); } - else if (msgStart == 3 && CheckAdminForChat(client)) // sm_csay alias + else if (msgStart == 3 && CheckCommandAccess(client, "sm_csay", ADMFLAG_CHAT)) // sm_csay alias { PrintCenterTextAll("%s: %s", name, message); LogAction(client, -1, "%L triggered sm_csay (text %s)", client, text); } - else if (msgStart == 2 && (CheckAdminForChat(client) || GetConVarBool(g_Cvar_Psaymode))) // sm_psay alias + else if (msgStart == 2 && CheckCommandAccess(client, "sm_psay", ADMFLAG_CHAT)) // sm_psay alias { decl String:arg[64]; @@ -158,7 +156,7 @@ public Action:Command_SayChat(client, args) public Action:Command_SayAdmin(client, args) { - if (!CheckAdminForChat(client) && !GetConVarBool(g_Cvar_Chatmode)) + if (!CheckCommandAccess(client, "sm_chat", ADMFLAG_CHAT) && !GetConVarBool(g_Cvar_Chatmode)) { return Plugin_Continue; } @@ -359,16 +357,6 @@ public Action:Command_SmMsay(client, args) return Plugin_Handled; } -bool:CheckAdminForChat(client) -{ - if (client == 0) - { - return true; - } - - return CheckCommandAccess(client, "sm_chat", ADMFLAG_CHAT); -} - FindColor(String:color[]) { for (new i = 0; i < 13; i++) @@ -400,7 +388,7 @@ SendChatToAdmins(String:name[], String:message[]) { if (IsClientInGame(i)) { - if (CheckAdminForChat(i)) + if (CheckCommandAccess(i, "sm_chat", ADMFLAG_CHAT)) { if (g_DoColor) { From 64a07ce1980ff9837ee7bbc65b51848355b071a0 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 21 Nov 2007 06:49:40 +0000 Subject: [PATCH 032/263] added new native KvJumpToKeySymbol --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401713 --- core/smn_keyvalues.cpp | 29 +++++++++++++++++++++++++++++ plugins/include/keyvalues.inc | 9 +++++++++ 2 files changed, 38 insertions(+) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index 3ffad068..ef18e36d 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -406,6 +406,34 @@ static cell_t smn_KvJumpToKey(IPluginContext *pCtx, const cell_t *params) return 1; } +static cell_t smn_KvJumpToKeySymbol(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec; + char *name; + KeyValueStack *pStk; + + sec.pOwner = NULL; + sec.pIdentity = g_pCoreIdent; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) + != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); + } + + KeyValues *pSubKey = pStk->pCurRoot.front(); + pSubKey = pSubKey->FindKey(params[2]); + if (!pSubKey) + { + return 0; + } + pStk->pCurRoot.push(pSubKey); + + return 1; +} + static cell_t smn_KvGotoFirstSubKey(IPluginContext *pCtx, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); @@ -937,6 +965,7 @@ REGISTER_NATIVES(keyvaluenatives) {"KvGetUInt64", smn_KvGetUInt64}, {"CreateKeyValues", smn_CreateKeyValues}, {"KvJumpToKey", smn_KvJumpToKey}, + {"KvJumpToKeySymbol", smn_KvJumpToKeySymbol}, {"KvGotoNextKey", smn_KvGotoNextKey}, {"KvJumpFirstSubKey", smn_KvGotoFirstSubKey}, /* BACKWARDS COMPAT SHIM */ {"KvGotoFirstSubKey", smn_KvGotoFirstSubKey}, diff --git a/plugins/include/keyvalues.inc b/plugins/include/keyvalues.inc index 715ddc44..bd8804c8 100644 --- a/plugins/include/keyvalues.inc +++ b/plugins/include/keyvalues.inc @@ -191,6 +191,15 @@ native KvGetUInt64(Handle:kv, const String:key[], value[2], defvalue[2]={0,0}); */ native bool:KvJumpToKey(Handle:kv, const String:key[], bool:create=false); +/** + * Sets the current position in the KeyValues tree to the given key. + * + * @param kv KeyValues Handle. + * @param id KeyValues id. + * @return True if the key exists, false if it does not. + */ +native bool:KvJumpToKeySymbol(Handle:kv, id); + /** * Sets the current position in the KeyValues tree to the first sub key. * This native adds to the internal traversal stack. From bce7cf5bdd48bdf77c739b05fd840b00395e5360 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Wed, 21 Nov 2007 12:58:37 +0000 Subject: [PATCH 033/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401714 --- core/smn_keyvalues.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index ef18e36d..f5ff470c 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -411,7 +411,6 @@ static cell_t smn_KvJumpToKeySymbol(IPluginContext *pCtx, const cell_t *params) Handle_t hndl = static_cast<Handle_t>(params[1]); HandleError herr; HandleSecurity sec; - char *name; KeyValueStack *pStk; sec.pOwner = NULL; From 19c184aefc21f6a2987e722cf5776c2af2b16909 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 21 Nov 2007 20:58:00 +0000 Subject: [PATCH 034/263] Added KvGetSectionSymbol --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401715 --- core/smn_keyvalues.cpp | 31 +++++++++++++++++++++++++++++++ plugins/include/keyvalues.inc | 10 ++++++++++ 2 files changed, 41 insertions(+) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index f5ff470c..f87ee7e7 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -948,6 +948,36 @@ static cell_t smn_FindKeyById(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t smn_KvGetSectionSymbol(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec; + KeyValueStack *pStk; + cell_t *val; + + sec.pOwner = NULL; + sec.pIdentity = g_pCoreIdent; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) + != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); + } + + KeyValues *pSection = pStk->pCurRoot.front(); + + pContext->LocalToPhysAddr(params[2], &val); + *val = pSection->GetNameSymbol(); + + if (!*val) + { + return 0; + } + + return 1; +} + static KeyValueNatives s_KeyValueNatives; REGISTER_NATIVES(keyvaluenatives) @@ -984,5 +1014,6 @@ REGISTER_NATIVES(keyvaluenatives) {"KvCopySubkeys", smn_CopySubkeys}, {"KvFindKeyById", smn_FindKeyById}, {"KvGetNameSymbol", smn_GetNameSymbol}, + {"KvGetSectionSymbol", smn_KvGetSectionSymbol}, {NULL, NULL} }; diff --git a/plugins/include/keyvalues.inc b/plugins/include/keyvalues.inc index bd8804c8..deb21e6c 100644 --- a/plugins/include/keyvalues.inc +++ b/plugins/include/keyvalues.inc @@ -394,3 +394,13 @@ native bool:KvFindKeyById(Handle:kv, id, String:name[], maxlength); * @error Invalid Handle. */ native bool:KvGetNameSymbol(Handle:kv, const String:key[], &id); + +/** + * Retrieves the current section id. + * + * @param kv KeyValues Handle. + * @param id Id of the current section. + * @return True on success, false on failure. + * @error Invalid Handle. + */ +native bool:KvGetSectionSymbol(Handle:kv, &id); From 858fd7d3cd6d96f3ecd5bc0272ab447c80cb6132 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 21 Nov 2007 22:15:05 +0000 Subject: [PATCH 035/263] Build fix attempt 1 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401716 --- core/smn_keyvalues.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index f87ee7e7..d0313947 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -967,7 +967,7 @@ static cell_t smn_KvGetSectionSymbol(IPluginContext *pCtx, const cell_t *params) KeyValues *pSection = pStk->pCurRoot.front(); - pContext->LocalToPhysAddr(params[2], &val); + pCtx->LocalToPhysAddr(params[2], &val); *val = pSection->GetNameSymbol(); if (!*val) From 9be4c043a4ae80c9ae634fdb3c63635828f1a37b Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Thu, 22 Nov 2007 20:34:38 +0000 Subject: [PATCH 036/263] Typo in example in admins_simple.ini --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401717 --- configs/admins_simple.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/admins_simple.ini b/configs/admins_simple.ini index 40a9b70d..9c88bbe6 100644 --- a/configs/admins_simple.ini +++ b/configs/admins_simple.ini @@ -38,7 +38,7 @@ // Examples: (do not put // in front of real lines, as // means 'comment') // // "STEAM_0:1:16" "bce" //kick, ban, slay for this steam ID, no immunity -// "127.0.0.1" "99:z" //all permissions for this ip, immunity value is 99 +// "!127.0.0.1" "99:z" //all permissions for this ip, immunity value is 99 // "BAILOPAN" "abc" "Gab3n" //name BAILOPAN, password "Gab3n": gets reservation, kick, ban // //////////////////////////////// From d0bcaecdef032c3a1c12d2166eccbffebf3b1ad4 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Fri, 23 Nov 2007 01:06:35 +0000 Subject: [PATCH 037/263] RTV Adjustments --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401718 --- plugins/rockthevote.sp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index 25f3a8a8..6378dc3e 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -122,7 +122,7 @@ public OnMapEnd() public bool:OnClientConnect(client, String:rejectmsg[], maxlen) { - if(IsFakeClient(client)) + if(!g_CanRTV || IsFakeClient(client)) return true; g_Voted[client] = false; @@ -136,7 +136,7 @@ public bool:OnClientConnect(client, String:rejectmsg[], maxlen) public OnClientDisconnect(client) { - if(IsFakeClient(client)) + if(!g_CanRTV || IsFakeClient(client)) return; if(g_Voted[client]) @@ -148,8 +148,9 @@ public OnClientDisconnect(client) g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); - if (g_Votes && g_Voters && g_Votes >= g_VotesNeeded && g_RTVAllowed) - { + if (g_Votes && g_Voters && g_Votes >= g_VotesNeeded && g_RTVAllowed && !g_RTVStarted) + { + g_RTVStarted = true; CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); } } @@ -160,6 +161,12 @@ public Action:Command_Addmap(client, args) { ReplyToCommand(client, "[SM] Usage: sm_rtv_addmap <mapname>"); return Plugin_Handled; + } + + if (!g_CanRTV) + { + ReplyToCommand(client, "[SM] RockTheVote is not available."); + return Plugin_Handled; } decl String:mapname[64]; @@ -268,7 +275,8 @@ public Action:Command_Say(client, args) PrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded); if (g_Votes >= g_VotesNeeded) - { + { + g_RTVStarted = true; CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); } } @@ -321,8 +329,6 @@ public Action:Timer_StartRTV(Handle:timer) return; } - g_RTVStarted = true; - if (IsVoteInProgress()) { // Can't start a vote, try again in 5 seconds. From 7c95678241b467ce121b72048c701146b28a3e4a Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Fri, 23 Nov 2007 01:13:13 +0000 Subject: [PATCH 038/263] Small RTV adjustment --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401719 --- plugins/rockthevote.sp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index 6378dc3e..cc4b5b50 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -89,21 +89,6 @@ public OnPluginStart() AutoExecConfig(true, "rtv"); } -public OnConfigsExecuted() -{ - if (g_RTVMapList != INVALID_HANDLE) - { - ClearArray(g_RTVMapList); - } - - if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_File)) - { - BuildMapMenu(); - g_CanRTV = true; - CreateTimer(30.0, Timer_DelayRTV); - } -} - public OnMapStart() { g_Voters = 0; @@ -119,6 +104,20 @@ public OnMapEnd() g_RTVAllowed = false; } +public OnConfigsExecuted() +{ + if (g_RTVMapList != INVALID_HANDLE) + { + ClearArray(g_RTVMapList); + } + + if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_File)) + { + BuildMapMenu(); + g_CanRTV = true; + CreateTimer(30.0, Timer_DelayRTV); + } +} public bool:OnClientConnect(client, String:rejectmsg[], maxlen) { @@ -218,8 +217,10 @@ public Action:Command_Addmap(client, args) public Action:Command_Say(client, args) { - if (!g_CanRTV || !client) - return Plugin_Continue; + if (!g_CanRTV || !client) + { + return Plugin_Continue; + } decl String:text[192]; if (!GetCmdArgString(text, sizeof(text))) @@ -438,7 +439,8 @@ public Handler_MapMapVoteMenu(Handle:menu, MenuAction:action, param1, param2) { if (param1 == VoteCancel_NoVotes) { - PrintToChatAll("[SM] %t", "No Votes"); + PrintToChatAll("[SM] %t", "No Votes"); + g_RTVEnded = true; } } From 674b877a4360126ad33f8fb0b39ac23a2e2ff340 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 23 Nov 2007 02:39:48 +0000 Subject: [PATCH 039/263] fixed a precision bug that caused SourceMod to stop working after excatly 72.8 hours --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401720 --- core/TimerSys.cpp | 12 ++++++------ core/TimerSys.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/TimerSys.cpp b/core/TimerSys.cpp index d4de6231..a86945ae 100644 --- a/core/TimerSys.cpp +++ b/core/TimerSys.cpp @@ -48,16 +48,16 @@ SH_DECL_HOOK2_void(ICvar, CallGlobalChangeCallbacks, SH_NOATTRIB, false, ConVar #endif TimerSystem g_Timers; -float g_fUniversalTime = 0.0f; +double g_fUniversalTime = 0.0f; float g_fGameStartTime = 0.0f; /* Game game start time, non-universal */ -float g_fTimerThink = 0.0f; /* Timer's next think time */ -const float *g_pUniversalTime = &g_fUniversalTime; +double g_fTimerThink = 0.0f; /* Timer's next think time */ +const double *g_pUniversalTime = &g_fUniversalTime; ConVar *mp_timelimit = NULL; int g_TimeLeftMode = 0; ConVar sm_time_adjustment("sm_time_adjustment", "0", 0, "Adjusts the server time in seconds"); -inline float GetSimulatedTime() +inline double GetSimulatedTime() { return g_fUniversalTime; } @@ -159,7 +159,7 @@ private: * that a drastic jump in time will continue acting normally. Users * may not expect this, but... I think it is the best solution. */ -inline float CalcNextThink(float last, float interval) +inline double CalcNextThink(double last, float interval) { if (g_fUniversalTime - last - interval <= TIMER_MIN_ACCURACY) { @@ -274,7 +274,7 @@ void TimerSystem::RunFrame() ITimer *pTimer; TimerIter iter; - float curtime = GetSimulatedTime(); + double curtime = GetSimulatedTime(); for (iter=m_SingleTimers.begin(); iter!=m_SingleTimers.end(); ) { pTimer = (*iter); diff --git a/core/TimerSys.h b/core/TimerSys.h index 3b66e778..3cf0b066 100644 --- a/core/TimerSys.h +++ b/core/TimerSys.h @@ -51,7 +51,7 @@ public: ITimedEvent *m_Listener; void *m_pData; float m_Interval; - float m_ToExec; + double m_ToExec; int m_Flags; bool m_InExec; bool m_KillMe; @@ -103,7 +103,7 @@ private: time_t GetAdjustedTime(time_t *buf = NULL); -extern const float *g_pUniversalTime; +extern const double *g_pUniversalTime; extern TimerSystem g_Timers; extern int g_TimeLeftMode; From a91c7892a4bd9c12d96bd94ca052b581345cb884 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Fri, 23 Nov 2007 23:21:19 +0000 Subject: [PATCH 040/263] added amb1189, FindEntityByClassname for TF2 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401723 --- gamedata/sdktools.games.ep2.txt | 42 ++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index 156373ef..e1caf9b5 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -97,7 +97,47 @@ } } } - + + /* CGlobalEntityList */ + "#default" + { + "#supported" + { + "game" "tf" + } + + "Offsets" + { + /* Offset into LevelShutdown */ + "gEntList" + { + "windows" "11" + } + } + + "Signatures" + { + "LevelShutdown" + { + "library" "server" + "windows" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8" + } + "gEntList" + { + "library" "server" + "linux" "@gEntList" + } + + /* Functions in CGlobalEntityList */ + "FindEntityByClassname" + { + "library" "server" + "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03" + "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + } + } + /* Team Fortress 2 Offsets */ "tf" { From a86f386f121cb47f128c72ac71d3bda47cf0cf0f Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Fri, 23 Nov 2007 23:24:40 +0000 Subject: [PATCH 041/263] gah forgot this --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401724 --- core/GameConfigs.cpp | 2 +- extensions/sdktools/vglobals.cpp | 36 ++++++++++++++++---------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index 86b87f99..b5b5ca8f 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -426,7 +426,7 @@ SMCResult CGameConfig::ReadSMC_LeavingSection(const SMCStates *states) } #endif /* First, preprocess the signature */ - char real_sig[255]; + char real_sig[511]; size_t real_bytes; size_t length; diff --git a/extensions/sdktools/vglobals.cpp b/extensions/sdktools/vglobals.cpp index fd872aac..d7cd3e4f 100644 --- a/extensions/sdktools/vglobals.cpp +++ b/extensions/sdktools/vglobals.cpp @@ -40,17 +40,6 @@ void InitializeValveGlobals() char *addr = NULL; int offset; - /* g_pGameRules */ - if (!g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) || !addr) - { - return; - } - if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset) - { - return; - } - g_pGameRules = *reinterpret_cast<void ***>(addr + offset); - /* gEntList and/or g_pEntityList */ if (!g_pGameConf->GetMemSig("LevelShutdown", (void **)&addr) || !addr) { @@ -61,24 +50,35 @@ void InitializeValveGlobals() return; } g_EntList = *reinterpret_cast<void **>(addr + offset); + + /* g_pGameRules */ + if (!g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) || !addr) + { + return; + } + if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset) + { + return; + } + g_pGameRules = *reinterpret_cast<void ***>(addr + offset); } #elif defined PLATFORM_LINUX void InitializeValveGlobals() { char *addr = NULL; - /* g_pGameRules */ - if (!g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) || !addr) - { - return; - } - g_pGameRules = reinterpret_cast<void **>(addr); - /* gEntList and/or g_pEntityList */ if (!g_pGameConf->GetMemSig("gEntList", (void **)&addr) || !addr) { return; } g_EntList = reinterpret_cast<void *>(addr); + + /* g_pGameRules */ + if (!g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) || !addr) + { + return; + } + g_pGameRules = reinterpret_cast<void **>(addr); } #endif From 5849a0d2e248627710d77ae5aa6ba81fabafcd51 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sat, 24 Nov 2007 03:28:33 +0000 Subject: [PATCH 042/263] The current map played shouldn't appear in MapChooser votes or RTV votes now. It can still be nominated in RTV though. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401725 --- plugins/mapchooser.sp | 21 +++++++++------------ plugins/rockthevote.sp | 9 ++++++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index 2daed5f2..55cea42c 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -521,30 +521,27 @@ CreateNextVote() } decl String:map[32]; - new Handle:tempMaps = CloneArray(g_MapList); + new index, Handle:tempMaps = CloneArray(g_MapList); + + GetCurrentMap(map, sizeof(map)); + index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } if (GetConVarInt(g_Cvar_ExcludeMaps) && GetArraySize(tempMaps) > GetConVarInt(g_Cvar_ExcludeMaps)) { for (new i = 0; i < GetArraySize(g_OldMapList); i++) { GetArrayString(g_OldMapList, i, map, sizeof(map)); - new index = FindStringInArray(tempMaps, map); + index = FindStringInArray(tempMaps, map); if (index != -1) { RemoveFromArray(tempMaps, index); } } } - else - { - // If we didn't check against ExcludeMaps, we have to remove the current map. - GetCurrentMap(map, sizeof(map)); - new index = FindStringInArray(tempMaps, map); - if (index != -1) - { - RemoveFromArray(tempMaps, index); - } - } new limit = (GetConVarInt(g_Cvar_IncludeMaps) < GetArraySize(tempMaps) ? GetConVarInt(g_Cvar_IncludeMaps) : GetArraySize(tempMaps)); for (new i = 0; i < limit; i++) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index cc4b5b50..a57f038a 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -344,6 +344,13 @@ public Action:Timer_StartRTV(Handle:timer) new Handle:tempMaps = CloneArray(g_MapList); decl String:map[32]; + + GetCurrentMap(map, sizeof(map)); + new index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } // We assume that g_RTVMapList is within the correct limits, based on the logic for nominations for (new i = 0; i < GetArraySize(g_RTVMapList); i++) @@ -351,7 +358,7 @@ public Action:Timer_StartRTV(Handle:timer) GetArrayString(g_RTVMapList, i, map, sizeof(map)); AddMenuItem(MapVoteMenu, map, map); - new index = FindStringInArray(tempMaps, map); + index = FindStringInArray(tempMaps, map); if (index != -1) { RemoveFromArray(tempMaps, index); From ef8db35a49c04992d498151439cd3f1f4b93378e Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 24 Nov 2007 18:17:00 +0000 Subject: [PATCH 043/263] added SetEntityModel native --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401726 --- extensions/sdktools/vnatives.cpp | 24 ++++++++++++++ gamedata/sdktools.games.ep2.txt | 5 +++ gamedata/sdktools.games.txt | 45 ++++++++++++++++++++++++++ plugins/include/sdktools_functions.inc | 10 ++++++ 4 files changed, 84 insertions(+) diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index 017084ee..886ad887 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -802,6 +802,29 @@ static cell_t sm_GetClientAimTarget(IPluginContext *pContext, const cell_t *para return GetClientAimTarget(pPlayer->GetEdict(), params[2] ? true : false); } +static cell_t sm_SetEntityModel(IPluginContext *pContext, const cell_t *params) +{ + static ValveCall *pCall = NULL; + if (!pCall) + { + ValvePassInfo pass[1]; + InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); + if (!CreateBaseCall("SetEntityModel", ValveCall_Entity, NULL, pass, 1, &pCall)) + { + return pContext->ThrowNativeError("\"SetEntityModel\" not supported by this mod"); + } else if (!pCall) { + return pContext->ThrowNativeError("\"SetEntityModel\" wrapper failed to initialized"); + } + } + + START_CALL(); + DECODE_VALVE_PARAM(1, thisinfo, 0); + DECODE_VALVE_PARAM(2, vparams, 0); + FINISH_CALL_SIMPLE(NULL); + + return 1; +} + sp_nativeinfo_t g_Natives[] = { {"ExtinguishPlayer", ExtinguishEntity}, @@ -826,5 +849,6 @@ sp_nativeinfo_t g_Natives[] = {"DispatchKeyValueFloat", DispatchKeyValueFloat}, {"DispatchKeyValueVector", DispatchKeyValueVector}, {"GetClientAimTarget", sm_GetClientAimTarget}, + {"SetEntityModel", sm_SetEntityModel}, {NULL, NULL}, }; diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index e1caf9b5..51c53b1e 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -203,6 +203,11 @@ "windows" "27" "linux" "30" } + "SetEntityModel" + { + "windows" "23" + "linux" "24" + } /** * THESE ARE DISABLED FOR NOW. diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 361cf2b5..b2d75206 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -326,6 +326,11 @@ "windows" "29" "linux" "32" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } } } @@ -399,6 +404,11 @@ "windows" "29" "linux" "32" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } } } @@ -472,6 +482,11 @@ "windows" "29" "linux" "32" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } } } @@ -546,6 +561,11 @@ "windows" "39" "linux" "40" } + "SetEntityModel" + { + "windows" "30" + "linux" "31" + } /* Temp Entities */ "TE_GetServerClass" @@ -628,6 +648,11 @@ "windows" "29" "linux" "32" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } /* Offset into CBaseTempEntity constructor. * On Windows Dsytopia is heavily inlined; we use the function @@ -719,6 +744,11 @@ "windows" "28" "linux" "31" } + "SetEntityModel" + { + "windows" "24" + "linux" "25" + } } } @@ -813,6 +843,11 @@ "windows" "29" "linux" "32" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } /* Temp Entities */ "s_pTempEntities" @@ -888,6 +923,11 @@ "windows" "34" "linux" "35" } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } /* Temp Entities */ "s_pTempEntities" @@ -981,6 +1021,11 @@ "windows" "33" "linux" "36" } + "SetEntityModel" + { + "windows" "27" + "linux" "28" + } } } } diff --git a/plugins/include/sdktools_functions.inc b/plugins/include/sdktools_functions.inc index 2b7f27c9..4fc3958e 100644 --- a/plugins/include/sdktools_functions.inc +++ b/plugins/include/sdktools_functions.inc @@ -254,6 +254,16 @@ native SetTeamScore(index, value); */ native GetTeamClientCount(index); +/** + * Sets the model to a given entity. + * + * @param entity Entity index. + * @param model Model name. + * @noreturn + * @error Invalid entity index, or no mod support. + */ +native SetEntityModel(entity, const String:model[]); + /** * @deprecated */ From 54ad852d723f05820c9bac90bc23f4f357e57792 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 02:45:12 +0000 Subject: [PATCH 044/263] addressed amb1201 - no_mapchange timers now get removed right after onmapend --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401727 --- core/CrazyDebugger.cpp | 2 +- core/TimerSys.cpp | 11 +++-------- core/TimerSys.h | 3 +-- core/sourcemod.cpp | 16 ++++++++-------- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/core/CrazyDebugger.cpp b/core/CrazyDebugger.cpp index 287e87d7..7960191d 100644 --- a/core/CrazyDebugger.cpp +++ b/core/CrazyDebugger.cpp @@ -29,7 +29,7 @@ * Version: $Id$ */ -#if defined CRAZY_DEBUG +#if defined DEBUG #include "sm_globals.h" #include "sourcemm_api.h" #include "Tlhelp32.h" diff --git a/core/TimerSys.cpp b/core/TimerSys.cpp index a86945ae..464d4373 100644 --- a/core/TimerSys.cpp +++ b/core/TimerSys.cpp @@ -224,11 +224,6 @@ void TimerSystem::OnSourceModShutdown() g_Forwards.ReleaseForward(m_pOnMapTimeLeftChanged); } -void TimerSystem::OnSourceModLevelChange(const char *mapName) -{ - MapChange(true); -} - void TimerSystem::OnSourceModLevelEnd() { m_bHasMapTickedYet = false; @@ -423,7 +418,7 @@ void TimerSystem::KillTimer(ITimer *pTimer) } CStack<ITimer *> s_tokill; -void TimerSystem::MapChange(bool real_mapchange) +void TimerSystem::RemoveMapChangeTimers() { ITimer *pTimer; TimerIter iter; @@ -431,7 +426,7 @@ void TimerSystem::MapChange(bool real_mapchange) for (iter=m_SingleTimers.begin(); iter!=m_SingleTimers.end(); iter++) { pTimer = (*iter); - if (real_mapchange && (pTimer->m_Flags & TIMER_FLAG_NO_MAPCHANGE)) + if (pTimer->m_Flags & TIMER_FLAG_NO_MAPCHANGE) { s_tokill.push(pTimer); } @@ -440,7 +435,7 @@ void TimerSystem::MapChange(bool real_mapchange) for (iter=m_LoopTimers.begin(); iter!=m_LoopTimers.end(); iter++) { pTimer = (*iter); - if (real_mapchange && (pTimer->m_Flags & TIMER_FLAG_NO_MAPCHANGE)) + if (pTimer->m_Flags & TIMER_FLAG_NO_MAPCHANGE) { s_tokill.push(pTimer); } diff --git a/core/TimerSys.h b/core/TimerSys.h index 3cf0b066..3f040ea3 100644 --- a/core/TimerSys.h +++ b/core/TimerSys.h @@ -66,7 +66,6 @@ public: ~TimerSystem(); public: //SMGlobalClass void OnSourceModAllInitialized(); - void OnSourceModLevelChange(const char *mapName); void OnSourceModLevelEnd(); void OnSourceModGameInitialized(); void OnSourceModShutdown(); @@ -81,7 +80,7 @@ public: //ITimerSystem bool GetMapTimeLeft(float *pTime); public: void RunFrame(); - void MapChange(bool real_mapchange); + void RemoveMapChangeTimers(); void GameFrame(bool simulating); IMapTimer *GetMapTimer(); private: diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index e94ed402..3a30de54 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -85,7 +85,6 @@ SourceModBase::SourceModBase() { m_IsMapLoading = false; m_ExecPluginReload = false; - m_ExecOnMapEnd = false; m_GotBasePath = false; } @@ -326,7 +325,6 @@ bool SourceModBase::LevelInit(char const *pMapName, char const *pMapEntities, ch m_IsMapLoading = true; m_ExecPluginReload = true; - m_ExecOnMapEnd = true; /* Notify! */ SMGlobalClass *pBase = SMGlobalClass::head; @@ -368,13 +366,15 @@ void SourceModBase::LevelShutdown() next->OnSourceModLevelEnd(); next = next->m_pGlobalClassNext; } - g_LevelEndBarrier = false; - } + + if (g_pOnMapEnd != NULL) + { + g_pOnMapEnd->Execute(NULL); + } - if (g_pOnMapEnd && m_ExecOnMapEnd) - { - g_pOnMapEnd->Execute(NULL); - m_ExecOnMapEnd = false; + g_Timers.RemoveMapChangeTimers(); + + g_LevelEndBarrier = false; } g_OnMapStarted = false; From 61673e10f6652862055b5d54fd484b670a751c7c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 04:46:18 +0000 Subject: [PATCH 045/263] file copying now works, dialogs re-display at their last location, fixed up a bunch of interface mistakes, etc --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401728 --- tools/installer/CCriticalSection.h | 37 +++ tools/installer/CFileList.cpp | 151 +++++++++++ tools/installer/CFileList.h | 40 +++ tools/installer/ChooseMethod.cpp | 3 + tools/installer/ICopyMethod.h | 4 +- tools/installer/InstallerMain.cpp | 30 +++ tools/installer/InstallerMain.h | 3 + tools/installer/InstallerUtil.cpp | 87 ++++++- tools/installer/InstallerUtil.h | 2 + tools/installer/LocalCopyMethod.cpp | 17 +- tools/installer/PerformInstall.cpp | 379 ++++++++++++++++++++-------- tools/installer/PerformInstall.h | 12 + tools/installer/Resource.h | 14 +- tools/installer/SelectGame.cpp | 4 + tools/installer/Welcome.cpp | 3 + tools/installer/installer.rc | 47 ++-- tools/installer/installer.vcproj | 12 + 17 files changed, 715 insertions(+), 130 deletions(-) create mode 100644 tools/installer/CCriticalSection.h create mode 100644 tools/installer/CFileList.cpp create mode 100644 tools/installer/CFileList.h diff --git a/tools/installer/CCriticalSection.h b/tools/installer/CCriticalSection.h new file mode 100644 index 00000000..bd54dae0 --- /dev/null +++ b/tools/installer/CCriticalSection.h @@ -0,0 +1,37 @@ +#ifndef _INCLUDE_INSTALLER_CRIT_SECT_H_ +#define _INCLUDE_INSTALLER_CRIT_SECT_H_ + +#include "platform_headers.h" + +class CCriticalSection +{ +public: + CCriticalSection() + { + InitializeCriticalSection(&m_crit); + } + ~CCriticalSection() + { + DeleteCriticalSection(&m_crit); + } + void Enter() + { + EnterCriticalSection(&m_crit); + } + bool TryEnter() + { + if (TryEnterCriticalSection(&m_crit)) + { + return true; + } + return false; + } + void Leave() + { + LeaveCriticalSection(&m_crit); + } +private: + CRITICAL_SECTION m_crit; +}; + +#endif //_INCLUDE_INSTALLER_CRIT_SECT_H_ diff --git a/tools/installer/CFileList.cpp b/tools/installer/CFileList.cpp new file mode 100644 index 00000000..a11f5a34 --- /dev/null +++ b/tools/installer/CFileList.cpp @@ -0,0 +1,151 @@ +#include "CFileList.h" +#include "InstallerUtil.h" + +using namespace std; + +CFileList::CFileList(const TCHAR *name) : m_TotalSize(0), m_RecursiveSize(0), + m_bGotRecursiveSize(false) +{ + UTIL_Format(m_FolderName, sizeof(m_FolderName) / sizeof(TCHAR), _T("%s"), name); +} + +CFileList::~CFileList() +{ + list<CFileList *>::iterator iter; + + for (iter = m_folder_list.begin(); + iter != m_folder_list.end(); + iter++) + { + delete (*iter); + } +} + +const TCHAR *CFileList::GetFolderName() +{ + return m_FolderName; +} + +void CFileList::AddFolder(CFileList *pFileList) +{ + m_folder_list.push_back(pFileList); +} + +void CFileList::AddFile(const TCHAR *name, unsigned __int64 size) +{ + CFileListEntry entry; + + UTIL_Format(entry.file, sizeof(entry.file) / sizeof(TCHAR), _T("%s"), name); + entry.size = size; + + m_file_list.push_back(entry); + m_TotalSize += size; +} + +unsigned __int64 CFileList::GetRecursiveSize() +{ + if (m_bGotRecursiveSize) + { + return m_RecursiveSize; + } + + m_RecursiveSize = m_TotalSize; + + list<CFileList *>::iterator iter; + for (iter = m_folder_list.begin(); iter != m_folder_list.end(); iter++) + { + m_RecursiveSize += (*iter)->GetRecursiveSize(); + } + + m_bGotRecursiveSize = true; + + return m_RecursiveSize; +} + +const TCHAR *CFileList::PeekCurrentFile() +{ + if (m_file_list.empty()) + { + return NULL; + } + + return m_file_list.begin()->file; +} + +void CFileList::PopCurrentFile() +{ + m_file_list.erase(m_file_list.begin()); +} + +CFileList *CFileList::PeekCurrentFolder() +{ + if (m_folder_list.empty()) + { + return NULL; + } + + return *(m_folder_list.begin()); +} + +void CFileList::PopCurrentFolder() +{ + m_folder_list.erase(m_folder_list.begin()); +} + +void RecursiveBuildFileList(CFileList *file_list, const TCHAR *current_folder) +{ + HANDLE hFind; + WIN32_FIND_DATA fd; + TCHAR path[MAX_PATH]; + + UTIL_PathFormat(path, sizeof(path) / sizeof(TCHAR), _T("%s\\*.*"), current_folder); + + if ((hFind = FindFirstFile(path, &fd)) == INVALID_HANDLE_VALUE) + { + return; + } + + do + { + if (tstrcasecmp(fd.cFileName, _T(".")) == 0 + || tstrcasecmp(fd.cFileName, _T("..")) == 0) + { + continue; + } + + if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) + { + CFileList *pSubList = new CFileList(fd.cFileName); + + UTIL_PathFormat(path, + sizeof(path) / sizeof(TCHAR), + _T("%s\\%s"), + current_folder, + fd.cFileName); + + RecursiveBuildFileList(pSubList, path); + + file_list->AddFolder(pSubList); + } + else + { + LARGE_INTEGER li; + + li.LowPart = fd.nFileSizeLow; + li.HighPart = fd.nFileSizeHigh; + + file_list->AddFile(fd.cFileName, li.QuadPart); + } + } while (FindNextFile(hFind, &fd)); + + FindClose(hFind); +} + +CFileList *CFileList::BuildFileList(const TCHAR *name, const TCHAR *root_folder) +{ + CFileList *pFileList = new CFileList(name); + + RecursiveBuildFileList(pFileList, root_folder); + + return pFileList; +} diff --git a/tools/installer/CFileList.h b/tools/installer/CFileList.h new file mode 100644 index 00000000..9f7af183 --- /dev/null +++ b/tools/installer/CFileList.h @@ -0,0 +1,40 @@ +#ifndef _INCLUDE_FOLDER_LIST_H_ +#define _INCLUDE_FOLDER_LIST_H_ + +#include "platform_headers.h" +#include <list> +#include <vector> + +struct CFileListEntry +{ + TCHAR file[MAX_PATH]; + unsigned __int64 size; +}; + +class CFileList +{ +public: + CFileList(const TCHAR *name); + ~CFileList(); +public: + CFileList *PeekCurrentFolder(); + void PopCurrentFolder(); + const TCHAR *PeekCurrentFile(); + void PopCurrentFile(); + const TCHAR *GetFolderName(); +public: + void AddFolder(CFileList *pFileList); + void AddFile(const TCHAR *name, unsigned __int64 size); + unsigned __int64 GetRecursiveSize(); +public: + static CFileList *BuildFileList(const TCHAR *name, const TCHAR *root_folder); +private: + std::list<CFileList *> m_folder_list; + std::list<CFileListEntry> m_file_list; + TCHAR m_FolderName[MAX_PATH]; + unsigned __int64 m_TotalSize; + unsigned __int64 m_RecursiveSize; + bool m_bGotRecursiveSize; +}; + +#endif //_INCLUDE_FOLDER_LIST_H_ diff --git a/tools/installer/ChooseMethod.cpp b/tools/installer/ChooseMethod.cpp index 0191030e..11199793 100644 --- a/tools/installer/ChooseMethod.cpp +++ b/tools/installer/ChooseMethod.cpp @@ -95,6 +95,7 @@ INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPA { if (LOWORD(wParam) == ID_METHOD_BACK) { + UpdateGlobalPosition(hDlg); EndDialog(hDlg, (INT_PTR)DisplayWelcome); return (INT_PTR)TRUE; } @@ -170,6 +171,7 @@ INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPA /* If we got a valid games list, we can display the next * dialog box. */ + UpdateGlobalPosition(hDlg); EndDialog(hDlg, (INT_PTR)DisplaySelectGame); return (INT_PTR)TRUE; } @@ -178,6 +180,7 @@ INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPA } case WM_INITDIALOG: { + SetToGlobalPosition(hDlg); return (INT_PTR)TRUE; } } diff --git a/tools/installer/ICopyMethod.h b/tools/installer/ICopyMethod.h index af9a2277..cd1c0e03 100644 --- a/tools/installer/ICopyMethod.h +++ b/tools/installer/ICopyMethod.h @@ -6,7 +6,9 @@ class ICopyProgress { public: - virtual void UpdateProgress(float percent_complete) =0; + virtual void StartingNewFile(const TCHAR *filename) =0; + virtual void UpdateProgress(size_t bytes, size_t total_bytes) =0; + virtual void FileDone(size_t file_size) =0; }; class ICopyMethod diff --git a/tools/installer/InstallerMain.cpp b/tools/installer/InstallerMain.cpp index e3d9515c..3c18f5a7 100644 --- a/tools/installer/InstallerMain.cpp +++ b/tools/installer/InstallerMain.cpp @@ -5,6 +5,35 @@ HINSTANCE g_hInstance; NEXT_DIALOG next_dialog = DisplayWelcome; +POINT g_GlobalPosition; + +void UpdateGlobalPosition(HWND hWnd) +{ + WINDOWINFO wi; + + wi.cbSize = sizeof(WINDOWINFO); + if (GetWindowInfo(hWnd, &wi)) + { + g_GlobalPosition.x = wi.rcWindow.left; + g_GlobalPosition.y = wi.rcWindow.top; + } +} + +void SetToGlobalPosition(HWND hWnd) +{ + WINDOWINFO wi; + + wi.cbSize = sizeof(WINDOWINFO); + if (GetWindowInfo(hWnd, &wi)) + { + MoveWindow(hWnd, + g_GlobalPosition.x, + g_GlobalPosition.y, + wi.rcWindow.right - wi.rcWindow.left, + wi.rcWindow.bottom - wi.rcWindow.top, + TRUE); + } +} LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { @@ -12,6 +41,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar { case WMU_INIT_INSTALLER: { + UpdateGlobalPosition(hWnd); while (next_dialog != NULL) { next_dialog = (NEXT_DIALOG)next_dialog(hWnd); diff --git a/tools/installer/InstallerMain.h b/tools/installer/InstallerMain.h index 0fcf359c..e98f316d 100644 --- a/tools/installer/InstallerMain.h +++ b/tools/installer/InstallerMain.h @@ -4,6 +4,9 @@ #include "platform_headers.h" #include "Resource.h" +void UpdateGlobalPosition(HWND hWnd); +void SetToGlobalPosition(HWND hWnd); + typedef void *(*NEXT_DIALOG)(HWND); extern HINSTANCE g_hInstance; diff --git a/tools/installer/InstallerUtil.cpp b/tools/installer/InstallerUtil.cpp index 7a796384..64ebca83 100644 --- a/tools/installer/InstallerUtil.cpp +++ b/tools/installer/InstallerUtil.cpp @@ -175,13 +175,13 @@ const TCHAR *GetFileFromPath(const TCHAR *path) { size_t len = _tcslen(path); - for (size_t i = 0; - i >= 0 && i < len - 1; + for (size_t i = len - 1; + i >= 0 && i < len; i--) { if (path[i] == '\\' || path[i] == '/') { - return &path[i]; + return &path[i+1]; } } @@ -223,9 +223,90 @@ INT_PTR AskToExit(HWND hWnd) if (val == 0 || val == IDYES) { + UpdateGlobalPosition(hWnd); EndDialog(hWnd, NULL); return (INT_PTR)TRUE; } return (INT_PTR)FALSE; } + +size_t UTIL_GetFileSize(const TCHAR *file_path) +{ + HANDLE hFile; + + if ((hFile = CreateFile(file_path, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL)) + != INVALID_HANDLE_VALUE) + { + LARGE_INTEGER size; + + if (GetFileSizeEx(hFile, &size)) + { + CloseHandle(hFile); + return (size_t)size.QuadPart; + } + + CloseHandle(hFile); + } + + return 0; +} + +#if 0 +size_t UTIL_GetFolderSize(const TCHAR *basepath) +{ + HANDLE hFind; + WIN32_FIND_DATA fd; + TCHAR search_path[MAX_PATH]; + size_t total = 0; + + UTIL_PathFormat(search_path, + sizeof(search_path) / sizeof(TCHAR), + _T("%s\\*.*"), + basepath); + + if ((hFind = FindFirstFile(search_path, &fd)) == INVALID_HANDLE_VALUE) + { + return 0; + } + + do + { + if (tstrcasecmp(fd.cFileName, _T(".")) == 0 + || tstrcasecmp(fd.cFileName, _T("..")) == 0) + { + continue; + } + + if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) + { + UTIL_PathFormat(search_path, + sizeof(search_path) / sizeof(TCHAR), + _T("%s\\%s"), + basepath, + fd.cFileName); + total += UTIL_GetFolderSize(search_path); + } + else + { + UTIL_PathFormat(search_path, + sizeof(search_path) / sizeof(TCHAR), + _T("%s\\%s"), + basepath, + fd.cFileName); + + total += UTIL_GetFileSize(search_path); + } + } while (FindNextFile(hFind, &fd)); + + FindClose(hFind); + + return total; +} +#endif diff --git a/tools/installer/InstallerUtil.h b/tools/installer/InstallerUtil.h index a9d0c12c..19daa6cd 100644 --- a/tools/installer/InstallerUtil.h +++ b/tools/installer/InstallerUtil.h @@ -12,6 +12,8 @@ int BreakStringA(const char *str, char *out, size_t maxchars); size_t AnsiToUnicode(const char *str, wchar_t *buffer, size_t maxchars); const TCHAR *GetFileFromPath(const TCHAR *path); void GenerateErrorMessage(DWORD err, TCHAR *buffer, size_t maxchars); +size_t UTIL_GetFileSize(const TCHAR *file_path); +size_t UTIL_GetFolderSize(const TCHAR *basepath); INT_PTR AskToExit(HWND hWnd); diff --git a/tools/installer/LocalCopyMethod.cpp b/tools/installer/LocalCopyMethod.cpp index a6a72ad4..9ccc2391 100644 --- a/tools/installer/LocalCopyMethod.cpp +++ b/tools/installer/LocalCopyMethod.cpp @@ -15,9 +15,8 @@ DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize, { ICopyProgress *progress = (ICopyProgress *)lpData; - float percent = (float)(TotalBytesTransferred.QuadPart) / (float)(TotalFileSize.QuadPart); - - progress->UpdateProgress(percent); + progress->UpdateProgress((size_t)TotalBytesTransferred.QuadPart, + (size_t)TotalFileSize.QuadPart); return PROGRESS_CONTINUE; } @@ -55,7 +54,7 @@ bool LocalCopyMethod::CreateFolder(const TCHAR *name, TCHAR *buffer, size_t maxc m_CurrentPath, name); - if (CreateDirectory(name, NULL)) + if (CreateDirectory(path, NULL)) { return true; } @@ -111,6 +110,11 @@ bool LocalCopyMethod::SendFile(const TCHAR *path, TCHAR *buffer, size_t maxchars m_bCancelStatus = FALSE; + if (m_pProgress != NULL) + { + m_pProgress->StartingNewFile(filename); + } + if (CopyFileEx(path, new_path, m_pProgress ? CopyProgressRoutine : NULL, @@ -126,6 +130,11 @@ bool LocalCopyMethod::SendFile(const TCHAR *path, TCHAR *buffer, size_t maxchars return false; } + if (m_pProgress != NULL) + { + m_pProgress->FileDone(UTIL_GetFileSize(path)); + } + return true; } diff --git a/tools/installer/PerformInstall.cpp b/tools/installer/PerformInstall.cpp index 78e70d67..1b2e54ef 100644 --- a/tools/installer/PerformInstall.cpp +++ b/tools/installer/PerformInstall.cpp @@ -1,125 +1,151 @@ #include "InstallerMain.h" #include "InstallerUtil.h" #include "PerformInstall.h" +#include "CCriticalSection.h" -struct folder_t -{ - TCHAR path[MAX_PATH]; -}; +#define WMU_INSTALLER_DONE WM_USER+2 +#define PBAR_RANGE_HIGH 100 +#define PBAR_RANGE_LOW 0 ICopyMethod *g_pCopyMethod = NULL; -bool do_not_copy_binaries = false; -TCHAR source_path[MAX_PATH]; +HANDLE g_hCopyThread = NULL; +copy_thread_args_t g_thread_args = {NULL, NULL, NULL, false, false}; +CCriticalSection g_update_window; + +class TrackProgress : public ICopyProgress +{ +public: + void Initialize(HWND hTextBar, HWND hCurBar, HWND hTotalBar, size_t total_size) + { + m_hTextBar = hTextBar; + m_hCurBar = hCurBar; + m_hTotalBar = hTotalBar; + m_TotalSize = total_size; + m_TotalDone = 0; + RedrawProgressBars(0.0, 0.0); + } + void Finished() + { + RedrawProgressBars(100.0, 100.0); + } +public: + void StartingNewFile(const TCHAR *filename) + { + TCHAR buffer[255]; + + if (g_update_window.TryEnter()) + { + UTIL_Format(buffer, sizeof(buffer) / sizeof(TCHAR), _T("Copying: %s"), filename); + SendMessage(m_hTextBar, WM_SETTEXT, 0, (LPARAM)buffer); + UpdateWindow(m_hTextBar); + g_update_window.Leave(); + } + } + void UpdateProgress(size_t bytes, size_t total_bytes) + { + float fCur = (float)bytes / (float)total_bytes; + float fTotal = ((float)m_TotalDone + (float)bytes) / (float)m_TotalSize; + RedrawProgressBars(fCur, fTotal); + } + void FileDone(size_t total_size) + { + m_TotalDone += total_size; + RedrawProgressBars(0.0, (float)m_TotalDone / (float)m_TotalSize); + } +private: + void RedrawProgressBar(HWND hBar, float fPerc) + { + /* Get a percentage point in the range */ + float fPointInRange = (float)(PBAR_RANGE_HIGH - PBAR_RANGE_LOW) * fPerc; + int iPointInRange = (int)fPointInRange; + + /* Scale it */ + iPointInRange += PBAR_RANGE_LOW; + + if (g_update_window.TryEnter()) + { + SendMessage(hBar, + PBM_SETPOS, + iPointInRange, + 0); + g_update_window.Leave(); + } + } + void RedrawProgressBars(float fCurrent, float fTotal) + { + RedrawProgressBar(m_hCurBar, fCurrent); + RedrawProgressBar(m_hTotalBar, fTotal); + } +private: + size_t m_TotalSize; + size_t m_TotalDone; + HWND m_hTextBar; + HWND m_hCurBar; + HWND m_hTotalBar; +} s_ProgressTracker; + +void CancelPerformInstall() +{ + delete g_thread_args.pFileList; + g_thread_args.pFileList = NULL; +} void SetInstallMethod(ICopyMethod *pCopyMethod) { g_pCopyMethod = pCopyMethod; } -bool CopyStructureRecursively(const TCHAR *basepath, +bool CopyStructureRecursively(ICopyMethod *pCopyMethod, + CFileList *pFileList, + const TCHAR *basepath, const TCHAR *local_path, TCHAR *errbuf, size_t maxchars) { - HANDLE hFind; - WIN32_FIND_DATA fd; - TCHAR search_path[MAX_PATH]; - folder_t *folder_list = NULL; - unsigned int folder_count = 0; + TCHAR file_path[MAX_PATH]; + const TCHAR *file; + CFileList *pSubList; - if (local_path == NULL) + if (!pCopyMethod->SetCurrentFolder(local_path, errbuf, maxchars)) { - UTIL_PathFormat(search_path, - sizeof(search_path) / sizeof(TCHAR), - _T("%s\\*.*"), - basepath); - } - else - { - UTIL_PathFormat(search_path, - sizeof(search_path) / sizeof(TCHAR), - _T("%s\\%s\\*.*"), - basepath, - local_path); - } - - if (!g_pCopyMethod->SetCurrentFolder(local_path, errbuf, maxchars)) - { - /* :TODO: set fail state */ return false; } - if ((hFind = FindFirstFile(search_path, &fd)) == INVALID_HANDLE_VALUE) + /* Copy files */ + while ((file = pFileList->PeekCurrentFile()) != NULL) { - /* :TODO: set a fail state */ - return false; - } - - do - { - if (tstrcasecmp(fd.cFileName, _T(".")) == 0 - || tstrcasecmp(fd.cFileName, _T("..")) == 0) + if (local_path == NULL) { - continue; - } - - if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) - { - /* We cache the folder list so we don't have to keep changing folders back and forth, - * which could be annoying on a slow copy connection. - */ - if (folder_list == NULL) - { - folder_list = (folder_t *)malloc(sizeof(folder_t) * (folder_count + 1)); - } - else - { - folder_list = (folder_t *)realloc(folder_list, sizeof(folder_t) * (folder_count + 1)); - } - - UTIL_Format(folder_list[folder_count].path, MAX_PATH, _T("%s"), fd.cFileName); - folder_count++; + UTIL_PathFormat(file_path, + sizeof(file_path) / sizeof(TCHAR), + _T("%s\\%s"), + basepath, + file); } else { - TCHAR file_path[MAX_PATH]; - - if (local_path == NULL) - { - UTIL_PathFormat(file_path, - sizeof(file_path), - _T("%s\\%s"), - basepath, - fd.cFileName); - } - else - { - UTIL_PathFormat(file_path, - sizeof(file_path), - _T("%s\\%s\\%s"), - basepath, - local_path, - fd.cFileName); - } - - if (!g_pCopyMethod->SendFile(file_path, errbuf, maxchars)) - { - FindClose(hFind); - free(folder_list); - return false; - } + UTIL_PathFormat(file_path, + sizeof(file_path) / sizeof(TCHAR), + _T("%s\\%s\\%s"), + basepath, + local_path, + file); } - } while (FindNextFile(hFind, &fd)); - FindClose(hFind); + if (!pCopyMethod->SendFile(file_path, errbuf, maxchars)) + { + return false; + } + + pFileList->PopCurrentFile(); + } /* Now copy folders */ - for (unsigned int i = 0; i < folder_count; i++) + while ((pSubList = pFileList->PeekCurrentFolder()) != NULL) { /* Try creating the folder */ - if (!g_pCopyMethod->CreateFolder(folder_list[i].path, errbuf, maxchars)) + if (!pCopyMethod->CreateFolder(pSubList->GetFolderName(), errbuf, maxchars)) { - free(folder_list); return false; } @@ -129,7 +155,7 @@ bool CopyStructureRecursively(const TCHAR *basepath, UTIL_PathFormat(new_local_path, sizeof(new_local_path) / sizeof(TCHAR), _T("%s"), - folder_list[i].path); + pSubList->GetFolderName()); } else { @@ -137,21 +163,107 @@ bool CopyStructureRecursively(const TCHAR *basepath, sizeof(new_local_path) / sizeof(TCHAR), _T("%s\\%s"), local_path, - folder_list[i].path); + pSubList->GetFolderName()); } - if (!CopyStructureRecursively(basepath, new_local_path, errbuf, maxchars)) + if (!CopyStructureRecursively(pCopyMethod, + pSubList, + basepath, + new_local_path, + errbuf, + maxchars)) + { + return false; + } + + pFileList->PopCurrentFolder(); + + /* Set the current folder again for the next operation */ + if (!pCopyMethod->SetCurrentFolder(local_path, errbuf, maxchars)) { - free(folder_list); return false; } } - free(folder_list); - return true; } +DWORD WINAPI T_CopyFiles(LPVOID arg) +{ + bool result = + CopyStructureRecursively(g_thread_args.pCopyMethod, + g_thread_args.pFileList, + g_thread_args.basepath, + NULL, + g_thread_args.error, + sizeof(g_thread_args.error) / sizeof(TCHAR)); + + PostMessage(g_thread_args.hWnd, WMU_INSTALLER_DONE, result ? TRUE : FALSE, 0); + + return 0; +} + +bool StartFileCopy(HWND hWnd) +{ + g_thread_args.m_bWasCancelled = false; + g_thread_args.hWnd = hWnd; + if ((g_hCopyThread = CreateThread(NULL, + 0, + T_CopyFiles, + NULL, + 0, + NULL)) + == NULL) + { + MessageBox( + hWnd, + _T("Could not initialize copy thread."), + _T("SourceMod Installer"), + MB_OK|MB_ICONERROR); + return false; + } + return true; +} + +void StopFileCopy() +{ + g_thread_args.m_bWasCancelled = true; + g_pCopyMethod->CancelCurrentCopy(); + + if (g_hCopyThread != NULL) + { + g_update_window.Enter(); + WaitForSingleObject(g_hCopyThread, INFINITE); + g_update_window.Leave(); + CloseHandle(g_hCopyThread); + g_hCopyThread = NULL; + } +} + +bool RequestCancelInstall(HWND hWnd) +{ + StopFileCopy(); + + int val = MessageBox( + hWnd, + _T("Are you sure you want to cancel the install?"), + _T("SourceMod Installer"), + MB_YESNO|MB_ICONQUESTION); + + if (val == IDYES) + { + return true; + } + + if (g_thread_args.pFileList == NULL) + { + return false; + } + + /* Start the thread, note our return value is opposite */ + return !StartFileCopy(hWnd); +} + bool StartInstallProcess(HWND hWnd) { if (g_pCopyMethod->CheckForExistingInstall()) @@ -164,14 +276,13 @@ bool StartInstallProcess(HWND hWnd) if (val == 0 || val == IDYES) { - do_not_copy_binaries = true; } else { - do_not_copy_binaries = false; } } +#if 0 TCHAR cur_path[MAX_PATH]; if (_tgetcwd(cur_path, sizeof(cur_path)) == NULL) { @@ -182,13 +293,20 @@ bool StartInstallProcess(HWND hWnd) MB_OK|MB_ICONERROR); return false; } +#endif +#if 0 UTIL_PathFormat(source_path, sizeof(source_path) / sizeof(TCHAR), _T("%s\\files"), cur_path); +#else + UTIL_PathFormat(g_thread_args.basepath, + sizeof(g_thread_args.basepath) / sizeof(TCHAR), + _T("C:\\real\\done\\base")); +#endif - if (GetFileAttributes(source_path) == INVALID_FILE_ATTRIBUTES) + if (GetFileAttributes(g_thread_args.basepath) == INVALID_FILE_ATTRIBUTES) { MessageBox( hWnd, @@ -198,9 +316,18 @@ bool StartInstallProcess(HWND hWnd) return false; } + delete g_thread_args.pFileList; + g_thread_args.pFileList = CFileList::BuildFileList(_T(""), g_thread_args.basepath); + s_ProgressTracker.Initialize( + GetDlgItem(hWnd, IDC_PROGRESS_CURCOPY), + GetDlgItem(hWnd, IDC_PROGRESS_CURRENT), + GetDlgItem(hWnd, IDC_PROGRESS_TOTAL), + (size_t)g_thread_args.pFileList->GetRecursiveSize()); + g_pCopyMethod->TrackProgress(&s_ProgressTracker); + g_thread_args.pCopyMethod = g_pCopyMethod; - return true; + return StartFileCopy(hWnd); } INT_PTR CALLBACK PerformInstallHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) @@ -209,6 +336,7 @@ INT_PTR CALLBACK PerformInstallHandler(HWND hDlg, UINT message, WPARAM wParam, L { case WM_INITDIALOG: { + SetToGlobalPosition(hDlg); return (INT_PTR)TRUE; } case WM_COMMAND: @@ -216,10 +344,61 @@ INT_PTR CALLBACK PerformInstallHandler(HWND hDlg, UINT message, WPARAM wParam, L if (LOWORD(wParam) == ID_INSTALL_CANCEL || LOWORD(wParam) == ID_CLOSE) { - /* :TODO: enhance */ + if (RequestCancelInstall(hDlg)) + { + CancelPerformInstall(); + UpdateGlobalPosition(hDlg); + EndDialog(hDlg, NULL); + } + return (INT_PTR)TRUE; + } + else if (LOWORD(wParam) == ID_INSTALL_START) + { + HWND hButton = GetDlgItem(hDlg, ID_INSTALL_START); + EnableWindow(hButton, FALSE); + StartInstallProcess(hDlg); + } + break; + } + case WMU_INSTALLER_DONE: + { + if (wParam == TRUE) + { + s_ProgressTracker.Finished(); + MessageBox(hDlg, + _T("SourceMod was successfully installed! Please visit http://www.sourcemod.net/ for documentation."), + _T("SourceMod Installer"), + MB_OK); + CancelPerformInstall(); + UpdateGlobalPosition(hDlg); EndDialog(hDlg, NULL); return (INT_PTR)TRUE; } + else if (!g_thread_args.m_bWasCancelled) + { + TCHAR buffer[500]; + + UTIL_Format(buffer, + sizeof(buffer) / sizeof(TCHAR), + _T("Encountered error: %s"), + g_thread_args.error); + int res = MessageBox(hDlg, + buffer, + _T("SourceMod Installer"), + MB_ICONERROR|MB_RETRYCANCEL); + + if (res == IDRETRY) + { + StartFileCopy(hDlg); + } + else + { + CancelPerformInstall(); + UpdateGlobalPosition(hDlg); + EndDialog(hDlg, NULL); + return (INT_PTR)TRUE; + } + } break; } } diff --git a/tools/installer/PerformInstall.h b/tools/installer/PerformInstall.h index 82870f94..63081dee 100644 --- a/tools/installer/PerformInstall.h +++ b/tools/installer/PerformInstall.h @@ -3,6 +3,18 @@ #include "InstallerMain.h" #include "ICopyMethod.h" +#include "CFileList.h" + +struct copy_thread_args_t +{ + ICopyMethod *pCopyMethod; + CFileList *pFileList; + HWND hWnd; + bool m_bIsUpgrade; + bool m_bWasCancelled; + TCHAR basepath[MAX_PATH]; + TCHAR error[255]; +}; void *DisplayPerformInstall(HWND hWnd); void SetInstallMethod(ICopyMethod *pCopyMethod); diff --git a/tools/installer/Resource.h b/tools/installer/Resource.h index ce94d3be..f47b0ac0 100644 --- a/tools/installer/Resource.h +++ b/tools/installer/Resource.h @@ -30,7 +30,9 @@ #define IDC_METHOD_LISTEN_SERVER 1008 #define IDC_SELGAME_LIST 1008 #define IDC_METHOD_ALONE_SERVER 1009 +#define IDC_PROGRESS_CURRENT 1009 #define IDC_METHOD_CUSTOM_FOLDER 1010 +#define IDC_PROGRESS_TOTAL 1010 #define IDC_METHOD_UPLOAD_FTP 1011 #define ID_SELGAME_NEXT 1012 #define ID_SELGAME_EXIT 1013 @@ -38,10 +40,12 @@ #define IDC_SELGAME_TEXT 1015 #define IDC_SELGAME_PANEL 1016 #define IDD_SELECT_GAME 1017 -#define IDD_PERFORM_INSTALL 1018 -#define ID_INSTALL_CANCEL 1019 -#define IDC_INSTALL_PANEL 1020 -#define IDC_INSTALL_TEXT 1021 +#define IDD_PERFORM_INSTALL 1018 +#define ID_INSTALL_CANCEL 1019 +#define IDC_INSTALL_PANEL 1020 +#define IDC_INSTALL_TEXT 1021 +#define ID_INSTALL_START 1022 +#define IDC_PROGRESS_CURCOPY 1023 #define IDC_STATIC -1 #define IDC_WELCOME_TEXT -1 #define IDC_METHOD_PANEL -1 @@ -53,7 +57,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 133 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1009 +#define _APS_NEXT_CONTROL_VALUE 1012 #define _APS_NEXT_SYMED_VALUE 110 #endif #endif diff --git a/tools/installer/SelectGame.cpp b/tools/installer/SelectGame.cpp index 87cd8c8a..cd983f04 100644 --- a/tools/installer/SelectGame.cpp +++ b/tools/installer/SelectGame.cpp @@ -51,6 +51,8 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA } UpdateWindow(lbox); + + SetToGlobalPosition(hDlg); return (INT_PTR)TRUE; } @@ -63,6 +65,7 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA } else if (LOWORD(wParam) == ID_SELGAME_BACK) { + UpdateGlobalPosition(hDlg); EndDialog(hDlg, (INT_PTR)DisplayChooseMethod); return (INT_PTR)TRUE; } @@ -101,6 +104,7 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA g_LocalCopier.SetOutputPath(game_sel_list[selected_game_index]->mod_path); SetInstallMethod(&g_LocalCopier); + UpdateGlobalPosition(hDlg); EndDialog(hDlg, (INT_PTR)DisplayPerformInstall); return (INT_PTR)TRUE; diff --git a/tools/installer/Welcome.cpp b/tools/installer/Welcome.cpp index a4171edb..741091fc 100644 --- a/tools/installer/Welcome.cpp +++ b/tools/installer/Welcome.cpp @@ -8,6 +8,7 @@ INT_PTR CALLBACK WelcomeHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM l { case WM_INITDIALOG: { + SetToGlobalPosition(hDlg); return (INT_PTR)TRUE; } case WM_COMMAND: @@ -15,11 +16,13 @@ INT_PTR CALLBACK WelcomeHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM l if (LOWORD(wParam) == ID_WELCOME_EXIT || LOWORD(wParam) == ID_CLOSE) { + UpdateGlobalPosition(hDlg); EndDialog(hDlg, NULL); return (INT_PTR)TRUE; } else if (LOWORD(wParam) == ID_WELCOME_NEXT) { + UpdateGlobalPosition(hDlg); EndDialog(hDlg, (INT_PTR)DisplayChooseMethod); return (INT_PTR)TRUE; } diff --git a/tools/installer/installer.rc b/tools/installer/installer.rc index 12f36f3f..be5d9eb8 100644 --- a/tools/installer/installer.rc +++ b/tools/installer/installer.rc @@ -67,19 +67,21 @@ END // Dialog // -IDD_WELCOME DIALOGEX 0, 0, 230, 66 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_WELCOME DIALOGEX 0, 0, 244, 74 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "&Next",ID_WELCOME_NEXT,177,50,50,14 - GROUPBOX "",IDC_WELCOME_PANEL,2,3,225,44 - LTEXT "Welcome to the SourceMod Installer. This tool can be used to install SourcecMod to a local server/game installation, or upload SourceMod to a server via FTP.",IDC_WELCOME_TEXT,9,11,209,24 - DEFPUSHBUTTON "E&xit",ID_WELCOME_EXIT,2,50,50,14 + DEFPUSHBUTTON "&Next",ID_WELCOME_NEXT,191,58,50,14 + GROUPBOX "",IDC_WELCOME_PANEL,2,3,239,51 + LTEXT "Welcome to the SourceMod Installer. This tool can be used to install SourcecMod to a local server/game installation, or upload SourceMod to a server via FTP.",IDC_WELCOME_TEXT,9,11,225,42 + DEFPUSHBUTTON "E&xit",ID_WELCOME_EXIT,2,58,50,14 END IDD_CHOOSE_METHOD DIALOGEX 0, 0, 244, 130 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN @@ -87,7 +89,7 @@ BEGIN PUSHBUTTON "E&xit",ID_METHOD_EXIT,2,113,50,14 GROUPBOX "",IDC_METHOD_PANEL,2,3,239,108 DEFPUSHBUTTON "&Back",ID_METHOD_BACK,136,113,50,14 - GROUPBOX "",IDC_METHOD_PANEL,17,30,154,69 + GROUPBOX "",IDC_METHOD_PANEL,17,30,181,69 LTEXT "Please select an installation method:",IDC_METHOD_TEXT,9,15,122,12 CONTROL "Steam Dedicated Server",IDC_METHOD_DED_SERVER,"Button",BS_AUTORADIOBUTTON,21,35,98,15 CONTROL "Steam Listen Server",IDC_METHOD_LISTEN_SERVER,"Button",BS_AUTORADIOBUTTON,21,46,93,16 @@ -98,7 +100,8 @@ BEGIN END IDD_SELECT_GAME DIALOGEX 0, 0, 244, 130 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN @@ -107,17 +110,22 @@ BEGIN GROUPBOX "",IDC_SELGAME_PANEL,2,3,239,108 DEFPUSHBUTTON "&Back",ID_SELGAME_BACK,136,113,50,14 LTEXT "Please select a game:",IDC_SELGAME_TEXT,9,15,122,12 - LISTBOX IDC_SELGAME_LIST,17,30,177,69,LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LISTBOX IDC_SELGAME_LIST,17,30,199,69,LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_PERFORM_INSTALL DIALOGEX 0, 0, 244, 130 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_PERFORM_INSTALL DIALOGEX 0, 0, 243, 116 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - PUSHBUTTON "&Cancel",ID_INSTALL_CANCEL,2,113,50,14 - GROUPBOX "",IDC_INSTALL_PANEL,2,3,239,108 - LTEXT "Please wait while SourceMod is installed...",IDC_INSTALL_TEXT,9,15,122,12 + PUSHBUTTON "&Cancel",ID_INSTALL_CANCEL,2,99,50,14 + GROUPBOX "",IDC_INSTALL_PANEL,2,3,239,93 + LTEXT "Click ""Install"" to begin copying the SourceMod files.",IDC_INSTALL_TEXT,9,15,175,13 + CONTROL "",IDC_PROGRESS_CURRENT,"msctls_progress32",WS_BORDER | 0x1,5,50,232,17 + CONTROL "",IDC_PROGRESS_TOTAL,"msctls_progress32",WS_BORDER | 0x1,5,73,232,17 + PUSHBUTTON "&Install",ID_INSTALL_START,191,99,50,14 + LTEXT "",IDC_PROGRESS_CURCOPY,9,34,175,11 END @@ -160,9 +168,9 @@ BEGIN IDD_WELCOME, DIALOG BEGIN LEFTMARGIN, 2 - RIGHTMARGIN, 227 + RIGHTMARGIN, 241 TOPMARGIN, 3 - BOTTOMMARGIN, 64 + BOTTOMMARGIN, 72 END IDD_CHOOSE_METHOD, DIALOG @@ -172,6 +180,11 @@ BEGIN TOPMARGIN, 3 BOTTOMMARGIN, 127 END + + IDD_PERFORM_INSTALL, DIALOG + BEGIN + BOTTOMMARGIN, 113 + END END #endif // APSTUDIO_INVOKED diff --git a/tools/installer/installer.vcproj b/tools/installer/installer.vcproj index 818e9c1c..2de0a1b2 100644 --- a/tools/installer/installer.vcproj +++ b/tools/installer/installer.vcproj @@ -175,6 +175,10 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + <File + RelativePath=".\CFileList.cpp" + > + </File> <File RelativePath=".\GamesList.cpp" > @@ -193,6 +197,14 @@ Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > + <File + RelativePath=".\CCriticalSection.h" + > + </File> + <File + RelativePath=".\CFileList.h" + > + </File> <File RelativePath=".\GamesList.h" > From 8d6139ad5c7704bd9e5a6c8788cd26678e42a77b Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 18:03:59 +0000 Subject: [PATCH 046/263] new game list code, detects steam accounts and dynamically shows you which games are under each one --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401729 --- tools/installer/ChooseMethod.cpp | 29 +- tools/installer/ChooseMethod.h | 3 + tools/installer/GamesList.cpp | 626 +++++++++++++++++-------------- tools/installer/GamesList.h | 47 ++- tools/installer/Resource.h | 4 +- tools/installer/SelectGame.cpp | 97 +++-- tools/installer/installer.rc | 15 +- 7 files changed, 493 insertions(+), 328 deletions(-) diff --git a/tools/installer/ChooseMethod.cpp b/tools/installer/ChooseMethod.cpp index 11199793..a3790f52 100644 --- a/tools/installer/ChooseMethod.cpp +++ b/tools/installer/ChooseMethod.cpp @@ -5,6 +5,7 @@ #include "GamesList.h" #include "SelectGame.h" +game_group_t *g_game_group = NULL; unsigned int method_chosen = 0; TCHAR method_path[MAX_PATH]; @@ -160,12 +161,32 @@ INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPA if (game_type != 0) { - int reason; + g_game_group = NULL; - if ((reason = FindGames(game_type)) < 1) + BuildGameDB(); + + if (game_type == GAMES_DEDICATED) { - DisplayBadGamesDialog(hDlg, game_type, reason); - break; + g_game_group = &g_games.dedicated; + } + else if (game_type == GAMES_LISTEN) + { + g_game_group = &g_games.listen; + } + else if (game_type == GAMES_STANDALONE) + { + g_game_group = &g_games.standalone; + } + + if (g_game_group == NULL) + { + return (INT_PTR)TRUE; + } + + if (g_game_group->list_count == 0) + { + DisplayBadGamesDialog(hDlg, g_game_group->error_code); + return (INT_PTR)TRUE; } /* If we got a valid games list, we can display the next diff --git a/tools/installer/ChooseMethod.h b/tools/installer/ChooseMethod.h index 21459a8f..4b1f2b21 100644 --- a/tools/installer/ChooseMethod.h +++ b/tools/installer/ChooseMethod.h @@ -2,7 +2,10 @@ #define _INCLUDE_INSTALLER_CHOOSE_METHOD_H_ #include "InstallerMain.h" +#include "GamesList.h" void *DisplayChooseMethod(HWND hWnd); +extern game_group_t *g_game_group; + #endif //_INCLUDE_INSTALLER_CHOOSE_METHOD_H_ diff --git a/tools/installer/GamesList.cpp b/tools/installer/GamesList.cpp index 2d93c697..340b8fc3 100644 --- a/tools/installer/GamesList.cpp +++ b/tools/installer/GamesList.cpp @@ -3,8 +3,30 @@ #include "InstallerMain.h" #include <stdio.h> -mod_info_t *g_mod_list = NULL; -unsigned int g_mod_count = 0; +game_database_t g_games = +{ + NULL, 0, + {NULL, 0, GAME_LIST_NO_GAMES}, + {NULL, 0, GAME_LIST_NO_GAMES}, + {NULL, 0, GAME_LIST_NO_GAMES} +}; + +valve_game_t valve_game_list[] = +{ + {_T("counter-strike source"), _T("cstrike"), SOURCE_ENGINE_2004}, + {_T("day of defeat source"), _T("dod"), SOURCE_ENGINE_2004}, + {_T("half-life 2 deathmatch"), _T("hl2mp"), SOURCE_ENGINE_2004}, + {_T("half-life deathmatch source"), _T("hl1mp"), SOURCE_ENGINE_2004}, + {_T("team fortress 2"), _T("tf"), SOURCE_ENGINE_2007}, + {NULL, NULL, 0}, +}; + +valve_game_t valve_server_list[] = +{ + {_T("source dedicated server"), NULL, SOURCE_ENGINE_2004}, + {_T("source 2007 dedicated server"), NULL, SOURCE_ENGINE_2007}, + {NULL, NULL, 0}, +}; int IsValidFolder(const TCHAR *path) { @@ -64,30 +86,80 @@ void DisplayBadFolderDialog(HWND hDlg, int reason) MB_OK|MB_ICONWARNING); } -void AddModToList(mod_info_t **mod_list, - unsigned int *total_mods, - const mod_info_t *mod_info) +game_list_t *MakeGameList(const TCHAR *name) { - mod_info_t *mods = *mod_list; - unsigned int total = *total_mods; + game_list_t *gl = (game_list_t *)malloc(sizeof(game_list_t)); - if (mods == NULL) + UTIL_Format(gl->root_name, + sizeof(gl->root_name) / sizeof(TCHAR), + _T("%s"), + name); + gl->game_count = 0; + gl->games = NULL; + + return gl; +} + +void AttachGameListToGroup(game_group_t *group, game_list_t *gl) +{ + if (group->lists == NULL) { - mods = (mod_info_t *)malloc(sizeof(mod_info_t)); + group->lists = (game_list_t **)malloc(sizeof(game_list_t *)); } else { - mods = (mod_info_t *)realloc(mods, sizeof(mod_info_t) * (total + 1)); + group->lists = (game_list_t **)realloc(group->lists, + sizeof(game_list_t *) * (group->list_count + 1)); } - memcpy(&mods[total], mod_info, sizeof(mod_info_t)); - total++; - - *mod_list = mods; - *total_mods = total; + group->lists[group->list_count] = gl; + group->list_count++; } -void TryToAddMod(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigned *total_mods) +void AttachModToGameList(game_list_t *gl, unsigned int mod_id) +{ + if (gl->games == NULL) + { + gl->games = (unsigned int *)malloc(sizeof(unsigned int)); + } + else + { + gl->games = (unsigned int *)realloc(gl->games, + sizeof(unsigned int) * (gl->game_count + 1)); + } + + gl->games[gl->game_count] = mod_id; + gl->game_count++; +} + +unsigned int AddModToList(game_database_t *db, const game_info_t *mod_info) +{ + /* Check if a matching game already exists */ + for (unsigned int i = 0; i < db->game_count; i++) + { + if (tstrcasecmp(mod_info->game_path, db->game_list[i].game_path) == 0) + { + return i; + } + } + + if (db->game_list == NULL) + { + db->game_list = (game_info_t *)malloc(sizeof(game_info_t)); + } + else + { + db->game_list = (game_info_t *)realloc(db->game_list, + sizeof(game_info_t) * (db->game_count + 1)); + } + + memcpy(&db->game_list[db->game_count], mod_info, sizeof(game_info_t)); + db->game_count++; + + return db->game_count - 1; +} + +bool TryToAddMod(const TCHAR *path, int eng_type, game_database_t *db, unsigned int *id) { FILE *fp; TCHAR gameinfo_path[MAX_PATH]; @@ -99,7 +171,7 @@ void TryToAddMod(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigne if ((fp = _tfopen(gameinfo_path, _T("rt"))) == NULL) { - return; + return false; } int pos; @@ -117,23 +189,41 @@ void TryToAddMod(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigne } if (strcmp(key, "game") == 0) { - mod_info_t mod; + game_info_t mod; + unsigned int got_id; + AnsiToUnicode(value, mod.name, sizeof(mod.name)); - UTIL_Format(mod.mod_path, sizeof(mod.mod_path), _T("%s"), path); + UTIL_Format(mod.game_path, sizeof(mod.game_path), _T("%s"), path); mod.source_engine = eng_type; - AddModToList(mod_list, total_mods, &mod); + + got_id = AddModToList(db, &mod); + + if (id != NULL) + { + *id = got_id; + } + + fclose(fp); + + return true; } } fclose(fp); + + return false; } -void AddModsFromFolder(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigned int *total_mods) +void AddModsFromFolder(const TCHAR *path, + int eng_type, + game_database_t *db, + game_list_t *gl) { HANDLE hFind; WIN32_FIND_DATA fd; TCHAR temp_path[MAX_PATH]; TCHAR search_path[MAX_PATH]; + unsigned int mod_id; UTIL_Format(search_path, sizeof(search_path), @@ -163,30 +253,60 @@ void AddModsFromFolder(const TCHAR *path, int eng_type, mod_info_t **mod_list, u _T("%s\\%s"), path, fd.cFileName); - TryToAddMod(temp_path, eng_type, mod_list, total_mods); - + if (TryToAddMod(temp_path, eng_type, db, &mod_id)) + { + AttachModToGameList(gl, mod_id); + } } while (FindNextFile(hFind, &fd)); FindClose(hFind); } -void AddValveModsFromFolder(const TCHAR *path, - unsigned int game_type, - mod_info_t **mod_list, - unsigned int *total_mods) +void GetSteamGames(game_database_t *db) { + HKEY hkPath; + DWORD dwLen, dwType; HANDLE hFind; WIN32_FIND_DATA fd; TCHAR temp_path[MAX_PATH]; - TCHAR search_path[MAX_PATH]; + TCHAR steam_path[MAX_PATH]; + TCHAR steamapps_path[MAX_PATH]; - UTIL_PathFormat(search_path, - sizeof(search_path) / sizeof(TCHAR), - _T("%s\\*.*"), - path); - - if ((hFind = FindFirstFile(search_path, &fd)) == INVALID_HANDLE_VALUE) + if (RegOpenKeyEx(HKEY_CURRENT_USER, + _T("Software\\Valve\\Steam"), + 0, + KEY_READ, + &hkPath) != ERROR_SUCCESS) { + db->listen.error_code = GAME_LIST_CANT_READ; + db->dedicated.error_code = GAME_LIST_CANT_READ; + return; + } + + dwLen = sizeof(steam_path) / sizeof(TCHAR); + if (RegQueryValueEx(hkPath, + _T("SteamPath"), + NULL, + &dwType, + (LPBYTE)steam_path, + &dwLen) != ERROR_SUCCESS) + { + RegCloseKey(hkPath); + db->listen.error_code = GAME_LIST_CANT_READ; + db->dedicated.error_code = GAME_LIST_CANT_READ; + return; + } + + UTIL_PathFormat(steamapps_path, + sizeof(steamapps_path) / sizeof(TCHAR), + _T("%s\\steamapps\\*.*"), + steam_path); + + if ((hFind = FindFirstFile(steamapps_path, &fd)) == INVALID_HANDLE_VALUE) + { + RegCloseKey(hkPath); + db->listen.error_code = GAME_LIST_CANT_READ; + db->dedicated.error_code = GAME_LIST_CANT_READ; return; } @@ -203,263 +323,163 @@ void AddValveModsFromFolder(const TCHAR *path, continue; } - TCHAR *mod_folder = NULL; - int eng_type = SOURCE_ENGINE_UNKNOWN; + /* If we get a folder called "SourceMods," look for third party mods */ + if (tstrcasecmp(fd.cFileName, _T("SourceMods")) == 0) + { + game_list_t *gl = MakeGameList(_T("Third-Party Games")); - if (game_type == GAMES_LISTEN) - { - if (tstrcasecmp(fd.cFileName, _T( "counter-strike source")) == 0) - { - mod_folder = _T("cstrike"); - } - else if (tstrcasecmp(fd.cFileName, _T("day of defeat source")) == 0) - { - mod_folder = _T("dod"); - } - else if (tstrcasecmp(fd.cFileName, _T("half-life 2 deathmatch")) == 0) - { - mod_folder = _T("hl2mp"); - } - else if (tstrcasecmp(fd.cFileName, _T("half-life deathmatch source")) == 0) - { - mod_folder = _T("hl1mp"); - } - else if (tstrcasecmp(fd.cFileName, _T("team fortress 2")) == 0) - { - mod_folder = _T("tf"); - eng_type = SOURCE_ENGINE_2007; - } - } - else if (game_type == GAMES_DEDICATED) - { - if (tstrcasecmp(fd.cFileName, _T("source dedicated server")) == 0) - { - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\%s"), - path, - fd.cFileName); - AddModsFromFolder(temp_path, SOURCE_ENGINE_2004, mod_list, total_mods); - } - else if (tstrcasecmp(fd.cFileName, _T("source 2007 dedicated server")) == 0) - { - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\%s"), - path, - fd.cFileName); - AddModsFromFolder(temp_path, SOURCE_ENGINE_2007, mod_list, total_mods); - } - } - - if (mod_folder != NULL) - { UTIL_PathFormat(temp_path, sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\%s\\%s"), - path, - fd.cFileName, - mod_folder); - TryToAddMod(temp_path, eng_type, mod_list, total_mods); + _T("%s\\steamapps\\%s"), + steam_path, + fd.cFileName); + + AddModsFromFolder(temp_path, SOURCE_ENGINE_UNKNOWN, db, gl); + + if (gl->game_count) + { + AttachGameListToGroup(&db->listen, gl); + } + else + { + free(gl); + } + } + else + { + /* Look for listenserver games */ + game_list_t *gl = MakeGameList(fd.cFileName); + + for (unsigned int i = 0; valve_game_list[i].folder != NULL; i++) + { + unsigned int mod_id; + UTIL_PathFormat(temp_path, + sizeof(temp_path) / sizeof(TCHAR), + _T("%s\\steamapps\\%s\\%s\\%s"), + steam_path, + fd.cFileName, + valve_game_list[i].folder, + valve_game_list[i].subfolder); + if (TryToAddMod(temp_path, valve_game_list[i].eng_type, db, &mod_id)) + { + AttachModToGameList(gl, mod_id); + } + } + + if (gl->game_count) + { + AttachGameListToGroup(&db->listen, gl); + } + else + { + free(gl); + } + + /* Look for dedicated games */ + gl = MakeGameList(fd.cFileName); + + for (unsigned int i = 0; valve_server_list[i].folder != NULL; i++) + { + UTIL_PathFormat(temp_path, + sizeof(temp_path) / sizeof(TCHAR), + _T("%s\\steamapps\\%s\\%s"), + steam_path, + fd.cFileName, + valve_server_list[i].folder); + AddModsFromFolder(temp_path, valve_server_list[i].eng_type, db, gl); + } + + if (gl->game_count) + { + AttachGameListToGroup(&db->dedicated, gl); + } + else + { + free(gl); + } } } while (FindNextFile(hFind, &fd)); FindClose(hFind); + RegCloseKey(hkPath); } -int BuildGameList(unsigned int game_type, mod_info_t **mod_list) +void GetStandaloneGames(game_database_t *db) { - unsigned int total_mods = 0; - - if (game_type == GAMES_LISTEN - || game_type == GAMES_DEDICATED) - { - HKEY hkPath; - DWORD dwLen, dwType; - HANDLE hFind; - WIN32_FIND_DATA fd; - TCHAR temp_path[MAX_PATH]; - TCHAR steam_path[MAX_PATH]; - TCHAR steamapps_path[MAX_PATH]; - - if (RegOpenKeyEx(HKEY_CURRENT_USER, - _T("Software\\Valve\\Steam"), - 0, - KEY_READ, - &hkPath) != ERROR_SUCCESS) - { - DWORD err = GetLastError(); - return GAME_LIST_CANT_READ; - } - - dwLen = sizeof(steam_path) / sizeof(TCHAR); - if (RegQueryValueEx(hkPath, - _T("SteamPath"), - NULL, - &dwType, - (LPBYTE)steam_path, - &dwLen) != ERROR_SUCCESS) - { - RegCloseKey(hkPath); - return GAME_LIST_CANT_READ; - } - - UTIL_PathFormat(steamapps_path, - sizeof(steamapps_path) / sizeof(TCHAR), - _T("%s\\steamapps\\*.*"), - steam_path); - - if ((hFind = FindFirstFile(steamapps_path, &fd)) == INVALID_HANDLE_VALUE) - { - RegCloseKey(hkPath); - return GAME_LIST_CANT_READ; - } - - do - { - if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) - { - continue; - } - - if (tstrcasecmp(fd.cFileName, _T(".")) == 0 - || tstrcasecmp(fd.cFileName, _T("..")) == 0) - { - continue; - } - - /* If we get a folder called "SourceMods," look for third party mods */ - if (game_type == GAMES_LISTEN - && tstrcasecmp(fd.cFileName, _T("SourceMods")) == 0) - { - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\steamapps\\%s"), - steam_path, - fd.cFileName); - AddModsFromFolder(temp_path, SOURCE_ENGINE_UNKNOWN, mod_list, &total_mods); - } - else - { - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\steamapps\\%s"), - steam_path, - fd.cFileName); - AddValveModsFromFolder(temp_path, game_type, mod_list, &total_mods); - } - - } while (FindNextFile(hFind, &fd)); - - FindClose(hFind); - RegCloseKey(hkPath); - } - else if (game_type == GAMES_STANDALONE) - { - HKEY hkPath; - int eng_type = SOURCE_ENGINE_UNKNOWN; - DWORD dwLen, dwType, dwAttr; - TCHAR temp_path[MAX_PATH]; - TCHAR hlds_path[MAX_PATH]; - - if (RegOpenKeyEx(HKEY_CURRENT_USER, - _T("Software\\Valve\\HLServer"), - 0, - KEY_READ, - &hkPath) != ERROR_SUCCESS) - { - return GAME_LIST_CANT_READ; - } - - dwLen = sizeof(hlds_path) / sizeof(TCHAR); - if (RegQueryValueEx(hkPath, - _T("InstallPath"), - NULL, - &dwType, - (LPBYTE)hlds_path, - &dwLen) != ERROR_SUCCESS) - { - RegCloseKey(hkPath); - return GAME_LIST_CANT_READ; - } - - /* Make sure there is a "srcds.exe" file */ - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\srcds.exe"), - hlds_path); - dwAttr = GetFileAttributes(temp_path); - if (dwAttr == INVALID_FILE_ATTRIBUTES) - { - return GAME_LIST_HALFLIFE1; - } - - /* If there is an "orangebox" sub folder, we can make a better guess - * at the engine state. - */ - UTIL_PathFormat(temp_path, - sizeof(temp_path) / sizeof(TCHAR), - _T("%s\\orangebox"), - hlds_path); - dwAttr = GetFileAttributes(temp_path); - if (dwAttr != INVALID_FILE_ATTRIBUTES - && ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)) - { - eng_type = SOURCE_ENGINE_2004; - AddModsFromFolder(temp_path, SOURCE_ENGINE_2007, mod_list, &total_mods); - } - - /* Add everything from the server */ - AddModsFromFolder(hlds_path, eng_type, mod_list, &total_mods); - - RegCloseKey(hkPath); - } - - return (g_mod_list == NULL) ? GAME_LIST_NO_GAMES : (int)total_mods; -} - -void FreeGameList(mod_info_t *mod_list) -{ - free(mod_list); -} - -int _SortModList(const void *item1, const void *item2) -{ - const mod_info_t *mod1 = (const mod_info_t *)item1; - const mod_info_t *mod2 = (const mod_info_t *)item2; - - return tstrcasecmp(mod1->name, mod2->name); -} - -int FindGames(unsigned int game_type) -{ - int reason; - - ReleaseGamesList(); - - if ((reason = BuildGameList(game_type, &g_mod_list)) > 0) - { - g_mod_count = (unsigned)reason; - qsort(g_mod_list, g_mod_count, sizeof(mod_info_t), _SortModList); - } - - return reason; -} - -void ReleaseGamesList() -{ - if (g_mod_list == NULL) + HKEY hkPath; + DWORD dwLen, dwType, dwAttr; + TCHAR temp_path[MAX_PATH]; + TCHAR hlds_path[MAX_PATH]; + game_list_t *games_standalone; + + if (RegOpenKeyEx(HKEY_CURRENT_USER, + _T("Software\\Valve\\HLServer"), + 0, + KEY_READ, + &hkPath) != ERROR_SUCCESS) { + db->standalone.error_code = GAME_LIST_CANT_READ; return; } - free(g_mod_list); - g_mod_list = NULL; - g_mod_count = 0; + dwLen = sizeof(hlds_path) / sizeof(TCHAR); + if (RegQueryValueEx(hkPath, + _T("InstallPath"), + NULL, + &dwType, + (LPBYTE)hlds_path, + &dwLen) != ERROR_SUCCESS) + { + RegCloseKey(hkPath); + db->standalone.error_code = GAME_LIST_CANT_READ; + return; + } + + /* Make sure there is a "srcds.exe" file */ + UTIL_PathFormat(temp_path, + sizeof(temp_path) / sizeof(TCHAR), + _T("%s\\srcds.exe"), + hlds_path); + dwAttr = GetFileAttributes(temp_path); + if (dwAttr == INVALID_FILE_ATTRIBUTES) + { + db->standalone.error_code = GAME_LIST_HALFLIFE1; + return; + } + + games_standalone = MakeGameList(_T("Standalone")); + + /* If there is an "orangebox" sub folder, we can make a better guess + * at the engine state. + */ + UTIL_PathFormat(temp_path, + sizeof(temp_path) / sizeof(TCHAR), + _T("%s\\orangebox"), + hlds_path); + dwAttr = GetFileAttributes(temp_path); + if (dwAttr != INVALID_FILE_ATTRIBUTES + && ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)) + { + AddModsFromFolder(temp_path, SOURCE_ENGINE_2007, db, games_standalone); + } + + /* Add everything from the server */ + AddModsFromFolder(hlds_path, SOURCE_ENGINE_2004, db, games_standalone); + + if (games_standalone->game_count) + { + AttachGameListToGroup(&db->standalone, games_standalone); + } + else + { + free(games_standalone); + } + + RegCloseKey(hkPath); } -void DisplayBadGamesDialog(HWND hWnd, unsigned int game_type, int reason) +void DisplayBadGamesDialog(HWND hWnd, int reason) { TCHAR message[256]; UINT idc = 0; @@ -494,3 +514,61 @@ void DisplayBadGamesDialog(HWND hWnd, unsigned int game_type, int reason) _T("SourceMod Installer"), MB_OK|MB_ICONWARNING); } + +int _ModIdCompare(const void *item1, const void *item2) +{ + unsigned int mod_id1 = *(unsigned int *)item1; + unsigned int mod_id2 = *(unsigned int *)item2; + + return tstrcasecmp(g_games.game_list[mod_id1].name, g_games.game_list[mod_id2].name); +} + +int _GroupCompare(const void *item1, const void *item2) +{ + game_list_t *g1 = *(game_list_t **)item1; + game_list_t *g2 = *(game_list_t **)item2; + + return tstrcasecmp(g1->root_name, g2->root_name); +} + +void SortGameGroup(game_group_t *group) +{ + qsort(group->lists, group->list_count, sizeof(game_list_t *), _GroupCompare); + + for (unsigned int i = 0; i < group->list_count; i++) + { + qsort(group->lists[i]->games, + group->lists[i]->game_count, + sizeof(unsigned int), + _ModIdCompare); + } +} + +void BuildGameDB() +{ + ReleaseGameDB(); + GetStandaloneGames(&g_games); + GetSteamGames(&g_games); + SortGameGroup(&g_games.dedicated); + SortGameGroup(&g_games.listen); + SortGameGroup(&g_games.standalone); +} + +void ReleaseGameGroup(game_group_t *group) +{ + for (unsigned int i = 0; i < group->list_count; i++) + { + free(group->lists[i]->games); + free(group->lists[i]); + } + free(group->lists); +} + +void ReleaseGameDB() +{ + ReleaseGameGroup(&g_games.dedicated); + ReleaseGameGroup(&g_games.listen); + ReleaseGameGroup(&g_games.standalone); + free(g_games.game_list); + memset(&g_games, 0, sizeof(g_games)); +} diff --git a/tools/installer/GamesList.h b/tools/installer/GamesList.h index 5b26fadb..2242575a 100644 --- a/tools/installer/GamesList.h +++ b/tools/installer/GamesList.h @@ -19,21 +19,54 @@ #define SOURCE_ENGINE_2004 1 #define SOURCE_ENGINE_2007 2 -struct mod_info_t +struct valve_game_t +{ + const TCHAR *folder; + const TCHAR *subfolder; + int eng_type; +}; + +/* One game */ +struct game_info_t { TCHAR name[128]; - TCHAR mod_path[MAX_PATH]; + TCHAR game_path[MAX_PATH]; int source_engine; }; +/* A list of games under one "account" */ +struct game_list_t +{ + TCHAR root_name[128]; + unsigned int *games; + unsigned int game_count; +}; + +/* A list of accounts */ +struct game_group_t +{ + game_list_t **lists; + unsigned int list_count; + int error_code; +}; + +/* All games on the system */ +struct game_database_t +{ + game_info_t *game_list; + unsigned int game_count; + game_group_t dedicated; + game_group_t listen; + game_group_t standalone; +}; + int IsValidFolder(const TCHAR *path); void DisplayBadFolderDialog(HWND hWnd, int reason); -int FindGames(unsigned int game_type); -void DisplayBadGamesDialog(HWND hWnd, unsigned int game_type, int reason); -void ReleaseGamesList(); +void BuildGameDB(); +void ReleaseGameDB(); +void DisplayBadGamesDialog(HWND hWnd, int reason); -extern mod_info_t *g_mod_list; -extern unsigned int g_mod_count; +extern game_database_t g_games; #endif //_INCLUDE_INSTALLER_GAMES_LIST_H_ diff --git a/tools/installer/Resource.h b/tools/installer/Resource.h index f47b0ac0..7ab83304 100644 --- a/tools/installer/Resource.h +++ b/tools/installer/Resource.h @@ -44,6 +44,8 @@ #define ID_INSTALL_CANCEL 1019 #define IDC_INSTALL_PANEL 1020 #define IDC_INSTALL_TEXT 1021 +#define IDC_COMBO3 1021 +#define IDC_SELGROUP_ACCOUNT 1021 #define ID_INSTALL_START 1022 #define IDC_PROGRESS_CURCOPY 1023 #define IDC_STATIC -1 @@ -57,7 +59,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 133 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1012 +#define _APS_NEXT_CONTROL_VALUE 1022 #define _APS_NEXT_SYMED_VALUE 110 #endif #endif diff --git a/tools/installer/SelectGame.cpp b/tools/installer/SelectGame.cpp index cd983f04..d90153e5 100644 --- a/tools/installer/SelectGame.cpp +++ b/tools/installer/SelectGame.cpp @@ -7,50 +7,56 @@ #include "LocalCopyMethod.h" int selected_game_index = -1; -mod_info_t **game_sel_list = NULL; -unsigned int game_sel_count = 0; -void AppendSelectableGame(mod_info_t *mod) +void UpdateGameListBox(HWND hDlg, game_list_t *gl) { - if (game_sel_list == NULL) - { - game_sel_list = - (mod_info_t **)malloc(sizeof(mod_info_t *) * (game_sel_count + 1)); - } - else - { - game_sel_list = - (mod_info_t **)realloc(game_sel_list, - sizeof(mod_info_t *) * (game_sel_count + 1)); - } + HWND lbox = GetDlgItem(hDlg, IDC_SELGAME_LIST); - game_sel_list[game_sel_count++] = mod; + SendMessage(lbox, LB_RESETCONTENT, 0, 0); + + for (unsigned int i = 0; i < gl->game_count; i++) + { + LRESULT res = SendMessage(lbox, + LB_ADDSTRING, + 0, + (LPARAM)g_games.game_list[gl->games[i]].name); + + if (res == LB_ERR || res == LB_ERRSPACE) + { + continue; + } + + SendMessage(lbox, LB_SETITEMDATA, i, gl->games[i]); + } + + UpdateWindow(lbox); } +#include "windowsx.h" + INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { - HWND lbox = GetDlgItem(hDlg, IDC_SELGAME_LIST); - - for (unsigned int i = 0; i < g_mod_count; i++) + HWND cbox = GetDlgItem(hDlg, IDC_SELGROUP_ACCOUNT); + SendMessage(cbox, CB_RESETCONTENT, 0, 0); + for (unsigned int i = 0; i < g_game_group->list_count; i++) { - LRESULT res = SendMessage(lbox, - LB_ADDSTRING, - 0, - (LPARAM)g_mod_list[i].name); - - if (res == LB_ERR || res == LB_ERRSPACE) + LRESULT res = SendMessage(cbox, + CB_ADDSTRING, + 0, + (LPARAM)g_game_group->lists[i]->root_name); + if (res == CB_ERR || res == CB_ERRSPACE) { continue; } - - AppendSelectableGame(&g_mod_list[i]); + SendMessage(cbox, CB_SETITEMDATA, i, (LPARAM)g_game_group->lists[i]); } - - UpdateWindow(lbox); + SendMessage(cbox, CB_SETCURSEL, 0, 0); + UpdateWindow(cbox); + UpdateGameListBox(hDlg, g_game_group->lists[0]); SetToGlobalPosition(hDlg); @@ -69,6 +75,29 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA EndDialog(hDlg, (INT_PTR)DisplayChooseMethod); return (INT_PTR)TRUE; } + else if (LOWORD(wParam) == IDC_SELGROUP_ACCOUNT) + { + if (HIWORD(wParam) == CBN_SELCHANGE) + { + HWND cbox = (HWND)lParam; + LRESULT cursel = SendMessage(cbox, CB_GETCURSEL, 0, 0); + + if (cursel == LB_ERR) + { + break; + } + + LRESULT data = SendMessage(cbox, CB_GETITEMDATA, cursel, 0); + if (data == CB_ERR) + { + break; + } + + game_list_t *gl = (game_list_t *)data; + UpdateGameListBox(hDlg, gl); + } + break; + } else if (LOWORD(wParam) == IDC_SELGAME_LIST) { if (HIWORD(wParam) == LBN_SELCHANGE) @@ -83,12 +112,13 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA break; } - if (cursel >= (LRESULT)g_mod_count) + LRESULT item = SendMessage(lbox, LB_GETITEMDATA, cursel, 0); + if (item == LB_ERR) { break; } - selected_game_index = (int)cursel; + selected_game_index = (int)item; HWND button = GetDlgItem(hDlg, ID_SELGAME_NEXT); EnableWindow(button, TRUE); @@ -101,7 +131,7 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA break; } - g_LocalCopier.SetOutputPath(game_sel_list[selected_game_index]->mod_path); + g_LocalCopier.SetOutputPath(g_games.game_list[selected_game_index].game_path); SetInstallMethod(&g_LocalCopier); UpdateGlobalPosition(hDlg); @@ -113,10 +143,7 @@ INT_PTR CALLBACK ChooseGameHandler(HWND hDlg, UINT message, WPARAM wParam, LPARA } case WM_DESTROY: { - ReleaseGamesList(); - free(game_sel_list); - game_sel_list = NULL; - game_sel_count = 0; + ReleaseGameDB(); break; } } diff --git a/tools/installer/installer.rc b/tools/installer/installer.rc index be5d9eb8..51287cd1 100644 --- a/tools/installer/installer.rc +++ b/tools/installer/installer.rc @@ -99,18 +99,19 @@ BEGIN CONTROL "Upload via FTP",IDC_METHOD_UPLOAD_FTP,"Button",BS_AUTORADIOBUTTON,21,82,94,16 END -IDD_SELECT_GAME DIALOGEX 0, 0, 244, 130 +IDD_SELECT_GAME DIALOGEX 0, 0, 244, 148 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - PUSHBUTTON "&Next",ID_SELGAME_NEXT,191,113,50,14,WS_DISABLED - PUSHBUTTON "E&xit",ID_SELGAME_EXIT,2,113,50,14 - GROUPBOX "",IDC_SELGAME_PANEL,2,3,239,108 - DEFPUSHBUTTON "&Back",ID_SELGAME_BACK,136,113,50,14 - LTEXT "Please select a game:",IDC_SELGAME_TEXT,9,15,122,12 - LISTBOX IDC_SELGAME_LIST,17,30,199,69,LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Next",ID_SELGAME_NEXT,191,131,50,14,WS_DISABLED + PUSHBUTTON "E&xit",ID_SELGAME_EXIT,2,131,50,14 + GROUPBOX "",IDC_SELGAME_PANEL,2,3,239,126 + DEFPUSHBUTTON "&Back",ID_SELGAME_BACK,136,131,50,14 + LTEXT "Please select a game from the list below. If there are multiple accounts, you may select one from the combo-box.",IDC_SELGAME_TEXT,7,14,221,16 + LISTBOX IDC_SELGAME_LIST,17,46,199,76,LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SELGROUP_ACCOUNT,17,32,133,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PERFORM_INSTALL DIALOGEX 0, 0, 243, 116 From 5c97afc2f55796a6da2f2a72eba8bf6fa298614e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 18:06:49 +0000 Subject: [PATCH 047/263] manual folder selection now works --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401730 --- tools/installer/ChooseMethod.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/installer/ChooseMethod.cpp b/tools/installer/ChooseMethod.cpp index a3790f52..fa3fb2da 100644 --- a/tools/installer/ChooseMethod.cpp +++ b/tools/installer/ChooseMethod.cpp @@ -4,6 +4,8 @@ #include "Welcome.h" #include "GamesList.h" #include "SelectGame.h" +#include "PerformInstall.h" +#include "LocalCopyMethod.h" game_group_t *g_game_group = NULL; unsigned int method_chosen = 0; @@ -156,6 +158,12 @@ INT_PTR CALLBACK ChooseMethodHandler(HWND hDlg, UINT message, WPARAM wParam, LPA DisplayBadFolderDialog(hDlg, val); break; } + + g_LocalCopier.SetOutputPath(method_path); + SetInstallMethod(&g_LocalCopier); + + UpdateGlobalPosition(hDlg); + EndDialog(hDlg, (INT_PTR)DisplayPerformInstall); } } From 6545c3e08c08d62e923ce955cbdbeab611c75bbc Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 18:50:13 +0000 Subject: [PATCH 048/263] small clarification to param2 in MenuAction_End --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401731 --- plugins/include/menus.inc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/include/menus.inc b/plugins/include/menus.inc index 7bac6f76..46537ab2 100644 --- a/plugins/include/menus.inc +++ b/plugins/include/menus.inc @@ -54,7 +54,10 @@ enum MenuAction MenuAction_Display = (1<<1), /**< A menu is about to be displayed (param1=client, param2=MenuPanel Handle) */ MenuAction_Select = (1<<2), /**< An item was selected (param1=client, param2=item) */ MenuAction_Cancel = (1<<3), /**< The menu was cancelled (param1=client, param2=reason) */ - MenuAction_End = (1<<4), /**< A menu display has fully ended (param1=reason, param2=cancel reason) */ + MenuAction_End = (1<<4), /**< A menu display has fully ended. + param1 is the MenuEnd reason, and if it's MenuEnd_Cancelled, then + param2 is the MenuCancel reason from MenuAction_Cancel. + */ MenuAction_VoteEnd = (1<<5), /**< (VOTE ONLY): A vote sequence has succeeded (param1=chosen item) This is not called if SetVoteResultCallback has been used on the menu. */ MenuAction_VoteStart = (1<<6), /**< (VOTE ONLY): A vote sequence has started (nothing passed) */ From d5ddb0ce79e8d98e5f98164bdde71f7e58a99f8e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 25 Nov 2007 20:58:48 +0000 Subject: [PATCH 049/263] installer now defaults to center of primary monitor --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401732 --- tools/installer/PerformInstall.cpp | 17 ++++++++++++++++- tools/installer/Welcome.cpp | 11 ++++++++++- tools/installer/installer.rc | 2 +- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tools/installer/PerformInstall.cpp b/tools/installer/PerformInstall.cpp index 1b2e54ef..0e07bd9b 100644 --- a/tools/installer/PerformInstall.cpp +++ b/tools/installer/PerformInstall.cpp @@ -143,6 +143,19 @@ bool CopyStructureRecursively(ICopyMethod *pCopyMethod, /* Now copy folders */ while ((pSubList = pFileList->PeekCurrentFolder()) != NULL) { + if (g_thread_args.m_bIsUpgrade) + { + /* :TODO: put this somewhere else because it technically + * means the progress bars get calculated wrong + */ + if (tstrcasecmp(pSubList->GetFolderName(), _T("cfg")) == 0 + || tstrcasecmp(pSubList->GetFolderName(), _T("configs")) == 0) + { + pFileList->PopCurrentFolder(); + continue; + } + } + /* Try creating the folder */ if (!pCopyMethod->CreateFolder(pSubList->GetFolderName(), errbuf, maxchars)) { @@ -270,15 +283,17 @@ bool StartInstallProcess(HWND hWnd) { int val = MessageBox( hWnd, - _T("It looks like a previous SourceMod installation exists. Do you want to upgrade? Select \"Yes\" to upgrade and keep configuration files. Select \"No\" to perform a full re-install."), + _T("It looks like a previous SourceMod installation exists. Select \"Yes\" to skip copying configuration files. Select \"No\" to perform a full re-install."), _T("SourceMod Installer"), MB_YESNO|MB_ICONQUESTION); if (val == 0 || val == IDYES) { + g_thread_args.m_bIsUpgrade = true; } else { + g_thread_args.m_bIsUpgrade = false; } } diff --git a/tools/installer/Welcome.cpp b/tools/installer/Welcome.cpp index 741091fc..7f4337f8 100644 --- a/tools/installer/Welcome.cpp +++ b/tools/installer/Welcome.cpp @@ -2,13 +2,22 @@ #include "Welcome.h" #include "ChooseMethod.h" +bool g_bIsFirstRun = true; + INT_PTR CALLBACK WelcomeHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { - SetToGlobalPosition(hDlg); + if (!g_bIsFirstRun) + { + SetToGlobalPosition(hDlg); + } + else + { + g_bIsFirstRun = false; + } return (INT_PTR)TRUE; } case WM_COMMAND: diff --git a/tools/installer/installer.rc b/tools/installer/installer.rc index 51287cd1..3519b27f 100644 --- a/tools/installer/installer.rc +++ b/tools/installer/installer.rc @@ -68,7 +68,7 @@ END // IDD_WELCOME DIALOGEX 0, 0, 244, 74 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "SourceMod Installer" FONT 8, "MS Shell Dlg", 400, 0, 0x1 From 5e0cc6cd354db1b25b9138853ce719d81a439014 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 27 Nov 2007 01:58:05 +0000 Subject: [PATCH 050/263] amb1207 - AcceptEntityInput on TF2 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401733 --- gamedata/sdktools.games.ep2.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index 51c53b1e..c3b25f00 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -208,16 +208,11 @@ "windows" "23" "linux" "24" } - - /** - * THESE ARE DISABLED FOR NOW. - "AcceptInput" { "windows" "34" "linux" "35" } - */ } } } From 4d63d44155b93a94cba7a81034440f455235a9c5 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 27 Nov 2007 01:59:38 +0000 Subject: [PATCH 051/263] amb1206 - g_pGameRules for TF --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401734 --- gamedata/sdktools.games.ep2.txt | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index c3b25f00..7fc52211 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -138,6 +138,46 @@ } } + /* General GameRules */ + "#default" + { + "#supported" + { + "game" "tf" + } + + "Offsets" + { + /* Offset into CreateGameRulesObject */ + "g_pGameRules" + { + "windows" "2" + } + } + + "Signatures" + { + /* This signature sometimes has multiple matches, but this + * does not matter as g_pGameRules is involved in all of them. + * The same g_pGameRules offset applies to each match. + * + * Sometimes this block of bytes is at the beginning of the static + * CreateGameRulesObject function and sometimes it is in the middle + * of an entirely different function. This depends on the game. + */ + "CreateGameRulesObject" + { + "library" "server" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2" + } + "g_pGameRules" + { + "library" "server" + "linux" "@g_pGameRules" + } + } + } + /* Team Fortress 2 Offsets */ "tf" { From b98edf88b6474f346a899488138c12e11da09bf5 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 27 Nov 2007 02:19:39 +0000 Subject: [PATCH 052/263] added amb1191 - absolute paths --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401735 --- core/sourcemod.cpp | 21 ++++++++++++++++++--- plugins/include/files.inc | 26 ++++++++++++++++++++++++-- public/ISourceMod.h | 9 +++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 3a30de54..26d9b22c 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -443,20 +443,35 @@ size_t SourceModBase::BuildPath(PathType type, char *buffer, size_t maxlength, c vsnprintf(_buffer, PLATFORM_MAX_PATH, format, ap); va_end(ap); + /* If we get a "file://" notation, strip off the file:// part so we're left + * with an absolute path. Note that the absolute path gets returned, so + * usage with relative paths here is completely invalid. + */ + if (type != Path_SM_Rel && strncmp(_buffer, "file://", 7) == 0) + { + return g_LibSys.PathFormat(buffer, maxlength, "%s", &_buffer[7]); + } + const char *base = NULL; if (type == Path_Game) { base = GetGamePath(); - } else if (type == Path_SM) { + } + else if (type == Path_SM) + { base = GetSourceModPath(); - } else if (type == Path_SM_Rel) { + } + else if (type == Path_SM_Rel) + { base = m_SMRelDir; } if (base) { return g_LibSys.PathFormat(buffer, maxlength, "%s/%s", base, _buffer); - } else { + } + else + { return g_LibSys.PathFormat(buffer, maxlength, "%s", _buffer); } } diff --git a/plugins/include/files.inc b/plugins/include/files.inc index 6dacc5ed..41aa979a 100644 --- a/plugins/include/files.inc +++ b/plugins/include/files.inc @@ -35,7 +35,22 @@ #endif #define _files_included -/* @global All paths in SourceMod natives are relative to the mod folder unless otherwise noted. */ +/** + * @global All paths in SourceMod natives are relative to the mod folder + * unless otherwise noted. + * + * Most functions in SourceMod (at least, ones that deal with direct + * file manipulation) will support an alternate path specification. + * + * If the path starts with the string "file://" and the PathType is + * not relative, then the "file://" portion is stripped off, and the + * rest of the path is used without any modification (except for + * correcting slashes). This can be used to override the path + * builder to supply alternate absolute paths. Examples: + * + * file://C:/Temp/file.txt + * file:///tmp/file.txt + */ /** * File inode types. @@ -72,7 +87,9 @@ enum PathType }; /** - * Builds a path relative to the SourceMod folder. + * Builds a path relative to the SourceMod folder. This should be used instead of + * directly referencing addons/sourcemod, in case users change the name of their + * folder layout. * * @param type Type of path to build as the base. * @param buffer Buffer to store the path. @@ -85,8 +102,10 @@ native BuildPath(PathType:type, String:buffer[], maxlength, const String:fmt[], /** * Opens a directory/folder for contents enumeration. + * * @note Directories are closed with CloseHandle(). * @note Directories Handles can be cloned. + * @note OpenDirectory() supports the "file://" notation. * * @param path Path to open. * @return A Handle to the directory, INVALID_HANDLE on open error. @@ -95,6 +114,7 @@ native Handle:OpenDirectory(const String:path[]); /** * Reads the current directory entry as a local filename, then moves to the next file. + * * @note Contents of buffers are undefined when returning false. * @note Both the '.' and '..' automatic directory entries will be retrieved for Windows and Linux. * @@ -109,8 +129,10 @@ native bool:ReadDirEntry(Handle:dir, String:buffer[], maxlength, &FileType:type= /** * Opens a file. + * * @note Files are closed with CloseHandle(). * @note File Handles can be cloned. + * @note OpenFile() supports the "file://" notation. * * @param file File to open. * @param mode Open mode. diff --git a/public/ISourceMod.h b/public/ISourceMod.h index af39d30b..ae5f0851 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -95,6 +95,15 @@ namespace SourceMod /** * @brief Builds a platform path for a specific target base path. * + * If the path starts with the string "file://" and the PathType is + * not relative, then the "file://" portion is stripped off, and the + * rest of the path is used without any modification (except for + * correcting slashes). This can be used to override the path + * builder to supply alternate absolute paths. Examples: + * + * file://C:/Temp/file.txt + * file:///tmp/file.txt + * * @param type Type of path to use as a base. * @param buffer Buffer to write to. * @param maxlength Size of buffer. From c92048fefb474f5ab8afc744b94257891cf974bf Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 27 Nov 2007 17:25:16 +0000 Subject: [PATCH 053/263] fixed a rare parsing bug where too many tokens would be detected if the staging buffer was broken directly before the second quotation mark in a key string --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401736 --- core/TextParsers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/TextParsers.cpp b/core/TextParsers.cpp index 73f65b12..51c23227 100644 --- a/core/TextParsers.cpp +++ b/core/TextParsers.cpp @@ -408,8 +408,8 @@ SMCError TextParsers::ParseStream_SMC(void *stream, { if (in_quote) { - /* If i was 0, this case is impossible due to reparsing */ - if ((i != 0) && c == '"' && parse_point[i-1] != '\\') + /* If i was 0, we could have reparsed, so make sure there's no buffer underrun */ + if ((&parse_point[i] != in_buf) && c == '"' && parse_point[i-1] != '\\') { /* If we reached a quote in an ignore phase, * we're staging a string and we must rotate it out. From 34b7563160b34b607413fc9448662c807962734c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 27 Nov 2007 22:50:52 +0000 Subject: [PATCH 054/263] added DS's patch from amb1179 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401737 --- public/compat_wrappers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/compat_wrappers.h b/public/compat_wrappers.h index 282f8782..7ad7e484 100644 --- a/public/compat_wrappers.h +++ b/public/compat_wrappers.h @@ -41,7 +41,7 @@ } inline void InsertServerCommand(const char *buf) { - engine->ServerCommand(buf); + engine->InsertServerCommand(buf); } #else class CCommand From 97e77c520e43afb702c878d628453077ab9ffe0e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 28 Nov 2007 16:00:18 +0000 Subject: [PATCH 055/263] fixed a spelling mistake --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401738 --- plugins/include/sourcemod.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index c9b7efa2..acbcdeca 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -148,7 +148,7 @@ forward OnMapEnd(); /** * Called when the map has loaded, servercfgfile (server.cfg) has been * executed, and all plugin configs are done executing. This is the best - * place to inialize plugin functions which are based on cvar data. + * place to initialize plugin functions which are based on cvar data. * * @note This will always be called once and only once per map. It will be * called after OnMapStart(). From 5d23282b071cc3a7b4ce035be6cdf086d4d986bf Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 30 Nov 2007 15:50:32 +0000 Subject: [PATCH 056/263] improved docs on sdktools sound functions --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401739 --- plugins/include/sdktools_sound.inc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/include/sdktools_sound.inc b/plugins/include/sdktools_sound.inc index bc5df843..93fd2372 100644 --- a/plugins/include/sdktools_sound.inc +++ b/plugins/include/sdktools_sound.inc @@ -124,7 +124,7 @@ enum /** * Prefetches a sound. * - * @param name Sound file name. + * @param name Sound file name relative to the "sounds" folder. * @noreturn */ native PrefetchSound(const String:nane[]); @@ -132,7 +132,7 @@ native PrefetchSound(const String:nane[]); /** * Gets a sound's duration (does not work for mp3s). * - * @param name Sound file name. + * @param name Sound file name relative to the "sounds" folder. * @return Duration in seconds. */ native Float:GetSoundDuration(const String:name[]); @@ -140,9 +140,9 @@ native Float:GetSoundDuration(const String:name[]); /** * Emits an ambient sound. * - * @param entity Entity index to associate sound with. + * @param name Sound file name relative to the "sounds" folder. * @param pos Origin of sound. - * @param name Sound file name. + * @param entity Entity index to associate sound with. * @param level Sound level (from 0 to 255). * @param flags Sound flags. * @param vol Volume (from 0.0 to 1.0). @@ -177,7 +177,7 @@ native FadeClientVolume(client, Float:percent, Float:outtime, Float:holdtime, Fl * * @param entity Entity index. * @param channel Channel number. - * @param name Sound name. + * @param name Sound file name relative to the "sounds" folder. * @noreturn */ native StopSound(entity, channel, const String:name[]); @@ -187,9 +187,9 @@ native StopSound(entity, channel, const String:name[]); * * @param clients Array of client indexes. * @param numClients Number of clients in the array. + * @param sample Sound file name relative to the "sounds" folder. * @param entity Entity to emit from. * @param channel Channel to emit with. - * @param sample Sound name. * @param level Sound level. * @param flags Sound flags. * @param volume Sound volume. @@ -224,9 +224,9 @@ native EmitSound(const clients[], * * @param clients Array of client indexes. * @param numClients Number of clients in the array. + * @param sentence Sentence index (from PrecacheSenteFile). * @param entity Entity to emit from. * @param channel Channel to emit with. - * @param sentence Sentence index (from PrecacheSenteFile). * @param level Sound level. * @param flags Sound flags. * @param volume Sound volume. @@ -261,9 +261,9 @@ native EmitSentence(const clients[], * Wrapper to emit sound to one client. * * @param client Client index. + * @param sample Sound file name relative to the "sounds" folder. * @param entity Entity to emit from. * @param channel Channel to emit with. - * @param sample Sound name. * @param level Sound level. * @param flags Sound flags. * @param volume Sound volume. @@ -302,9 +302,9 @@ stock EmitSoundToClient(client, /** * Wrapper to emit sound to all clients. * + * @param sample Sound file name relative to the "sounds" folder. * @param entity Entity to emit from. * @param channel Channel to emit with. - * @param sample Sound name. * @param level Sound level. * @param flags Sound flags. * @param volume Sound volume. From 221429ff6e12b540644cdebe81224b9fcbf0923d Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 1 Dec 2007 00:37:47 +0000 Subject: [PATCH 057/263] added amb382, KV get/set vector natives --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401740 --- core/smn_keyvalues.cpp | 104 ++++++++++++++++++++++++++++++++++ plugins/include/keyvalues.inc | 23 ++++++++ 2 files changed, 127 insertions(+) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index d0313947..025cc5c8 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -218,6 +218,35 @@ static cell_t smn_KvSetColor(IPluginContext *pCtx, const cell_t *params) return 1; } +static cell_t smn_KvSetVector(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec; + KeyValueStack *pStk; + + sec.pOwner = NULL; + sec.pIdentity = g_pCoreIdent; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) + != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); + } + + char *key; + char buffer[64]; + cell_t *vector; + pCtx->LocalToStringNULL(params[2], &key); + pCtx->LocalToPhysAddr(params[3], &vector); + + UTIL_Format(buffer, sizeof(buffer), "%f %f %f", sp_ctof(vector[0]), sp_ctof(vector[1]), sp_ctof(vector[2])); + + pStk->pCurRoot.front()->SetString(key, buffer); + + return 1; +} + static cell_t smn_KvGetString(IPluginContext *pCtx, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); @@ -358,6 +387,79 @@ static cell_t smn_KvGetUInt64(IPluginContext *pCtx, const cell_t *params) return 1; } +static cell_t smn_KvGetVector(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec; + KeyValueStack *pStk; + + sec.pOwner = NULL; + sec.pIdentity = g_pCoreIdent; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) + != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); + } + + char *key; + const char *value; + cell_t *defvector, *outvector; + char buffer[64]; + pCtx->LocalToStringNULL(params[2], &key); + pCtx->LocalToPhysAddr(params[3], &outvector); + pCtx->LocalToPhysAddr(params[4], &defvector); + + UTIL_Format(buffer, sizeof(buffer), "%f %f %f", sp_ctof(defvector[0]), sp_ctof(defvector[1]), sp_ctof(defvector[2])); + + value = pStk->pCurRoot.front()->GetString(key, buffer); + + float out; + int components = 0; + while (*value && components < 3) + { + while ((*value) && (*value == ' ')) + { + value++; + } + + out = 0.0f; + bool isnegative; + if (*value == '-') + { + isnegative = true; + value++; + } + else + { + isnegative = false; + } + + for (; *value && isdigit(*value); ++value) + { + out *= 10.0f; + out += *value - '0'; + } + + if (*value == '.') + { + value++; + float factor = 0.1f; + for (; *value && isdigit(*value); ++value) + { + out += (*value - '0') * factor; + factor *= 0.1f; + } + } + + out = (isnegative) ? -out : out; + outvector[components++] = sp_ftoc(out); + } + + return 1; +} + static cell_t smn_CreateKeyValues(IPluginContext *pCtx, const cell_t *params) { KeyValueStack *pStk; @@ -1015,5 +1117,7 @@ REGISTER_NATIVES(keyvaluenatives) {"KvFindKeyById", smn_FindKeyById}, {"KvGetNameSymbol", smn_GetNameSymbol}, {"KvGetSectionSymbol", smn_KvGetSectionSymbol}, + {"KvGetVector", smn_KvGetVector}, + {"KvSetVector", smn_KvSetVector}, {NULL, NULL} }; diff --git a/plugins/include/keyvalues.inc b/plugins/include/keyvalues.inc index deb21e6c..c14b15fa 100644 --- a/plugins/include/keyvalues.inc +++ b/plugins/include/keyvalues.inc @@ -120,6 +120,17 @@ native KvSetFloat(Handle:kv, const String:key[], Float:value); */ native KvSetColor(Handle:kv, const String:key[], r, g, b, a=0); +/** + * Sets a vector value of a KeyValues key. + * + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param vec Vector value. + * @noreturn + * @error Invalid Handle. + */ +native KvSetVector(Handle:kv, const String:key[], const Float:vec[3]); + /** * Retrieves a string value from a KeyValues key. * @@ -181,6 +192,18 @@ native KvGetColor(Handle:kv, const String:key[], &r, &g, &b, &a); */ native KvGetUInt64(Handle:kv, const String:key[], value[2], defvalue[2]={0,0}); +/** + * Retrieves a vector value from a KeyValues key. + * + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param vec Destination vector to store the value in. + * @param defvalue Optional default value to use if the key is not found. + * @noreturn + * @error Invalid Handle. + */ +native KvGetVector(Handle:kv, const String:key[], Float:vec[3], const Float:defvalue[3]={0.0, 0.0, 0.0}); + /** * Sets the current position in the KeyValues tree to the given key. * From 67417e2bf662e95e012040aaebe135e45c2b557d Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sun, 2 Dec 2007 01:51:48 +0000 Subject: [PATCH 058/263] added amb861, sounds can be hooked now --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401741 --- extensions/sdktools/extension.cpp | 19 + extensions/sdktools/extension.h | 5 + extensions/sdktools/msvc8/sdktools.vcproj | 4 + extensions/sdktools/vsound.cpp | 498 ++++++++++++++++++++-- extensions/sdktools/vsound.h | 76 ++++ plugins/include/core.inc | 1 + plugins/include/sdktools_sound.inc | 71 +++ public/IForwardSys.h | 1 + 8 files changed, 647 insertions(+), 28 deletions(-) create mode 100644 extensions/sdktools/vsound.h diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index a1b8fb5c..290ac288 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -35,6 +35,7 @@ #include "vhelpers.h" #include "vglobals.h" #include "tempents.h" +#include "vsound.h" #if defined ORANGEBOX_BUILD #define SDKTOOLS_GAME_FILE "sdktools.games.ep2" @@ -63,6 +64,8 @@ IServerGameClients *serverClients = NULL; IVoiceServer *voiceserver = NULL; IPlayerInfoManager *playerinfomngr = NULL; ICvar *icvar = NULL; +SourceHook::CallClass<IVEngineServer> *enginePatch = NULL; +SourceHook::CallClass<IEngineSound> *enginesoundPatch = NULL; HandleType_t g_CallHandle = 0; HandleType_t g_TraceHandle = 0; @@ -149,6 +152,7 @@ void SDKTools::SDK_OnUnload() g_TEManager.Shutdown(); s_TempEntHooks.Shutdown(); + s_SoundHooks.Shutdown(); gameconfs->CloseGameConfigFile(g_pGameConf); playerhelpers->RemoveClientListener(&g_SdkTools); @@ -156,6 +160,17 @@ void SDKTools::SDK_OnUnload() SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelInit, gamedll, this, &SDKTools::LevelInit, true); SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, gamedll, this, &SDKTools::OnServerActivate, false); + + if (enginePatch) + { + SH_RELEASE_CALLCLASS(enginePatch); + enginePatch = NULL; + } + if (enginesoundPatch) + { + SH_RELEASE_CALLCLASS(enginesoundPatch); + enginesoundPatch = NULL; + } } bool SDKTools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late) @@ -170,6 +185,9 @@ bool SDKTools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool GET_V_IFACE_ANY(GetServerFactory, playerinfomngr, IPlayerInfoManager, INTERFACEVERSION_PLAYERINFOMANAGER); GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION); + enginePatch = SH_GET_CALLCLASS(engine); + enginesoundPatch = SH_GET_CALLCLASS(engsound); + return true; } @@ -179,6 +197,7 @@ void SDKTools::SDK_OnAllLoaded() g_TEManager.Initialize(); s_TempEntHooks.Initialize(); + s_SoundHooks.Initialize(); InitializeValveGlobals(); } diff --git a/extensions/sdktools/extension.h b/extensions/sdktools/extension.h index 79fcc0ab..7a331b55 100644 --- a/extensions/sdktools/extension.h +++ b/extensions/sdktools/extension.h @@ -108,5 +108,10 @@ extern HandleType_t g_CallHandle; extern HandleType_t g_TraceHandle; /* Call Wrappers */ extern ICallWrapper *g_pAcceptInput; +/* Call classes */ +extern SourceHook::CallClass<IVEngineServer> *enginePatch; +extern SourceHook::CallClass<IEngineSound> *enginesoundPatch; + +#define ENGINE_CALL(func) SH_CALL(enginePatch, &IVEngineServer::func) #endif //_INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ diff --git a/extensions/sdktools/msvc8/sdktools.vcproj b/extensions/sdktools/msvc8/sdktools.vcproj index 4eeee64a..d5c6e484 100644 --- a/extensions/sdktools/msvc8/sdktools.vcproj +++ b/extensions/sdktools/msvc8/sdktools.vcproj @@ -770,6 +770,10 @@ RelativePath="..\vnatives.h" > </File> + <File + RelativePath="..\vsound.h" + > + </File> </Filter> <Filter Name="Resource Files" diff --git a/extensions/sdktools/vsound.cpp b/extensions/sdktools/vsound.cpp index 039fe99f..75fcb166 100644 --- a/extensions/sdktools/vsound.cpp +++ b/extensions/sdktools/vsound.cpp @@ -29,8 +29,333 @@ * Version: $Id$ */ -#include "extension.h" -#include "CellRecipientFilter.h" +#include "vsound.h" +#include <IForwardSys.h> + +SH_DECL_HOOK8_void(IVEngineServer, EmitAmbientSound, SH_NOATTRIB, 0, int, const Vector &, const char *, float, soundlevel_t, int, int, float); +SH_DECL_HOOK14_void(IEngineSound, EmitSound, SH_NOATTRIB, 0, IRecipientFilter &, int, int, const char *, float, float, int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int); +SH_DECL_HOOK14_void(IEngineSound, EmitSound, SH_NOATTRIB, 1, IRecipientFilter &, int, int, const char *, float, soundlevel_t, int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int); + +bool g_InSoundHook = false; + +/*************************** +* * +* Sound Related Hook Class * +* * +****************************/ + +size_t SoundHooks::_FillInPlayers(int *pl_array, IRecipientFilter *pFilter) +{ + size_t size = static_cast<size_t>(pFilter->GetRecipientCount()); + + for (size_t i=0; i<size; i++) + { + pl_array[i] = pFilter->GetRecipientIndex(i); + } + + return size; +} + +void SoundHooks::_IncRefCounter(int type) +{ + if (type == NORMAL_SOUND_HOOK) + { + if (m_NormalCount++ == 0) + { + SH_ADD_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound, false); + SH_ADD_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound2, false); + } + } + else if (type == AMBIENT_SOUND_HOOK) + { + if (m_AmbientCount++ == 0) + { + SH_ADD_HOOK_MEMFUNC(IVEngineServer, EmitAmbientSound, engine, this, &SoundHooks::OnEmitAmbientSound, false); + } + } +} + +void SoundHooks::_DecRefCounter(int type) +{ + if (type == NORMAL_SOUND_HOOK) + { + if (--m_NormalCount == 0) + { + SH_REMOVE_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound, false); + SH_REMOVE_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound2, false); + } + } + else if (type == AMBIENT_SOUND_HOOK) + { + if (--m_AmbientCount == 0) + { + SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, EmitAmbientSound, engine, this, &SoundHooks::OnEmitAmbientSound, false); + } + } +} + +void SoundHooks::Initialize() +{ + plsys->AddPluginsListener(this); +} + +void SoundHooks::Shutdown() +{ + plsys->RemovePluginsListener(this); + if (m_NormalCount) + { + SH_REMOVE_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound, false); + SH_REMOVE_HOOK_MEMFUNC(IEngineSound, EmitSound, engsound, this, &SoundHooks::OnEmitSound2, false); + } + if (m_AmbientCount) + { + SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, EmitAmbientSound, engine, this, &SoundHooks::OnEmitAmbientSound, false); + } +} + +void SoundHooks::OnPluginUnloaded(IPlugin *plugin) +{ + SoundHookIter iter; + IPluginContext *pContext = plugin->GetBaseContext(); + + if (m_AmbientCount) + { + for (iter=m_AmbientFuncs.begin(); iter!=m_AmbientFuncs.end(); ) + { + if ((*iter)->GetParentContext() == pContext) + { + iter = m_AmbientFuncs.erase(iter); + _DecRefCounter(AMBIENT_SOUND_HOOK); + } + else + { + iter++; + } + } + } + if (m_NormalCount) + { + for (iter=m_NormalFuncs.begin(); iter!=m_NormalFuncs.end(); ) + { + if ((*iter)->GetParentContext() == pContext) + { + iter = m_NormalFuncs.erase(iter); + _DecRefCounter(NORMAL_SOUND_HOOK); + } + else + { + iter++; + } + } + } +} + +void SoundHooks::AddHook(int type, IPluginFunction *pFunc) +{ + if (type == NORMAL_SOUND_HOOK) + { + m_NormalFuncs.push_back(pFunc); + _IncRefCounter(NORMAL_SOUND_HOOK); + } + else if (type == AMBIENT_SOUND_HOOK) + { + m_AmbientFuncs.push_back(pFunc); + _IncRefCounter(AMBIENT_SOUND_HOOK); + } +} + +bool SoundHooks::RemoveHook(int type, IPluginFunction *pFunc) +{ + SoundHookIter iter; + if (type == NORMAL_SOUND_HOOK) + { + if ((iter=m_NormalFuncs.find(pFunc)) != m_NormalFuncs.end()) + { + m_NormalFuncs.erase(iter); + _DecRefCounter(NORMAL_SOUND_HOOK); + return true; + } + else + { + return false; + } + } + else if (type == AMBIENT_SOUND_HOOK) + { + if ((iter=m_AmbientFuncs.find(pFunc)) != m_AmbientFuncs.end()) + { + m_AmbientFuncs.erase(iter); + _DecRefCounter(AMBIENT_SOUND_HOOK); + return true; + } + else + { + return false; + } + } + + return false; +} + +void SoundHooks::OnEmitAmbientSound(int entindex, const Vector &pos, const char *samp, float vol, + soundlevel_t soundlevel, int fFlags, int pitch, float delay) +{ + SoundHookIter iter; + IPluginFunction *pFunc; + cell_t vec[3] = {sp_ftoc(pos.x), sp_ftoc(pos.y), sp_ftoc(pos.z)}; + cell_t res = static_cast<ResultType>(Pl_Continue); + char buffer[PLATFORM_MAX_PATH]; + strcpy(buffer, samp); + + for (iter=m_AmbientFuncs.begin(); iter!=m_AmbientFuncs.end(); iter++) + { + pFunc = (*iter); + pFunc->PushStringEx(buffer, sizeof(buffer), SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&entindex); + pFunc->PushFloatByRef(&vol); + pFunc->PushCellByRef(reinterpret_cast<cell_t *>(&soundlevel)); + pFunc->PushCellByRef(&pitch); + pFunc->PushArray(vec, 3, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&fFlags); + pFunc->PushFloatByRef(&delay); + g_InSoundHook = true; + pFunc->Execute(&res); + g_InSoundHook = false; + + switch (res) + { + case Pl_Handled: + case Pl_Stop: + { + RETURN_META(MRES_SUPERCEDE); + } + case Pl_Changed: + { + Vector vec2; + vec2.x = sp_ctof(vec[0]); + vec2.y = sp_ctof(vec[1]); + vec2.z = sp_ctof(vec[2]); + RETURN_META_NEWPARAMS(MRES_IGNORED, &IVEngineServer::EmitAmbientSound, + (entindex, vec2, buffer, vol, soundlevel, fFlags, pitch, delay)); + } + } + } +} + +void SoundHooks::OnEmitSound(IRecipientFilter &filter, int iEntIndex, int iChannel, const char *pSample, + float flVolume, soundlevel_t iSoundlevel, int iFlags, int iPitch, const Vector *pOrigin, + const Vector *pDirection, CUtlVector<Vector> *pUtlVecOrigins, bool bUpdatePositions, + float soundtime, int speakerentity) +{ + SoundHookIter iter; + IPluginFunction *pFunc; + cell_t res = static_cast<ResultType>(Pl_Continue); + char buffer[PLATFORM_MAX_PATH]; + strcpy(buffer, pSample); + + for (iter=m_NormalFuncs.begin(); iter!=m_NormalFuncs.end(); iter++) + { + int players[64], size; + size = _FillInPlayers(players, &filter); + pFunc = (*iter); + + pFunc->PushArray(players, 64, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&size); + pFunc->PushStringEx(buffer, sizeof(buffer), SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&iEntIndex); + pFunc->PushCellByRef(&iChannel); + pFunc->PushFloatByRef(&flVolume); + pFunc->PushCellByRef(reinterpret_cast<cell_t *>(&iSoundlevel)); + pFunc->PushCellByRef(&iPitch); + pFunc->PushCellByRef(&iFlags); + g_InSoundHook = true; + pFunc->Execute(&res); + g_InSoundHook = false; + + switch (res) + { + case Pl_Handled: + case Pl_Stop: + { + RETURN_META(MRES_SUPERCEDE); + } + case Pl_Changed: + { + CellRecipientFilter crf; + crf.Initialize(players, size); + RETURN_META_NEWPARAMS( + MRES_IGNORED, + static_cast<void (IEngineSound::*)(IRecipientFilter &, int, int, const char*, float, soundlevel_t, + int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int)>(&IEngineSound::EmitSound), + (crf, iEntIndex, iChannel, buffer, flVolume, iSoundlevel, iFlags, iPitch, pOrigin, + pDirection, pUtlVecOrigins, bUpdatePositions, soundtime, speakerentity) + ); + } + } + } +} + +void SoundHooks::OnEmitSound2(IRecipientFilter &filter, int iEntIndex, int iChannel, const char *pSample, + float flVolume, float flAttenuation, int iFlags, int iPitch, const Vector *pOrigin, + const Vector *pDirection, CUtlVector<Vector> *pUtlVecOrigins, bool bUpdatePositions, + float soundtime, int speakerentity) +{ + SoundHookIter iter; + IPluginFunction *pFunc; + cell_t res = static_cast<ResultType>(Pl_Continue); + cell_t sndlevel = static_cast<cell_t>(ATTN_TO_SNDLVL(flAttenuation)); + char buffer[PLATFORM_MAX_PATH]; + strcpy(buffer, pSample); + + for (iter=m_NormalFuncs.begin(); iter!=m_NormalFuncs.end(); iter++) + { + int players[64], size; + size = _FillInPlayers(players, &filter); + pFunc = (*iter); + + pFunc->PushArray(players, 64, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&size); + pFunc->PushStringEx(buffer, sizeof(buffer), SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); + pFunc->PushCellByRef(&iEntIndex); + pFunc->PushCellByRef(&iChannel); + pFunc->PushFloatByRef(&flVolume); + pFunc->PushCellByRef(&sndlevel); + pFunc->PushCellByRef(&iPitch); + pFunc->PushCellByRef(&iFlags); + g_InSoundHook = true; + pFunc->Execute(&res); + g_InSoundHook = false; + + switch (res) + { + case Pl_Handled: + case Pl_Stop: + { + RETURN_META(MRES_SUPERCEDE); + } + case Pl_Changed: + { + CellRecipientFilter crf; + crf.Initialize(players, size); + RETURN_META_NEWPARAMS( + MRES_IGNORED, + static_cast<void (IEngineSound::*)(IRecipientFilter &, int, int, const char*, float, float, + int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int)>(&IEngineSound::EmitSound), + (crf, iEntIndex, iChannel, buffer, flVolume, SNDLVL_TO_ATTN(static_cast<soundlevel_t>(sndlevel)), + iFlags, iPitch, pOrigin, pDirection, pUtlVecOrigins, bUpdatePositions, soundtime, speakerentity) + ); + } + } + } +} + +/************************ +* * +* Sound Related Natives * +* * +*************************/ + +SoundHooks s_SoundHooks; static cell_t PrefetchSound(IPluginContext *pContext, const cell_t *params) { @@ -74,7 +399,14 @@ static cell_t EmitAmbientSound(IPluginContext *pContext, const cell_t *params) pitch = params[7]; delay = sp_ctof(params[8]); - engine->EmitAmbientSound(entity, pos, name, vol, (soundlevel_t)level, flags, pitch, delay); + if (g_InSoundHook) + { + ENGINE_CALL(EmitAmbientSound)(entity, pos, name, vol, (soundlevel_t)level, flags, pitch, delay); + } + else + { + engine->EmitAmbientSound(entity, pos, name, vol, (soundlevel_t)level, flags, pitch, delay); + } return 1; } @@ -186,8 +518,71 @@ static cell_t EmitSound(IPluginContext *pContext, const cell_t *params) player[0] = pl_addr[i]; crf.Reset(); crf.Initialize(player, 1); - engsound->EmitSound(crf, - player[0], + if (g_InSoundHook) + { + SH_CALL(enginesoundPatch, + static_cast<void (IEngineSound::*)(IRecipientFilter &, int, int, const char*, float, + soundlevel_t, int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int)> + (&IEngineSound::EmitSound)) + (crf, + player[0], + channel, + sample, + vol, + (soundlevel_t)level, + flags, + pitch, + pOrigin, + pDir, + pOrigVec, + updatePos, + soundtime, + speakerentity); + } + else + { + engsound->EmitSound(crf, + player[0], + channel, + sample, + vol, + (soundlevel_t)level, + flags, + pitch, + pOrigin, + pDir, + pOrigVec, + updatePos, + soundtime, + speakerentity); + } + } + } else { + if (g_InSoundHook) + { + SH_CALL(enginesoundPatch, + static_cast<void (IEngineSound::*)(IRecipientFilter &, int, int, const char*, float, + soundlevel_t, int, int, const Vector *, const Vector *, CUtlVector<Vector> *, bool, float, int)> + (&IEngineSound::EmitSound)) + (crf, + entity, + channel, + sample, + vol, + (soundlevel_t)level, + flags, + pitch, + pOrigin, + pDir, + pOrigVec, + updatePos, + soundtime, + speakerentity); + } + else + { + engsound->EmitSound(crf, + entity, channel, sample, vol, @@ -201,21 +596,6 @@ static cell_t EmitSound(IPluginContext *pContext, const cell_t *params) soundtime, speakerentity); } - } else { - engsound->EmitSound(crf, - entity, - channel, - sample, - vol, - (soundlevel_t)level, - flags, - pitch, - pOrigin, - pDir, - pOrigVec, - updatePos, - soundtime, - speakerentity); } return 1; @@ -296,14 +676,76 @@ static cell_t EmitSentence(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t smn_AddAmbientSoundHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunc = pContext->GetFunctionById(params[1]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[1]); + } + + s_SoundHooks.AddHook(AMBIENT_SOUND_HOOK, pFunc); + + return 1; +} + +static cell_t smn_AddNormalSoundHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunc = pContext->GetFunctionById(params[1]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[1]); + } + + s_SoundHooks.AddHook(NORMAL_SOUND_HOOK, pFunc); + + return 1; +} + +static cell_t smn_RemoveAmbientSoundHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunc = pContext->GetFunctionById(params[1]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[1]); + } + + if (!s_SoundHooks.RemoveHook(AMBIENT_SOUND_HOOK, pFunc)) + { + return pContext->ThrowNativeError("Invalid hooked function"); + } + + return 1; +} + +static cell_t smn_RemoveNormalSoundHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunc = pContext->GetFunctionById(params[1]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[1]); + } + + if (!s_SoundHooks.RemoveHook(NORMAL_SOUND_HOOK, pFunc)) + { + return pContext->ThrowNativeError("Invalid hooked function"); + } + + return 1; +} + sp_nativeinfo_t g_SoundNatives[] = { - {"EmitAmbientSound", EmitAmbientSound}, - {"EmitSentence", EmitSentence}, - {"EmitSound", EmitSound}, - {"FadeClientVolume", FadeClientVolume}, - {"GetSoundDuration", GetSoundDuration}, - {"PrefetchSound", PrefetchSound}, - {"StopSound", StopSound}, - {NULL, NULL}, + {"EmitAmbientSound", EmitAmbientSound}, + {"EmitSentence", EmitSentence}, + {"EmitSound", EmitSound}, + {"FadeClientVolume", FadeClientVolume}, + {"GetSoundDuration", GetSoundDuration}, + {"PrefetchSound", PrefetchSound}, + {"StopSound", StopSound}, + {"AddAmbientSoundHook", smn_AddAmbientSoundHook}, + {"AddNormalSoundHook", smn_AddNormalSoundHook}, + {"RemoveAmbientSoundHook", smn_RemoveAmbientSoundHook}, + {"RemoveNormalSoundHook", smn_RemoveNormalSoundHook}, + {NULL, NULL}, }; diff --git a/extensions/sdktools/vsound.h b/extensions/sdktools/vsound.h new file mode 100644 index 00000000..12f26530 --- /dev/null +++ b/extensions/sdktools/vsound.h @@ -0,0 +1,76 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod SDKTools Extension +* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* 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/>. +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or <http://www.sourcemod.net/license.php>. +* +* Version: $Id$ +*/ + +#ifndef _INCLUDE_SOURCEMOD_VSOUND_H_ +#define _INCLUDE_SOURCEMOD_VSOUND_H_ + +#include <sh_list.h> +#include "extension.h" +#include "CellRecipientFilter.h" + +#define NORMAL_SOUND_HOOK 0 +#define AMBIENT_SOUND_HOOK 1 + +typedef SourceHook::List<IPluginFunction *>::iterator SoundHookIter; + +class SoundHooks : public IPluginsListener +{ +public: //IPluginsListener + void OnPluginUnloaded(IPlugin *plugin); +public: + void Initialize(); + void Shutdown(); + void AddHook(int type, IPluginFunction *pFunc); + bool RemoveHook(int type, IPluginFunction *pFunc); + void OnEmitAmbientSound(int entindex, const Vector &pos, const char *samp, float vol, + soundlevel_t soundlevel, int fFlags, int pitch, float delay); + void OnEmitSound(IRecipientFilter& filter, int iEntIndex, int iChannel, const char *pSample, float flVolume, + soundlevel_t iSoundlevel, int iFlags, int iPitch, const Vector *pOrigin, + const Vector *pDirection, CUtlVector<Vector> *pUtlVecOrigins, bool bUpdatePositions, + float soundtime, int speakerentity); + void OnEmitSound2(IRecipientFilter& filter, int iEntIndex, int iChannel, const char *pSample, float flVolume, + float flAttenuation, int iFlags, int iPitch, const Vector *pOrigin, + const Vector *pDirection, CUtlVector<Vector> *pUtlVecOrigins, bool bUpdatePositions, + float soundtime, int speakerentity); +private: + size_t _FillInPlayers(int *pl_array, IRecipientFilter *pFilter); + void _IncRefCounter(int type); + void _DecRefCounter(int type); +private: + SourceHook::List<IPluginFunction *> m_AmbientFuncs; + SourceHook::List<IPluginFunction *> m_NormalFuncs; + size_t m_NormalCount; + size_t m_AmbientCount; +}; + +extern SoundHooks s_SoundHooks; + +#endif //_INCLUDE_SOURCEMOD_VSOUND_H_ \ No newline at end of file diff --git a/plugins/include/core.inc b/plugins/include/core.inc index df31a96b..ca226e09 100644 --- a/plugins/include/core.inc +++ b/plugins/include/core.inc @@ -58,6 +58,7 @@ enum Function enum Action { Plugin_Continue = 0, /**< Continue with the original action */ + Plugin_Changed = 1, /**< Inputs or outputs have been overridden with new values */ Plugin_Handled = 3, /**< Handle the action at the end (don't call it) */ Plugin_Stop = 4, /**< Immediately stop the hook chain and handle the original */ }; diff --git a/plugins/include/sdktools_sound.inc b/plugins/include/sdktools_sound.inc index 93fd2372..c60c19a6 100644 --- a/plugins/include/sdktools_sound.inc +++ b/plugins/include/sdktools_sound.inc @@ -256,6 +256,77 @@ native EmitSentence(const clients[], Float:soundtime = 0.0, any:...); +/** + * Called when an ambient sound is about to be emitted to one or more clients. + * + * NOTICE: all parameters can be overwritten to modify the default behavior. + * + * @param sample Sound file name relative to the "sounds" folder. + * @param entity Entity index associated to the sound. + * @param volume Volume (from 0.0 to 1.0). + * @param level Sound level (from 0 to 255). + * @param pitch Pitch (from 0 to 255). + * @param pos Origin of sound. + * @param flags Sound flags. + * @param delay Play delay. + * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, + * Plugin_Changed when any parameter has been modified. + */ +functag AmbientSHook Action:public(String:sample[PLATFORM_MAX_PATH], &entity, &Float:volume, &level, &pitch, Float:pos[3], &flags, &Float:delay); + +/** + * Called when a sound is going to be emitted to one or more clients. + * NOTICE: all params can be overwritten to modify the default behaviour. + * + * @param clients Array of client indexes. + * @param numClients Number of clients in the array (modify this value if you add/remove elements from the client array). + * @param sample Sound file name relative to the "sounds" folder. + * @param entity Entity emitting the sound. + * @param channel Channel emitting the sound. + * @param volume Sound volume. + * @param level Sound level. + * @param pitch Sound pitch. + * @param flags Sound flags. + * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, + * Plugin_Changed when any parameter has been modified. + */ +functag NormalSHook Action:public(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags); + +/** + * Hooks all played ambient sounds. + * + * @param hook Function to use as a hook. + * @noreturn + * @error Invalid function hook. + */ +native AddAmbientSoundHook(AmbientSHook:hook); + +/** + * Hooks all played normal sounds. + * + * @param hook Function to use as a hook. + * @noreturn + * @error Invalid function hook. + */ +native AddNormalSoundHook(NormalSHook:hook); + +/** + * Unhooks all played ambient sounds. + * + * @param hook Function used for the hook. + * @noreturn + * @error Invalid function hook. + */ +native RemoveAmbientSoundHook(AmbientSHook:hook); + +/** + * Unhooks all played normal sounds. + * + * @param hook Function used for the hook. + * @noreturn + * @error Invalid function hook. + */ +native RemoveNormalSoundHook(NormalSHook:hook); /** * Wrapper to emit sound to one client. diff --git a/public/IForwardSys.h b/public/IForwardSys.h index efa778e1..99149b64 100644 --- a/public/IForwardSys.h +++ b/public/IForwardSys.h @@ -65,6 +65,7 @@ namespace SourceMod enum ResultType { Pl_Continue = 0, /**< No result */ + Pl_Changed = 1, /**< Inputs or outputs have been overridden with new values */ Pl_Handled = 3, /**< Result was handled, stop at the end */ Pl_Stop = 4, /**< Result was handled, stop now */ }; From 1d2e7bb46b167cbca93db35a4205ffaa2606a349 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Sun, 2 Dec 2007 01:59:19 +0000 Subject: [PATCH 059/263] Fixed amb1219 - Proper tokenising of sm_addban --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401742 --- plugins/basebans.sp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/basebans.sp b/plugins/basebans.sp index 370f575a..4fed0f80 100644 --- a/plugins/basebans.sp +++ b/plugins/basebans.sp @@ -209,7 +209,6 @@ public Action:Command_AddBan(client, args) } decl String:arg_string[256]; - new String:reason[128]; new String:time[50]; new String:authid[50]; @@ -228,9 +227,12 @@ public Action:Command_AddBan(client, args) /* Get steamid */ if ((len = BreakString(arg_string[total_len], authid, sizeof(authid))) != -1) { - /* Get reason */ total_len += len; - BreakString(arg_string[total_len], reason, sizeof(reason)); + } + else + { + total_len = 0; + arg_string[0] = '\0'; } /* Verify steamid */ @@ -248,11 +250,11 @@ public Action:Command_AddBan(client, args) client, minutes, authid, - reason); + arg_string[total_len]); BanIdentity(authid, minutes, BANFLAG_AUTHID, - reason, + arg_string[total_len], "sm_addban", client); From da9168082c73d640bee450001e072460f387ade4 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sun, 2 Dec 2007 02:05:55 +0000 Subject: [PATCH 060/263] stop crying gcc --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401743 --- extensions/sdktools/vsound.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/sdktools/vsound.h b/extensions/sdktools/vsound.h index 12f26530..040cbbe6 100644 --- a/extensions/sdktools/vsound.h +++ b/extensions/sdktools/vsound.h @@ -73,4 +73,4 @@ private: extern SoundHooks s_SoundHooks; -#endif //_INCLUDE_SOURCEMOD_VSOUND_H_ \ No newline at end of file +#endif //_INCLUDE_SOURCEMOD_VSOUND_H_ From a8ecd7fea49257947acc9c2d7f1e16574305af49 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 02:10:37 +0000 Subject: [PATCH 061/263] - added beefy new ReadMapList() native - admin menu now uses ReadMapList() - added UTIL_TrimWhitespace() to stringutils - moved GetFileTime() implementation to ILibrarySys - cleaned up sorting include a bit - removed adminmenu_maplist.ini, since it's specified by maplists.cfg - added maplists.cfg --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401744 --- configs/adminmenu_maplist.ini | 5 - configs/maplists.cfg | 34 ++ core/CrazyDebugger.cpp | 2 +- core/Makefile.ep1 | 2 +- core/Makefile.ep2 | 2 +- core/Makefile.orig | 2 +- core/msvc8/sourcemod_mm.vcproj | 4 + core/sm_stringutil.cpp | 31 ++ core/sm_stringutil.h | 1 + core/smn_filesystem.cpp | 27 +- core/smn_maplists.cpp | 659 +++++++++++++++++++++++++++++++++ core/systems/LibrarySys.cpp | 30 ++ core/systems/LibrarySys.h | 1 + plugins/basecommands.sp | 5 +- plugins/basecommands/map.sp | 114 ++---- plugins/include/sorting.inc | 6 +- plugins/include/sourcemod.inc | 64 ++++ public/ILibrarySys.h | 22 +- 18 files changed, 880 insertions(+), 131 deletions(-) delete mode 100644 configs/adminmenu_maplist.ini create mode 100644 configs/maplists.cfg create mode 100644 core/smn_maplists.cpp diff --git a/configs/adminmenu_maplist.ini b/configs/adminmenu_maplist.ini deleted file mode 100644 index ae9bdf57..00000000 --- a/configs/adminmenu_maplist.ini +++ /dev/null @@ -1,5 +0,0 @@ -// adminmenu_maplist.ini -// -// List maps here to be added to the map and votemap sections of the admin menu -// - diff --git a/configs/maplists.cfg b/configs/maplists.cfg new file mode 100644 index 00000000..032b4a7e --- /dev/null +++ b/configs/maplists.cfg @@ -0,0 +1,34 @@ +/** + * Use this file to configure map lists. + * + * Each section is a map list that plugins can use. For example, the Admin Menu + * requests an "admin menu" map list, and you can control which maps appear via + * this file. + * + * Each section must have a property that explains where to read the maps from. + * There are two properties: + * + * target - Redirect the request to another section. + * file - Read a file of map names, in mapcycle.txt format. + * + * There is one section by default, called "mapcyclefile" - it is mapped to the + * mapcycle.txt file, or whatever the contents of your mapcyclefile cvar is. + * + * If a plugin requests a map list file which doesn't exist, or is empty, SourceMod + * tries the "default" section, and then the "mapcyclefile" section. + */ +"MapLists" +{ + /** + * Default requests go right to the mapcyclefile. + */ + "default" + { + "target" "mapcyclefile" + } + + "admin menu" + { + "file" "addons/sourcemod/configs/adminmenu_maplist.ini" + } +} diff --git a/core/CrazyDebugger.cpp b/core/CrazyDebugger.cpp index 7960191d..492766ce 100644 --- a/core/CrazyDebugger.cpp +++ b/core/CrazyDebugger.cpp @@ -29,7 +29,7 @@ * Version: $Id$ */ -#if defined DEBUG +#if 0 #include "sm_globals.h" #include "sourcemm_api.h" #include "Tlhelp32.h" diff --git a/core/Makefile.ep1 b/core/Makefile.ep1 index 46064b72..c25cac9c 100644 --- a/core/Makefile.ep1 +++ b/core/Makefile.ep1 @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 index 4ee53df8..1d3ff939 100644 --- a/core/Makefile.ep2 +++ b/core/Makefile.ep2 @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ diff --git a/core/Makefile.orig b/core/Makefile.orig index 4b716371..eec753e1 100644 --- a/core/Makefile.orig +++ b/core/Makefile.orig @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 2d01ff19..823a0756 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1378,6 +1378,10 @@ RelativePath="..\smn_lang.cpp" > </File> + <File + RelativePath="..\smn_maplists.cpp" + > + </File> <File RelativePath="..\smn_menus.cpp" > diff --git a/core/sm_stringutil.cpp b/core/sm_stringutil.cpp index e94ff44e..70586d96 100644 --- a/core/sm_stringutil.cpp +++ b/core/sm_stringutil.cpp @@ -1275,3 +1275,34 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se return NULL; } + +char *UTIL_TrimWhitespace(char *str, size_t &len) +{ + char *end = str + len - 1; + + if (!len) + { + return str; + } + + /* Iterate backwards through string until we reach first non-whitespace char */ + while (end >= str && textparsers->IsWhitespace(end)) + { + end--; + len--; + } + + /* Replace first whitespace char (at the end) with null terminator. + * If there is none, we're just replacing the null terminator. + */ + *(end + 1) = '\0'; + + while (*str != '\0' && textparsers->IsWhitespace(str)) + { + str++; + len--; + } + + return str; +} + diff --git a/core/sm_stringutil.h b/core/sm_stringutil.h index 08e379b6..e96aac62 100644 --- a/core/sm_stringutil.h +++ b/core/sm_stringutil.h @@ -52,5 +52,6 @@ char *sm_strdup(const char *str); size_t CorePlayerTranslate(int client, char *buffer, size_t maxlength, const char *phrase, void **params); unsigned int UTIL_ReplaceAll(char *subject, size_t maxlength, const char *search, const char *replace); char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t searchLen, const char *replace, size_t replaceLen); +char *UTIL_TrimWhitespace(char *str, size_t &len); #endif // _INCLUDE_SOURCEMOD_STRINGUTIL_H_ diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index 883ee5b8..b209bfd3 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -557,13 +557,6 @@ static cell_t sm_LogError(IPluginContext *pContext, const cell_t *params) return 1; } -enum -{ - FileTime_LastAccess = 0, /* Last access (not available on FAT) */ - FileTime_Created = 1, /* Creation (not available on FAT) */ - FileTime_LastChange = 2, /* Last modification */ -}; - static cell_t sm_GetFileTime(IPluginContext *pContext, const cell_t *params) { char *name; @@ -574,30 +567,16 @@ static cell_t sm_GetFileTime(IPluginContext *pContext, const cell_t *params) return 0; } + time_t time_val; char realpath[PLATFORM_MAX_PATH]; g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name); -#ifdef PLATFORM_WINDOWS - struct _stat s; - if (_stat(realpath, &s) != 0) -#elif defined PLATFORM_POSIX - struct stat s; - if (stat(realpath, &s) != 0) -#endif + if (!g_LibSys.FileTime(realpath, (FileTimeType)params[2], &time_val)) { return -1; - } else { - if (params[2] == FileTime_LastAccess) - { - return (cell_t)s.st_atime; - } else if (params[2] == FileTime_Created) { - return (cell_t)s.st_ctime; - } else if (params[2] == FileTime_LastChange) { - return (cell_t)s.st_mtime; - } } - return -1; + return (cell_t)time_val; } static cell_t sm_LogToOpenFile(IPluginContext *pContext, const cell_t *params) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp new file mode 100644 index 00000000..6a50b974 --- /dev/null +++ b/core/smn_maplists.cpp @@ -0,0 +1,659 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <sh_list.h> +#include "sm_globals.h" +#include "sm_trie_tpl.h" +#include "CellArray.h" +#include "convar.h" +#include "sourcemm_api.h" +#include "LibrarySys.h" +#include "TextParsers.h" +#include "sm_stringutil.h" +#include "sourcemod.h" +#include "Logger.h" +#include "HandleSys.h" + +using namespace SourceHook; + +struct maplist_info_t +{ + bool bIsCompat; + bool bIsPath; + char name[PLATFORM_MAX_PATH]; + char path[PLATFORM_MAX_PATH]; + time_t last_modified_time; + CellArray *pArray; + int serial; +}; + +#define MAPLIST_FLAG_MAPSFOLDER (1<<0) /**< On failure, use all maps in the maps folder. */ +#define MAPLIST_FLAG_CLEARARRAY (1<<1) /**< If an input array is specified, clear it before adding. */ +#define MAPLIST_FLAG_NO_DEFAULT (1<<2) /**< Do not read "default" or "mapcyclefile" on failure. */ + +class MapLists : public SMGlobalClass, public ITextListener_SMC +{ +public: + enum MapListState + { + MPS_NONE, + MPS_GLOBAL, + MPS_MAPLIST, + }; +public: + MapLists() + { + m_pMapCycleFile = NULL; + m_ConfigLastChanged = 0; + m_nSerialChange = 0; + } + void OnSourceModAllInitialized() + { + m_pMapCycleFile = icvar->FindVar("mapcyclefile"); + g_SourceMod.BuildPath(Path_SM, m_ConfigFile, sizeof(m_ConfigFile), "configs/maplists.cfg"); + } + void OnSourceModShutdown() + { + DumpCache(NULL); + } + void AddOrUpdateDefault(const char *name, const char *file) + { + char path[PLATFORM_MAX_PATH]; + maplist_info_t *pMapList, **ppMapList; + + if ((ppMapList = m_ListLookup.retrieve(name)) == NULL) + { + pMapList = new maplist_info_t; + pMapList->bIsCompat = true; + pMapList->bIsPath = true; + pMapList->last_modified_time = 0; + strncopy(pMapList->name, name, sizeof(pMapList->name)); + pMapList->pArray = NULL; + g_SourceMod.BuildPath(Path_Game, + pMapList->path, + sizeof(pMapList->path), + "%s", + file); + pMapList->serial = 0; + m_ListLookup.insert(name, pMapList); + m_MapLists.push_back(pMapList); + return; + } + + pMapList = *ppMapList; + + /* Don't modify if it's from the config file */ + if (!pMapList->bIsCompat) + { + return; + } + + g_SourceMod.BuildPath(Path_Game, + path, + sizeof(path), + "%s", + file); + + /* If the path matches, don't reset the serial/time */ + if (strcmp(path, pMapList->path) == 0) + { + return; + } + + strncopy(pMapList->path, path, sizeof(pMapList->path)); + pMapList->bIsPath = true; + pMapList->last_modified_time = 0; + pMapList->serial = 0; + } + void UpdateCache() + { + bool fileFound; + SMCError error; + time_t fileTime; + SMCStates states = {0, 0}; + + fileFound = g_LibSys.FileTime(m_ConfigFile, FileTime_LastChange, &fileTime); + + /* If the file is found and hasn't changed, bail out now. */ + if (fileFound && fileTime == m_ConfigLastChanged) + { + return; + } + + /* If the file wasn't found, and we already have entries, we bail out too. + * This case lets us optimize when a user deletes the config file, so we + * don't reparse every single time the function is called. + */ + if (!fileFound && m_MapLists.size() > 0) + { + return; + } + + /* Dump everything we know about. */ + List<maplist_info_t *> compat; + DumpCache(&compat); + + /* All this is to add the default entry back in. */ + maplist_info_t *pDefList = new maplist_info_t; + + pDefList->bIsPath = true; + strncopy(pDefList->name, "mapcyclefile", sizeof(pDefList->name)); + g_SourceMod.BuildPath(Path_Game, + pDefList->path, + sizeof(pDefList->path), + "%s", + m_pMapCycleFile ? m_pMapCycleFile->GetString() : "mapcycle.txt"); + pDefList->last_modified_time = 0; + pDefList->pArray = NULL; + pDefList->serial = 0; + + m_ListLookup.insert("mapcyclefile", pDefList); + m_MapLists.push_back(pDefList); + + /* Now parse the config file even if we don't know about it. + * This will give us a nice error message. + */ + if ((error = g_TextParser.ParseFile_SMC(m_ConfigFile, this, &states)) + != SMCError_Okay) + { + const char *errmsg = g_TextParser.GetSMCErrorString(error); + if (errmsg == NULL) + { + errmsg = "Unknown error"; + } + g_Logger.LogError("[SM] Could not parse file \"%s\"", m_ConfigFile); + g_Logger.LogError("[SM] Error on line %d (col %d): %s", + states.line, + states.col, + errmsg); + } + else + { + m_ConfigLastChanged = fileTime; + } + + /* Now, re-add compat stuff back in if we can. */ + List<maplist_info_t *>::iterator iter = compat.begin(); + while (iter != compat.end()) + { + if (m_ListLookup.retrieve((*iter)->name) != NULL) + { + /* The compatibility shim is no longer needed. */ + delete (*iter)->pArray; + delete (*iter); + } + else + { + m_ListLookup.insert((*iter)->name, (*iter)); + m_MapLists.push_back((*iter)); + } + iter = compat.erase(iter); + } + } + void ReadSMC_ParseStart() + { + m_CurState = MPS_NONE; + m_IgnoreLevel = 0; + m_pCurMapList = NULL; + } + SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) + { + if (m_IgnoreLevel) + { + m_IgnoreLevel++; + return SMCResult_Continue; + } + + if (m_CurState == MPS_NONE) + { + if (strcmp(name, "MapLists") == 0) + { + m_CurState = MPS_GLOBAL; + } + else + { + m_IgnoreLevel = 1; + } + } + else if (m_CurState == MPS_GLOBAL) + { + m_pCurMapList = new maplist_info_t; + + memset(m_pCurMapList, 0, sizeof(maplist_info_t)); + strncopy(m_pCurMapList->name, name, sizeof(m_pCurMapList->name)); + + m_CurState = MPS_MAPLIST; + } + else if (m_CurState == MPS_MAPLIST) + { + m_IgnoreLevel++; + } + + return SMCResult_Continue; + } + SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) + { + if (m_IgnoreLevel || m_pCurMapList == NULL) + { + return SMCResult_Continue; + } + + if (strcmp(key, "file") == 0) + { + g_SourceMod.BuildPath(Path_Game, + m_pCurMapList->path, + sizeof(m_pCurMapList->path), + "%s", + value); + m_pCurMapList->bIsPath = true; + } + else if (strcmp(key, "target") == 0) + { + strncopy(m_pCurMapList->path, value, sizeof(m_pCurMapList->path)); + m_pCurMapList->bIsPath = false; + } + + return SMCResult_Continue; + } + SMCResult ReadSMC_LeavingSection(const SMCStates *states) + { + if (m_IgnoreLevel) + { + m_IgnoreLevel--; + return SMCResult_Continue; + } + + if (m_CurState == MPS_MAPLIST) + { + if (m_pCurMapList != NULL + && m_pCurMapList->path[0] != '\0' + && m_ListLookup.retrieve(m_pCurMapList->name) == NULL) + { + m_ListLookup.insert(m_pCurMapList->name, m_pCurMapList); + m_MapLists.push_back(m_pCurMapList); + m_pCurMapList = NULL; + } + else + { + delete m_pCurMapList; + m_pCurMapList = NULL; + } + m_CurState = MPS_GLOBAL; + } + else if (m_CurState == MPS_GLOBAL) + { + m_CurState = MPS_NONE; + } + + return SMCResult_Continue; + } + void ReadSMC_ParseEnd(bool halted, bool failed) + { + delete m_pCurMapList; + m_pCurMapList = NULL; + } + static int sort_maps_in_adt_array(const void *str1, const void *str2) + { + return strcmp((char *)str1, (char *)str2); + } + CellArray *UpdateMapList(CellArray *pUseArray, const char *name, int *pSerial, unsigned int flags) + { + int change_serial; + CellArray *pNewArray; + bool success, free_new_array; + + free_new_array = false; + + if ((success = GetMapList(&pNewArray, name, &change_serial)) == false) + { + if ((flags & MAPLIST_FLAG_NO_DEFAULT) != MAPLIST_FLAG_NO_DEFAULT) + { + /* If this list failed, and it's not the default, try the default. + */ + if (strcmp(name, "default") != 0) + { + success = GetMapList(&pNewArray, name, &change_serial); + } + /* If either of the last two conditions failed, try again if we can. */ + if (!success) + { + success = GetMapList(&pNewArray, "mapcyclefile", &change_serial); + } + } + } + + /* If there was a success, and the serial has not changed, bail out. */ + if (*pSerial == change_serial) + { + return NULL; + } + + /** + * If there was a success but no map list, we need to look in the maps folder. + * If there was a failure and the flag is specified, we need to look in the maps folder. + */ + if ((success && pNewArray == NULL) + || (!success && ((flags & MAPLIST_FLAG_MAPSFOLDER) == MAPLIST_FLAG_MAPSFOLDER))) + { + char path[255]; + IDirectory *pDir; + + pNewArray = new CellArray(64); + free_new_array = true; + g_SourceMod.BuildPath(Path_Game, path, sizeof(path), "maps"); + + if ((pDir = g_LibSys.OpenDirectory(path)) != NULL) + { + char *ptr; + cell_t *blk; + char buffer[PLATFORM_MAX_PATH]; + + while (pDir->MoreFiles()) + { + if (!pDir->IsEntryFile() + || strcmp(pDir->GetEntryName(), ".") == 0 + || strcmp(pDir->GetEntryName(), "..") == 0) + { + pDir->NextEntry(); + continue; + } + strncopy(buffer, pDir->GetEntryName(), sizeof(buffer)); + if ((ptr = strstr(buffer, ".bsp")) == NULL) + { + pDir->NextEntry(); + continue; + } + *ptr = '\0'; + if (!engine->IsMapValid(buffer)) + { + pDir->NextEntry(); + continue; + } + if ((blk = pNewArray->push()) == NULL) + { + pDir->NextEntry(); + continue; + } + strncopy((char *)blk, buffer, 255); + pDir->NextEntry(); + } + g_LibSys.CloseDirectory(pDir); + } + + /* Remove the array if there were no items. */ + if (pNewArray->size() == 0) + { + delete pNewArray; + pNewArray = NULL; + } + else + { + qsort(pNewArray->base(), + pNewArray->size(), + pNewArray->blocksize() * sizeof(cell_t), + sort_maps_in_adt_array); + } + + change_serial = -1; + } + + /* If there is still no array by this point, bail out. */ + if (pNewArray == NULL) + { + *pSerial = -1; + return NULL; + } + + *pSerial = change_serial; + + /* If there is no input array, return something temporary. */ + if (pUseArray == NULL) + { + if (free_new_array) + { + return pNewArray; + } + else + { + return pNewArray->clone(); + } + } + + /* Clear the input array if necessary. */ + if ((flags & MAPLIST_FLAG_CLEARARRAY) == MAPLIST_FLAG_CLEARARRAY) + { + pUseArray->clear(); + } + + /* Copy. */ + cell_t *blk_dst; + cell_t *blk_src; + for (size_t i = 0; i < pNewArray->size(); i++) + { + blk_dst = pUseArray->push(); + blk_src = pNewArray->at(i); + strncopy((char *)blk_dst, (char *)blk_src, pUseArray->blocksize() * sizeof(cell_t)); + } + + /* Free resources if necessary. */ + if (free_new_array) + { + delete pNewArray; + } + + /* Return the array we were given. */ + return pUseArray; + } +private: + bool GetMapList(CellArray **ppArray, const char *name, int *pSerial) + { + time_t last_time; + maplist_info_t *pMapList, **ppMapList; + + if ((ppMapList = m_ListLookup.retrieve(name)) == NULL) + { + return false; + } + + pMapList = *ppMapList; + + if (!pMapList->bIsPath) + { + return GetMapList(ppArray, pMapList->path, pSerial); + } + + /* If it is a path, and the path is "*", assume all files must be used. */ + if (strcmp(pMapList->path, "*") == 0) + { + *ppArray = NULL; + return true; + } + + if (m_pMapCycleFile != NULL && strcmp(name, "mapcyclefile") == 0) + { + if (strcmp(m_pMapCycleFile->GetString(), pMapList->path) != 0) + { + strncopy(pMapList->path, m_pMapCycleFile->GetString(), sizeof(pMapList->path)); + pMapList->last_modified_time = 0; + } + } + + if (!g_LibSys.FileTime(pMapList->path, FileTime_LastChange, &last_time) + || last_time > pMapList->last_modified_time) + { + /* Reparse */ + FILE *fp; + cell_t *blk; + char buffer[255]; + + if ((fp = fopen(pMapList->path, "rt")) == NULL) + { + return false; + } + + delete pMapList->pArray; + pMapList->pArray = new CellArray(64); + + while (!feof(fp) && fgets(buffer, sizeof(buffer), fp) != NULL) + { + size_t len = strlen(buffer); + char *ptr = UTIL_TrimWhitespace(buffer, len); + if (*ptr == '\0' + || *ptr == ';' + || strncmp(ptr, "//", 2) == 0) + { + continue; + } + if (!engine->IsMapValid(ptr)) + { + continue; + } + if ((blk = pMapList->pArray->push()) != NULL) + { + strncopy((char *)blk, ptr, 255); + } + } + + fclose(fp); + + pMapList->last_modified_time = last_time; + pMapList->serial = ++m_nSerialChange; + } + + if (pMapList->pArray == NULL || pMapList->pArray->size() == 0) + { + return false; + } + + *pSerial = pMapList->serial; + *ppArray = pMapList->pArray; + + return true; + } + void DumpCache(List<maplist_info_t *> *compat_list) + { + m_ListLookup.clear(); + + List<maplist_info_t *>::iterator iter = m_MapLists.begin(); + while (iter != m_MapLists.end()) + { + if (compat_list != NULL && (*iter)->bIsCompat) + { + compat_list->push_back((*iter)); + } + else + { + delete (*iter)->pArray; + delete (*iter); + } + iter = m_MapLists.erase(iter); + } + } +private: + char m_ConfigFile[PLATFORM_MAX_PATH]; + time_t m_ConfigLastChanged; + ConVar *m_pMapCycleFile; + KTrie<maplist_info_t *> m_ListLookup; + List<maplist_info_t *> m_MapLists; + MapListState m_CurState; + unsigned int m_IgnoreLevel; + maplist_info_t *m_pCurMapList; + int m_nSerialChange; +} s_MapLists; + +static cell_t LoadMapList(IPluginContext *pContext, const cell_t *params) +{ + char *str; + Handle_t hndl; + cell_t *addr, flags; + CellArray *pArray, *pNewArray; + + hndl = params[1]; + pContext->LocalToPhysAddr(params[2], &addr); + pContext->LocalToString(params[3], &str); + flags = params[4]; + + /* Make sure the input Handle is valid */ + pArray = NULL; + if (hndl != BAD_HANDLE) + { + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + + if ((err = g_HandleSys.ReadHandle(hndl, htCellArray, &sec, (void **)&pArray)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + } + + /* Make sure the map list cache is up to date at the root */ + s_MapLists.UpdateCache(); + + /* Try to get the map list. */ + if ((pNewArray = s_MapLists.UpdateMapList(pArray, str, addr, flags)) == NULL) + { + return BAD_HANDLE; + } + + /* If the user wanted a new array, create it now. */ + if (hndl == BAD_HANDLE) + { + if ((hndl = g_HandleSys.CreateHandle(htCellArray, pNewArray, pContext->GetIdentity(), g_pCoreIdent, NULL)) + == BAD_HANDLE) + { + *addr = -1; + delete pNewArray; + return BAD_HANDLE; + } + } + + return hndl; +} + +static cell_t SetMapListCompatBind(IPluginContext *pContext, const cell_t *params) +{ + char *name, *file; + + pContext->LocalToString(params[1], &name); + pContext->LocalToString(params[2], &file); + + s_MapLists.AddOrUpdateDefault(name, file); + + return 1; +} + +REGISTER_NATIVES(mapListNatives) +{ + {"ReadMapList", LoadMapList}, + {"SetMapListCompatBind", SetMapListCompatBind}, + {NULL, NULL}, +}; diff --git a/core/systems/LibrarySys.cpp b/core/systems/LibrarySys.cpp index 373fe223..6b067217 100644 --- a/core/systems/LibrarySys.cpp +++ b/core/systems/LibrarySys.cpp @@ -29,6 +29,7 @@ * Version: $Id$ */ +#include <sys/stat.h> #include <stdio.h> #include <stdarg.h> #include <string.h> @@ -396,3 +397,32 @@ size_t LibrarySystem::GetFileFromPath(char *buffer, size_t maxlength, const char /* We scanned and found no path separator */ return UTIL_Format(buffer, maxlength, "%s", path); } + +bool LibrarySystem::FileTime(const char *path, FileTimeType type, time_t *pTime) +{ +#ifdef PLATFORM_WINDOWS + struct _stat s; + if (_stat(path, &s) != 0) +#elif defined PLATFORM_POSIX + struct stat s; + if (stat(path, &s) != 0) +#endif + { + return false; + } + + if (type == FileTime_LastAccess) + { + *pTime = s.st_atime; + } + else if (type == FileTime_Created) + { + *pTime = s.st_ctime; + } + else if (type == FileTime_LastChange) + { + *pTime = s.st_mtime; + } + + return true; +} diff --git a/core/systems/LibrarySys.h b/core/systems/LibrarySys.h index c1be68c1..cc7aa121 100644 --- a/core/systems/LibrarySys.h +++ b/core/systems/LibrarySys.h @@ -94,6 +94,7 @@ public: const char *GetFileExtension(const char *filename); bool CreateFolder(const char *path); size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path); + bool FileTime(const char *path, FileTimeType type, time_t *pTime); }; extern LibrarySystem g_LibSys; diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index f85c0ee0..6f4f765d 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -49,7 +49,6 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; new Handle:g_MapList; -new g_mapFileTime; #include "basecommands/kick.sp" #include "basecommands/reloadadmins.sp" @@ -82,6 +81,10 @@ public OnPluginStart() g_MapList = CreateMenu(MenuHandler_ChangeMap); SetMenuTitle(g_MapList, "Please select a map"); SetMenuExitBackButton(g_MapList, true); + + decl String:mapListPath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); + SetMapListCompatBind("admin menu", mapListPath); } public OnMapStart() diff --git a/plugins/basecommands/map.sp b/plugins/basecommands/map.sp index 45b00ad9..0bf462b5 100644 --- a/plugins/basecommands/map.sp +++ b/plugins/basecommands/map.sp @@ -82,109 +82,37 @@ public Action:Timer_ChangeMap(Handle:timer, Handle:dp) return Plugin_Stop; } +new Handle:g_map_array = INVALID_HANDLE; +new g_map_serial = -1; + LoadMapList(Handle:menu) { - decl String:mapPath[256]; - BuildPath(Path_SM, mapPath, sizeof(mapPath), "configs/adminmenu_maplist.ini"); + new Handle:map_array; - if (!FileExists(mapPath)) - { - if (g_MapList != INVALID_HANDLE) - { - RemoveAllMenuItems(menu); - } - - return LoadMapFolder(menu); - } - - // If the file hasn't changed, there's no reason to reload - // all of the maps. - new fileTime = GetFileTime(mapPath, FileTime_LastChange); - if (g_mapFileTime == fileTime) + if ((map_array = ReadMapList(g_map_array, + g_map_serial, + "admin menu", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT|MAPLIST_FLAG_MAPSFOLDER)) + != INVALID_HANDLE) { - return GetMenuItemCount(menu); + g_map_array = map_array; } - g_mapFileTime = fileTime; - - // Reset the array - if (g_MapList != INVALID_HANDLE) + if (g_map_array == INVALID_HANDLE) { - RemoveAllMenuItems(menu); - } - - new Handle:file = OpenFile(mapPath, "rt"); - if (file == INVALID_HANDLE) - { - LogError("[SM] Could not open file: %s, reverting to map folder", mapPath); - return LoadMapFolder(menu); - } - - decl String:buffer[256], len; - while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer))) - { - TrimString(buffer); - - if ((len = StrContains(buffer, ".bsp", false)) != -1) - { - buffer[len] = '\0'; - } - - if (buffer[0] == '\0' - || buffer[0] == ';' - || buffer[0] == '/' - || !IsValidConVarChar(buffer[0])) - { - continue; - } - - if (IsMapValid(buffer)) - { - AddMenuItem(menu, buffer, buffer); - } - } - - CloseHandle(file); - - new count = GetMenuItemCount(menu); - - if (!count) - return LoadMapFolder(menu); - else - return count; -} - -LoadMapFolder(Handle:menu) -{ - LogMessage("[SM] Loading menu map list from maps folder"); - - new Handle:mapDir = OpenDirectory("maps/"); - - if (mapDir == INVALID_HANDLE) - { - LogError("[SM] Could not open map directory for reading"); return 0; } - new String:mapName[64]; - new String:buffer[64]; - new FileType:fileType; - new len; + RemoveAllMenuItems(menu); - while(ReadDirEntry(mapDir, mapName, sizeof(mapName), fileType)) + decl String:map_name[64]; + new map_count = GetArraySize(g_map_array); + + for (new i = 0; i < map_count; i++) { - if(fileType == FileType_File) - { - len = strlen(mapName); - - if(SplitString(mapName, ".bsp", buffer, sizeof(buffer)) == len) - { - AddMenuItem(menu, buffer, buffer); - } - } - } - - CloseHandle(mapDir); - - return GetMenuItemCount(menu); + GetArrayString(g_map_array, i, map_name, sizeof(map_name)); + AddMenuItem(menu, map_name, map_name); + } + + return map_count; } diff --git a/plugins/include/sorting.inc b/plugins/include/sorting.inc index 6d49a238..9cb395d6 100644 --- a/plugins/include/sorting.inc +++ b/plugins/include/sorting.inc @@ -48,8 +48,8 @@ enum SortOrder /** * Data types for ADT Array Sorts */ - enum SortType - { +enum SortType +{ Sort_Integer = 0, Sort_Float, Sort_String, @@ -147,7 +147,7 @@ native SortCustom2D(array[][], array_size, SortFunc2D:sortfunc, Handle:hndl=INVA * @param type Data type stored in the ADT Array * @noreturn */ -native SortADTArray(Handle:array, SortOrder:order = Sort_Ascending, SortType:type = Sort_Integer); +native SortADTArray(Handle:array, SortOrder:order, SortType:type); /** * Sort comparison function for ADT Array elements. Function provides you with diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index acbcdeca..f10e9836 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -490,6 +490,70 @@ forward OnLibraryAdded(const String:name[]); */ forward OnLibraryRemoved(const String:name[]); +#define MAPLIST_FLAG_MAPSFOLDER (1<<0) /**< On failure, use all maps in the maps folder. */ +#define MAPLIST_FLAG_CLEARARRAY (1<<1) /**< If an input array is specified, clear it before adding. */ +#define MAPLIST_FLAG_NO_DEFAULT (1<<2) /**< Do not read "default" or "mapcyclefile" on failure. */ + +/** + * Loads a map list to an ADT Array. + * + * A map list is a list of maps from a file. SourceMod allows easy configuration of + * maplists through addons/sourcemod/configs/maplists.cfg. Each entry is given a + * name and a file (for example, "rtv" => "rtv.cfg"), or a name and a redirection + * (for example, "rtv" => "default"). This native will read a map list entry, + * cache the file, and return the list of maps it holds. + * + * Serial change numbers are used to identify if a map list has changed. Thus, if + * you pass a serial change number and it's equal to what SourceMod currently knows + * about the map list, then SourceMod won't reparse the file. + * + * If the maps end up being read from the maps folder (MAPLIST_FLAG_MAPSFOLDER), they + * are automatically sorted in alphabetical, ascending order. + * + * @param array Array to store the map list. If INVALID_HANDLE, a new blank + * array will be created. The blocksize should be at least 16; + * otherwise results may be truncated. Items are added to the array + * as strings. The array is never checked for duplicates, and it is + * not read beforehand. Only the serial number is used to detect + * changes. + * @param str Config name, or "default" for the default map list. Config names + * should be somewhat descriptive. For example, the admin menu uses + * a config name of "admin menu". The list names can be configured + * by users in addons/sourcemod/configs/maplists.cfg. + * @param serial Serial number to identify last known map list change. If -1, the + * the value will not be checked. If the map list has since changed, + * the serial is updated (even if -1 was passed). If there is an error + * finding a valid maplist, then the serial is set to -1. + * @param flags MAPLIST_FLAG flags. + * @return On failure: + * INVALID_HANDLE is returned, the serial is set to -1, and the input + * array (if any) is left unchanged. + * On no change: + INVALID_HANDLE is returned, the serial is unchanged, and the input + array (if any) is left unchanged. + * On success: + * A valid array Handle is returned, containing at least one map string. + * If an array was passed, the return value is equal to the passed Array + * Handle. If the passed array was not cleared, it will have grown by at + * least one item. The serial number is updated to a positive number. + * @error Invalid array Handle that is not INVALID_HANDLE. + */ +native Handle:ReadMapList(Handle:array=INVALID_HANDLE, + &serial=-1, + const String:str[]="default", + flags=MAPLIST_FLAG_CLEARARRAY); + +/** + * Makes a compatibility binding for map lists. For example, if a function previously used + * "clam.cfg" for map lists, this function will insert a "fake" binding to "clam.cfg" that + * will be overridden if it's in the maplists.cfg file. + * + * @param name Configuration name that would be used with ReadMapList(). + * @param file Default file to use. + * @noreturn + */ +native SetMapListCompatBind(const String:name[], const String:file[]); + #include <helpers> #include <entity> diff --git a/public/ILibrarySys.h b/public/ILibrarySys.h index e2cc240c..14dd22c1 100644 --- a/public/ILibrarySys.h +++ b/public/ILibrarySys.h @@ -42,7 +42,14 @@ namespace SourceMod { #define SMINTERFACE_LIBRARYSYS_NAME "ILibrarySys" - #define SMINTERFACE_LIBRARYSYS_VERSION 3 + #define SMINTERFACE_LIBRARYSYS_VERSION 4 + + enum FileTimeType + { + FileTime_LastAccess = 0, /* Last access (not available on FAT) */ + FileTime_Created = 1, /* Creation (not available on FAT) */ + FileTime_LastChange = 2, /* Last modification */ + }; class ILibrary { @@ -202,6 +209,19 @@ namespace SourceMod * @return True on success, false otherwise. */ virtual bool CreateFolder(const char *path) =0; + + /** + * @brief Returns the requested timestamp of a file. + * + * NOTE: On FAT file systems, the access and creation times + * may not be valid. + * + * @param path Path to file. + * @param type FileTimeType of time value to request. + * @param pTime Pointer to store time. + * @return True on success, false on failure. + */ + virtual bool FileTime(const char *path, FileTimeType type, time_t *pTime) =0; }; } From ac058124cc5027f79697cc539880afefda63294c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 02:17:18 +0000 Subject: [PATCH 062/263] added a note about ReadMapList() lifetime --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401745 --- plugins/include/sourcemod.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index f10e9836..6f6f52f4 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -510,6 +510,10 @@ forward OnLibraryRemoved(const String:name[]); * If the maps end up being read from the maps folder (MAPLIST_FLAG_MAPSFOLDER), they * are automatically sorted in alphabetical, ascending order. * + * Arrays created by this function are temporary and must be freed via CloseHandle(). + * Modifying arrays created by this function will not affect future return values or + * or the contents of arrays returned to other plugins. + * * @param array Array to store the map list. If INVALID_HANDLE, a new blank * array will be created. The blocksize should be at least 16; * otherwise results may be truncated. Items are added to the array From 5b2e32da18a59396ddbd838c6189326d0a67b1a6 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Sun, 2 Dec 2007 02:48:22 +0000 Subject: [PATCH 063/263] Added ReadMapList support for sm_votemap in the admin menu --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401746 --- configs/maplists.cfg | 6 +- plugins/basecommands.sp | 9 ++- plugins/basecommands/map.sp | 2 +- plugins/basevotes.sp | 6 +- plugins/basevotes/votemap.sp | 117 +++++++---------------------------- 5 files changed, 38 insertions(+), 102 deletions(-) diff --git a/configs/maplists.cfg b/configs/maplists.cfg index 032b4a7e..a331f995 100644 --- a/configs/maplists.cfg +++ b/configs/maplists.cfg @@ -27,7 +27,11 @@ "target" "mapcyclefile" } - "admin menu" + "sm_map menu" + { + "file" "addons/sourcemod/configs/adminmenu_maplist.ini" + } + "sm_votemap menu" { "file" "addons/sourcemod/configs/adminmenu_maplist.ini" } diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index 6f4f765d..3471bc5a 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -84,16 +84,19 @@ public OnPluginStart() decl String:mapListPath[PLATFORM_MAX_PATH]; BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); - SetMapListCompatBind("admin menu", mapListPath); + SetMapListCompatBind("sm_map menu", mapListPath); } public OnMapStart() { - LoadMapList(g_MapList); - ParseConfigs(); } +public OnConfigsExecuted() +{ + LoadMapList(g_MapList); +} + public OnAdminMenuReady(Handle:topmenu) { /* Block us from being called twice */ diff --git a/plugins/basecommands/map.sp b/plugins/basecommands/map.sp index 0bf462b5..a6c313c6 100644 --- a/plugins/basecommands/map.sp +++ b/plugins/basecommands/map.sp @@ -91,7 +91,7 @@ LoadMapList(Handle:menu) if ((map_array = ReadMapList(g_map_array, g_map_serial, - "admin menu", + "sm_map menu", MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT|MAPLIST_FLAG_MAPSFOLDER)) != INVALID_HANDLE) { diff --git a/plugins/basevotes.sp b/plugins/basevotes.sp index b93c03a7..c6c53df7 100644 --- a/plugins/basevotes.sp +++ b/plugins/basevotes.sp @@ -121,9 +121,13 @@ public OnPluginStart() g_MapList = CreateMenu(MenuHandler_Map, MenuAction_DrawItem); SetMenuTitle(g_MapList, "Please select a map"); SetMenuExitBackButton(g_MapList, true); + + decl String:mapListPath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); + SetMapListCompatBind("sm_votemap menu", mapListPath); } -public OnMapStart() +public OnConfigsExecuted() { g_mapCount = LoadMapList(g_MapList); } diff --git a/plugins/basevotes/votemap.sp b/plugins/basevotes/votemap.sp index c878ce77..50460d2d 100644 --- a/plugins/basevotes/votemap.sp +++ b/plugins/basevotes/votemap.sp @@ -1,5 +1,4 @@ new Handle:g_MapList = INVALID_HANDLE; -new g_mapFileTime; new g_mapCount; new Handle:g_SelectedMaps; @@ -215,111 +214,37 @@ public Action:Command_Votemap(client, args) return Plugin_Handled; } +new Handle:g_map_array = INVALID_HANDLE; +new g_map_serial = -1; + LoadMapList(Handle:menu) { - decl String:mapPath[256]; - BuildPath(Path_SM, mapPath, sizeof(mapPath), "configs/adminmenu_maplist.ini"); + new Handle:map_array; - if (!FileExists(mapPath)) - { - if (g_MapList != INVALID_HANDLE) - { - RemoveAllMenuItems(menu); - } - - return LoadMapFolder(menu); - } - - // If the file hasn't changed, there's no reason to reload - // all of the maps. - new fileTime = GetFileTime(mapPath, FileTime_LastChange); - if (g_mapFileTime == fileTime) + if ((map_array = ReadMapList(g_map_array, + g_map_serial, + "sm_votemap menu", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT|MAPLIST_FLAG_MAPSFOLDER)) + != INVALID_HANDLE) { - return GetMenuItemCount(menu); + g_map_array = map_array; } - g_mapFileTime = fileTime; - - // Reset the array - if (g_MapList != INVALID_HANDLE) + if (g_map_array == INVALID_HANDLE) { - RemoveAllMenuItems(menu); - } - - new Handle:file = OpenFile(mapPath, "rt"); - if (file == INVALID_HANDLE) - { - LogError("[SM] Could not open file: %s, reverting to map folder", mapPath); - return LoadMapFolder(menu); - } - - decl String:buffer[256], len; - while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer))) - { - TrimString(buffer); - - if ((len = StrContains(buffer, ".bsp", false)) != -1) - { - buffer[len] = '\0'; - } - - if (buffer[0] == '\0' - || buffer[0] == ';' - || buffer[0] == '/' - || !IsValidConVarChar(buffer[0]) - || !IsMapValid(buffer)) - { - continue; - } - - AddMenuItem(menu, buffer, buffer); - } - - CloseHandle(file); - - new count = GetMenuItemCount(menu); - - if (!count) - { - return LoadMapFolder(menu); - } - else - { - return count; - } -} - -LoadMapFolder(Handle:menu) -{ - LogMessage("[SM] Loading menu map list from maps folder"); - - new Handle:mapDir = OpenDirectory("maps/"); - - if (mapDir == INVALID_HANDLE) - { - LogError("[SM] Could not open map directory for reading"); return 0; } - new String:mapName[64]; - new String:buffer[64]; - new FileType:fileType; - new len; + RemoveAllMenuItems(menu); - while(ReadDirEntry(mapDir, mapName, sizeof(mapName), fileType)) + decl String:map_name[64]; + new map_count = GetArraySize(g_map_array); + + for (new i = 0; i < map_count; i++) { - if(fileType == FileType_File) - { - len = strlen(mapName); - - if(SplitString(mapName, ".bsp", buffer, sizeof(buffer)) == len) - { - AddMenuItem(menu, buffer, buffer); - } - } - } - - CloseHandle(mapDir); - - return GetMenuItemCount(menu); + GetArrayString(g_map_array, i, map_name, sizeof(map_name)); + AddMenuItem(menu, map_name, map_name); + } + + return map_count; } From 9b2f22fa6d633a2720ecb57893f566cf686a14f3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 04:31:28 +0000 Subject: [PATCH 064/263] fixed the build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401747 --- core/Makefile.ep1 | 2 +- core/Makefile.ep2 | 2 +- core/Makefile.orig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/Makefile.ep1 b/core/Makefile.ep1 index c25cac9c..195f7693 100644 --- a/core/Makefile.ep1 +++ b/core/Makefile.ep1 @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 index 1d3ff939..f0df5e60 100644 --- a/core/Makefile.ep2 +++ b/core/Makefile.ep2 @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ diff --git a/core/Makefile.orig b/core/Makefile.orig index eec753e1..dc2e4c76 100644 --- a/core/Makefile.orig +++ b/core/Makefile.orig @@ -28,7 +28,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplist.cpp \ + smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ From 6ecfa76b013d511f20f0a1edfacfc098a14b9477 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 05:33:57 +0000 Subject: [PATCH 065/263] committed vcproj changes left around --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401748 --- core/msvc8/sourcemod_mm.vcproj | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 823a0756..b059bb32 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1425,7 +1425,15 @@ UniqueIdentifier="{2A750240-7C10-455f-A900-B9A9D362356C}" > <File - RelativePath="..\Makefile" + RelativePath="..\Makefile.ep1" + > + </File> + <File + RelativePath="..\Makefile.ep2" + > + </File> + <File + RelativePath="..\Makefile.orig" > </File> <File From 7e013d83438be876530652b4b297dc5cacf0be3d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 05:38:58 +0000 Subject: [PATCH 066/263] fixed linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401749 --- public/ILibrarySys.h | 1 + 1 file changed, 1 insertion(+) diff --git a/public/ILibrarySys.h b/public/ILibrarySys.h index 14dd22c1..da6d4711 100644 --- a/public/ILibrarySys.h +++ b/public/ILibrarySys.h @@ -38,6 +38,7 @@ */ #include <IShareSys.h> +#include <time.h> namespace SourceMod { From b6bb09e0b8b6246bf15fa103fdf4cdaa46b09017 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 16:30:47 +0000 Subject: [PATCH 067/263] nextmap now use ReadMapList() and OnConfigsExecuted() instead of OnMapStart --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401750 --- plugins/nextmap.sp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index 160c2bce..d1d09568 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -52,7 +52,7 @@ new Handle:g_Cvar_Nextmap; new g_MapPos = -1; new Handle:g_MapList = INVALID_HANDLE; -new g_mapFileTime; +new g_MapListSerial = -1; public OnPluginStart() { @@ -68,12 +68,6 @@ public OnPluginStart() g_MapList = CreateArray(32); - if (!LoadMaps(g_MapList, g_mapFileTime)) - { - LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); - SetFailState("Mapcycle Not Found"); - } - HookUserMessage(g_VGUIMenu, UserMsg_VGUIMenu); g_Cvar_Nextmap = CreateConVar("sm_nextmap", "", "Sets the Next Map", FCVAR_NOTIFY); @@ -91,7 +85,7 @@ public OnPluginStart() SetConVarString(g_Cvar_Nextmap, currentMap); } -public OnMapStart() +public OnConfigsExecuted() { decl String:lastMap[64], String:currentMap[64]; GetConVarString(g_Cvar_Nextmap, lastMap, 64); @@ -102,11 +96,18 @@ public OnMapStart() // not in mapcyclefile. So we keep it set to the last expected nextmap. - ferret if (strcmp(lastMap, currentMap) == 0) { - if (!LoadMaps(g_MapList, g_mapFileTime)) + if (ReadMapList(g_MapList, + g_MapListSerial, + "mapcyclefile", + MAPLIST_FLAG_CLEARARRAY) + == INVALID_HANDLE) { - LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); - SetFailState("Mapcycle Not Found"); - } + if (g_MapListSerial == -1) + { + LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); + SetFailState("Mapcycle Not Found"); + } + } FindAndSetNextMap(); } From ab2ef7a0e02fa82423b8f3433121c4c980b06936 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 16:43:19 +0000 Subject: [PATCH 068/263] nextmap won't default to anything non-mapcyclefile now --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401751 --- plugins/nextmap.sp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index d1d09568..01733f29 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -99,7 +99,7 @@ public OnConfigsExecuted() if (ReadMapList(g_MapList, g_MapListSerial, "mapcyclefile", - MAPLIST_FLAG_CLEARARRAY) + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT) == INVALID_HANDLE) { if (g_MapListSerial == -1) From 98b74c2e21c3b62deccd7c24f89c6ea2f3cf0267 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 16:43:34 +0000 Subject: [PATCH 069/263] fixed a bug where mapcyclefile might not be read properly --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401752 --- core/smn_maplists.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index 6a50b974..27dd4971 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -77,7 +77,6 @@ public: } void OnSourceModAllInitialized() { - m_pMapCycleFile = icvar->FindVar("mapcyclefile"); g_SourceMod.BuildPath(Path_SM, m_ConfigFile, sizeof(m_ConfigFile), "configs/maplists.cfg"); } void OnSourceModShutdown() @@ -157,6 +156,8 @@ public: return; } + m_pMapCycleFile = icvar->FindVar("mapcyclefile"); + /* Dump everything we know about. */ List<maplist_info_t *> compat; DumpCache(&compat); @@ -343,7 +344,7 @@ public: success = GetMapList(&pNewArray, name, &change_serial); } /* If either of the last two conditions failed, try again if we can. */ - if (!success) + if (!success && strcmp(name, "mapcyclefile") != 0) { success = GetMapList(&pNewArray, "mapcyclefile", &change_serial); } From 86a9369c04029e542a7faaf00477491c03b6afaa Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Dec 2007 16:47:10 +0000 Subject: [PATCH 070/263] fixed a crashbug when MAPLIST_FLAG_MAPSFOLDER was not present and all fallbacks failed --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401753 --- core/smn_maplists.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index 27dd4971..bb2b38a5 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -328,7 +328,7 @@ public: CellArray *UpdateMapList(CellArray *pUseArray, const char *name, int *pSerial, unsigned int flags) { int change_serial; - CellArray *pNewArray; + CellArray *pNewArray = NULL; bool success, free_new_array; free_new_array = false; From 049eff8336a6e04977de7bee823fa3714a1ae4c7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 02:27:59 +0000 Subject: [PATCH 071/263] fixed amb1233 - sm_psay from server console --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401754 --- plugins/basechat.sp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/plugins/basechat.sp b/plugins/basechat.sp index 17c803bf..a8ed25f9 100644 --- a/plugins/basechat.sp +++ b/plugins/basechat.sp @@ -317,17 +317,37 @@ public Action:Command_SmPsay(client, args) return Plugin_Handled; decl String:name[64], String:name2[64]; - GetClientName(client, name, sizeof(name)); + + if (client == 0) + { + name = "Console"; + } + else + { + GetClientName(client, name, sizeof(name)); + } + GetClientName(target, name2, sizeof(name2)); - if (g_DoColor) + if (client == 0) + { + PrintToServer("(Private: %s) %s: %s", name2, name, message); + } + else if (g_DoColor) { PrintToChat(client, "\x04(Private: %s) %s: \x01%s", name2, name, message); - PrintToChat(target, "\x04(Private: %s) %s: \x01%s", name2, name, message); } else { PrintToChat(client, "(Private: %s) %s: %s", name2, name, message); + } + + if (g_DoColor) + { + PrintToChat(target, "\x04(Private: %s) %s: \x01%s", name2, name, message); + } + else + { PrintToChat(target, "(Private: %s) %s: %s", name2, name, message); } From 6533e16019a5cf83ac9752d2f3720cc438e60313 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 02:43:42 +0000 Subject: [PATCH 072/263] fixed amb1210 - ReadMapList() broken for "mapcyclefile" --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401755 --- core/smn_maplists.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index bb2b38a5..864751ee 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -500,9 +500,16 @@ private: if (m_pMapCycleFile != NULL && strcmp(name, "mapcyclefile") == 0) { - if (strcmp(m_pMapCycleFile->GetString(), pMapList->path) != 0) + char path[PLATFORM_MAX_PATH]; + g_SourceMod.BuildPath(Path_Game, + path, + sizeof(path), + "%s", + m_pMapCycleFile ? m_pMapCycleFile->GetString() : "mapcycle.txt"); + + if (strcmp(path, pMapList->path) != 0) { - strncopy(pMapList->path, m_pMapCycleFile->GetString(), sizeof(pMapList->path)); + strncopy(pMapList->path, path, sizeof(pMapList->path)); pMapList->last_modified_time = 0; } } From dcb77e0918fa7bcd5206a5ebd5666f007c3bc998 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 03:19:21 +0000 Subject: [PATCH 073/263] addressed amb1230 - BfReadString() erroring on something that should be perfectly valid --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401756 --- core/smn_bitbuffer.cpp | 9 +- plugins/include/bitbuffer.inc | 628 +++++++++++++++++----------------- plugins/nextmap.sp | 7 +- 3 files changed, 328 insertions(+), 316 deletions(-) diff --git a/core/smn_bitbuffer.cpp b/core/smn_bitbuffer.cpp index 56889ba2..fe8479a7 100644 --- a/core/smn_bitbuffer.cpp +++ b/core/smn_bitbuffer.cpp @@ -484,6 +484,7 @@ static cell_t smn_BfReadString(IPluginContext *pCtx, const cell_t *params) HandleError herr; HandleSecurity sec; bf_read *pBitBuf; + int numChars = 0; char *buf; sec.pOwner = NULL; @@ -496,12 +497,14 @@ static cell_t smn_BfReadString(IPluginContext *pCtx, const cell_t *params) } pCtx->LocalToPhysAddr(params[2], (cell_t **)&buf); - if (!pBitBuf->ReadString(buf, params[3], params[4] ? true : false)) + pBitBuf->ReadString(buf, params[3], params[4], &numChars); + + if (pBitBuf->IsOverflowed()) { - return pCtx->ThrowNativeError("Destination string buffer is too short, try increasing its size"); + return -numChars - 1; } - return 1; + return numChars; } static cell_t smn_BfReadEntity(IPluginContext *pCtx, const cell_t *params) diff --git a/plugins/include/bitbuffer.inc b/plugins/include/bitbuffer.inc index 40ee22ac..ddf0790d 100644 --- a/plugins/include/bitbuffer.inc +++ b/plugins/include/bitbuffer.inc @@ -1,312 +1,316 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This file is part of the SourceMod/SourcePawn SDK. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#if defined _bitbuffer_included - #endinput -#endif -#define _bitbuffer_included - -/** - * Writes a single bit to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param bit Bit to write (true for 1, false for 0). - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteBool(Handle:bf, bool:bit); - -/** - * Writes a byte to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param byte Byte to write (value will be written as 8bit). - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteByte(Handle:bf, byte); - -/** - * Writes a byte to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param chr Character to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteChar(Handle:bf, chr); - -/** - * Writes a 16bit integer to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 16bit). - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteShort(Handle:bf, num); - -/** - * Writes a 16bit unsigned integer to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 16bit). - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteWord(Handle:bf, num); - -/** - * Writes a normal integer to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 32bit). - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteNum(Handle:bf, num); - -/** - * Writes a floating point number to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param num Number to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteFloat(Handle:bf, Float:num); - -/** - * Writes a string to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param string Text string to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteString(Handle:bf, const String:string[]); - -/** - * Writes an entity to a writable bitbuffer (bf_write). - * @note This is a wrapper around BfWriteShort(). - * - * @param bf bf_write handle to write to. - * @param ent Entity index to write. - * @noreturn - * @error Invalid or incorrect Handle, or invalid entity. - */ -native BfWriteEntity(Handle:bf, ent); - -/** - * Writes a bit angle to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param angle Angle to write. - * @param numBits Optional number of bits to use. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteAngle(Handle:bf, Float:angle, numBits=8); - -/** - * Writes a coordinate to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param coord Coordinate to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteCoord(Handle:bf, Float:coord); - -/** - * Writes a 3D vector of coordinates to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param coord Coordinate array to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteVecCoord(Handle:bf, Float:coord[3]); - -/** - * Writes a 3D normal vector to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param vec Vector to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteVecNormal(Handle:bf, Float:vec[3]); - -/** - * Writes a 3D angle vector to a writable bitbuffer (bf_write). - * - * @param bf bf_write handle to write to. - * @param angles Angle vector to write. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfWriteAngles(Handle:bf, Float:angles[3]); - -/** - * Reads a single bit from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Bit value read. - * @error Invalid or incorrect Handle. - */ -native bool:BfReadBool(Handle:bf); - -/** - * Reads a byte from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Byte value read (read as 8bit). - * @error Invalid or incorrect Handle. - */ -native BfReadByte(Handle:bf); - -/** - * Reads a character from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Character value read. - * @error Invalid or incorrect Handle. - */ -native BfReadChar(Handle:bf); - -/** - * Reads a 16bit integer from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 16bit). - * @error Invalid or incorrect Handle. - */ -native BfReadShort(Handle:bf); - -/** - * Reads a 16bit unsigned integer from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 16bit). - * @error Invalid or incorrect Handle. - */ -native BfReadWord(Handle:bf); - -/** - * Reads a normal integer to a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 32bit). - * @error Invalid or incorrect Handle. - */ -native BfReadNum(Handle:bf); - -/** - * Reads a floating point number from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Floating point value read. - * @error Invalid or incorrect Handle. - */ -native Float:BfReadFloat(Handle:bf); - -/** - * Reads a string from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param line If true the buffer will be copied until it reaches a '\n' or a null terminator. - * @noreturn - * @error Invalid or incorrect Handle, destination string buffer was too short. - */ -native BfReadString(Handle:bf, String:buffer[], maxlength, bool:line=false); - -/** - * Reads an entity from a readable bitbuffer (bf_read). - * @note This is a wrapper around BfReadShort(). - * - * @param bf bf_read handle to read from. - * @return Entity index read. - * @error Invalid or incorrect Handle. - */ -native BfReadEntity(Handle:bf); - -/** - * Reads a bit angle from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @param numBits Optional number of bits to use. - * @return Angle read. - * @error Invalid or incorrect Handle. - */ -native Float:BfReadAngle(Handle:bf, numBits=8); - -/** - * Reads a coordinate from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @return Coordinate read. - * @error Invalid or incorrect Handle. - */ -native Float:BfReadCoord(Handle:bf); - -/** - * Reads a 3D vector of coordinates from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @param coord Destination coordinate array. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfReadVecCoord(Handle:bf, Float:coord[3]); - -/** - * Reads a 3D normal vector from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @param vec Destination vector array. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfReadVecNormal(Handle:bf, Float:vec[3]); - -/** - * Reads a 3D angle vector from a readable bitbuffer (bf_read). - * - * @param bf bf_read handle to read from. - * @param angles Destination angle vector. - * @noreturn - * @error Invalid or incorrect Handle. - */ -native BfReadAngles(Handle:bf, Float:angles[3]); +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _bitbuffer_included + #endinput +#endif +#define _bitbuffer_included + +/** + * Writes a single bit to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param bit Bit to write (true for 1, false for 0). + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteBool(Handle:bf, bool:bit); + +/** + * Writes a byte to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param byte Byte to write (value will be written as 8bit). + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteByte(Handle:bf, byte); + +/** + * Writes a byte to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param chr Character to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteChar(Handle:bf, chr); + +/** + * Writes a 16bit integer to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 16bit). + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteShort(Handle:bf, num); + +/** + * Writes a 16bit unsigned integer to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 16bit). + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteWord(Handle:bf, num); + +/** + * Writes a normal integer to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 32bit). + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteNum(Handle:bf, num); + +/** + * Writes a floating point number to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param num Number to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteFloat(Handle:bf, Float:num); + +/** + * Writes a string to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param string Text string to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteString(Handle:bf, const String:string[]); + +/** + * Writes an entity to a writable bitbuffer (bf_write). + * @note This is a wrapper around BfWriteShort(). + * + * @param bf bf_write handle to write to. + * @param ent Entity index to write. + * @noreturn + * @error Invalid or incorrect Handle, or invalid entity. + */ +native BfWriteEntity(Handle:bf, ent); + +/** + * Writes a bit angle to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param angle Angle to write. + * @param numBits Optional number of bits to use. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteAngle(Handle:bf, Float:angle, numBits=8); + +/** + * Writes a coordinate to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param coord Coordinate to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteCoord(Handle:bf, Float:coord); + +/** + * Writes a 3D vector of coordinates to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param coord Coordinate array to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteVecCoord(Handle:bf, Float:coord[3]); + +/** + * Writes a 3D normal vector to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param vec Vector to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteVecNormal(Handle:bf, Float:vec[3]); + +/** + * Writes a 3D angle vector to a writable bitbuffer (bf_write). + * + * @param bf bf_write handle to write to. + * @param angles Angle vector to write. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfWriteAngles(Handle:bf, Float:angles[3]); + +/** + * Reads a single bit from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Bit value read. + * @error Invalid or incorrect Handle. + */ +native bool:BfReadBool(Handle:bf); + +/** + * Reads a byte from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Byte value read (read as 8bit). + * @error Invalid or incorrect Handle. + */ +native BfReadByte(Handle:bf); + +/** + * Reads a character from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Character value read. + * @error Invalid or incorrect Handle. + */ +native BfReadChar(Handle:bf); + +/** + * Reads a 16bit integer from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Integer value read (read as 16bit). + * @error Invalid or incorrect Handle. + */ +native BfReadShort(Handle:bf); + +/** + * Reads a 16bit unsigned integer from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Integer value read (read as 16bit). + * @error Invalid or incorrect Handle. + */ +native BfReadWord(Handle:bf); + +/** + * Reads a normal integer to a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Integer value read (read as 32bit). + * @error Invalid or incorrect Handle. + */ +native BfReadNum(Handle:bf); + +/** + * Reads a floating point number from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Floating point value read. + * @error Invalid or incorrect Handle. + */ +native Float:BfReadFloat(Handle:bf); + +/** + * Reads a string from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param line If true the buffer will be copied until it reaches a '\n' or a null terminator. + * @return Number of bytes written to the buffer. If the bitbuffer stream overflowed, + * that is, had no terminator before the end of the stream, then a negative + * number will be returned equal to the number of characters written to the + * buffer minus 1. The buffer will be null terminated regardless of the + * return value. + * @error Invalid or incorrect Handle. + */ +native BfReadString(Handle:bf, String:buffer[], maxlength, bool:line=false); + +/** + * Reads an entity from a readable bitbuffer (bf_read). + * @note This is a wrapper around BfReadShort(). + * + * @param bf bf_read handle to read from. + * @return Entity index read. + * @error Invalid or incorrect Handle. + */ +native BfReadEntity(Handle:bf); + +/** + * Reads a bit angle from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @param numBits Optional number of bits to use. + * @return Angle read. + * @error Invalid or incorrect Handle. + */ +native Float:BfReadAngle(Handle:bf, numBits=8); + +/** + * Reads a coordinate from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Coordinate read. + * @error Invalid or incorrect Handle. + */ +native Float:BfReadCoord(Handle:bf); + +/** + * Reads a 3D vector of coordinates from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @param coord Destination coordinate array. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfReadVecCoord(Handle:bf, Float:coord[3]); + +/** + * Reads a 3D normal vector from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @param vec Destination vector array. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfReadVecNormal(Handle:bf, Float:vec[3]); + +/** + * Reads a 3D angle vector from a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @param angles Destination angle vector. + * @noreturn + * @error Invalid or incorrect Handle. + */ +native BfReadAngles(Handle:bf, Float:angles[3]); diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index 01733f29..b17159a3 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -195,7 +195,12 @@ public Action:UserMsg_VGUIMenu(UserMsg:msg_id, Handle:bf, const players[], playe } decl String:type[15]; - BfReadString(bf, type, sizeof(type)); + + /* If we don't get a valid string, bail out. */ + if (BfReadString(bf, type, sizeof(type)) < 0) + { + return Plugin_Handled; + } if (BfReadByte(bf) == 1 && BfReadByte(bf) == 0 && (strcmp(type, "scores", false) == 0)) { From 0cb387bf0a2fca346b1de165defc107f22fb5c26 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 03:24:33 +0000 Subject: [PATCH 074/263] added amb995 - garrysmod support --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401757 --- gamedata/sdktools.games.txt | 61 +++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index b2d75206..18fa31a6 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -1028,4 +1028,65 @@ } } } + + /* Garry's Mod 10 - Windows only */ + "garrysmod" + { + "Offsets" + { + "GiveNamedItem" + { + "windows" "366" + } + "RemovePlayerItem" + { + "windows" "264" + } + "Weapon_GetSlot" + { + "windows" "262" + } + "Ignite" + { + "windows" "220" + } + "Extinguish" + { + "windows" "221" + } + "Teleport" + { + "windows" "99" + } + "CommitSuicide" + { + "windows" "394" + } + "GetVelocity" + { + "windows" "127" + } + "EyeAngles" + { + "windows" "119" + } + "AcceptInput" + { + "windows" "35" + } + "DispatchKeyValue" + { + "windows" "31" + } + "DispatchKeyValueFloat" + { + "windows" "30" + } + "DispatchKeyValueVector" + { + "windows" "29" + } + } + } } + From 0b8410eae1fb1b0b3f2c8addb51d967a3f6c14e9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 22:55:23 +0000 Subject: [PATCH 075/263] added empires 2.0 support to sdktools --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401758 --- gamedata/sdktools.games.ep2.txt | 1069 +++++++++++++++++++++++++++++-- 1 file changed, 1000 insertions(+), 69 deletions(-) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index 7fc52211..c7c25951 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -25,13 +25,22 @@ } } } - + /* General Temp Entities */ "#default" { "#supported" { - "game" "tf" + "game" "cstrike" + "game" "dod" + "game" "hl2mp" + "game" "ship" + "game" "!Dystopia" + "game" "!Insurgency" + "game" "!Pirates, Vikings and Knights II" + "game" "!SourceForts v1.9.2" + "game" "FortressForever" + "game" "empires" } "Offsets" @@ -53,8 +62,8 @@ } "TE_GetServerClass" { - "windows" "0" - "linux" "0" + "windows" "1" + "linux" "1" } } @@ -73,37 +82,71 @@ } } - /* Create Entity Signatures */ + /* General GameRules */ "#default" { "#supported" { - "game" "tf" + "game" "cstrike" + "game" "dod" + "game" "garrysmod" + "game" "hl2mp" + "game" "ship" + "game" "!Dystopia" + "game" "!Insurgency" + "game" "!Pirates, Vikings and Knights II" + "game" "!SourceForts v1.9.2" + "game" "FortressForever" + "game" "empires" } - + + "Offsets" + { + /* Offset into CreateGameRulesObject */ + "g_pGameRules" + { + "windows" "2" + } + } + "Signatures" { - "DispatchSpawn" + /* This signature sometimes has multiple matches, but this + * does not matter as g_pGameRules is involved in all of them. + * The same g_pGameRules offset applies to each match. + * + * Sometimes this block of bytes is at the beginning of the static + * CreateGameRulesObject function and sometimes it is in the middle + * of an entirely different function. This depends on the game. + */ + "CreateGameRulesObject" { "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x64\x8B\xCB" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01\xFF\x50" } - "CreateEntityByName" + "g_pGameRules" { "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2" + "linux" "@g_pGameRules" } } } - + /* CGlobalEntityList */ "#default" { "#supported" { - "game" "tf" + "game" "cstrike" + "game" "dod" + "game" "garrysmod" + "game" "hl2mp" + "game" "ship" + "game" "!Insurgency" + "game" "!Pirates, Vikings and Knights II" + "game" "!SourceForts v1.9.2" + "game" "FortressForever" + "game" "empires" } "Offsets" @@ -132,61 +175,795 @@ "FindEntityByClassname" { "library" "server" - "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03" + "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x85\xC9\x57\x74\x2A\x8B\x01\xFF\x50\x2A\x8B\x08\x81\xE1\x2A\x2A\x2A\x2A\x83\xC1\x2A\xC1\xE1\x2A\x8B\x3C\x31\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\x9B\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39" "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" } } } - /* General GameRules */ + /* Create Entity Signatures */ "#default" { "#supported" { - "game" "tf" + "game" "cstrike" + "game" "dod" + "game" "hl2mp" + "game" "!Insurgency" + "game" "!Pirates, Vikings and Knights II" + "game" "FortressForever" + "game" "empires" } - - "Offsets" - { - /* Offset into CreateGameRulesObject */ - "g_pGameRules" - { - "windows" "2" - } - } - + "Signatures" { - /* This signature sometimes has multiple matches, but this - * does not matter as g_pGameRules is involved in all of them. - * The same g_pGameRules offset applies to each match. + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" + } + } + } + + /* Create Entity Signatures */ + "!SourceForts v1.9.2" + { + "Signatures" + { + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14\x8B\x16\x8B\xCE" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" + } + } + } + + /* Create Entity Signatures */ + "ship" + { + "Signatures" + { + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60\x8B\0x16" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" + } + } + } + + /* Counter-Strike: Source */ + "cstrike" + { + "Keys" + { + "SlapSoundCount" "3" + "SlapSound1" "player/damage1.wav" + "SlapSound2" "player/damage2.wav" + "SlapSound3" "player/damage3.wav" + } + + "Offsets" + { + "GiveNamedItem" + { + "windows" "329" + "linux" "330" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "CommitSuicide" + { + "windows" "357" + "linux" "358" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + } + + /* Day of Defeat */ + "dod" + { + "Offsets" + { + "GiveNamedItem" + { + "windows" "328" + "linux" "330" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "CommitSuicide" + { + "windows" "356" + "linux" "357" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + } + + /* Half-Life 2: Deathmatch */ + "hl2mp" + { + "Offsets" + { + "GiveNamedItem" + { + "windows" "328" + "linux" "329" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "CommitSuicide" + { + "windows" "356" + "linux" "357" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + } + + /* The Ship */ + "ship" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "316" + "linux" "317" + } + "RemovePlayerItem" + { + "windows" "220" + "linux" "221" + } + "Weapon_GetSlot" + { + "windows" "218" + "linux" "219" + } + "Ignite" + { + "windows" "180" + "linux" "181" + } + "Extinguish" + { + "windows" "181" + "linux" "182" + } + "Teleport" + { + "windows" "100" + "linux" "101" + } + "CommitSuicide" + { + "windows" "343" + "linux" "344" + } + "GetVelocity" + { + "windows" "124" + "linux" "125" + } + "EyeAngles" + { + "windows" "116" + "linux" "117" + } + "DispatchKeyValue" + { + "windows" "35" + "linux" "34" + } + "DispatchKeyValueFloat" + { + "windows" "34" + "linux" "35" + } + "DispatchKeyValueVector" + { + "windows" "33" + "linux" "36" + } + "AcceptInput" + { + "windows" "39" + "linux" "40" + } + "SetEntityModel" + { + "windows" "30" + "linux" "31" + } + + /* Temp Entities */ + "TE_GetServerClass" + { + "windows" "0" + "linux" "0" + } + } + } + + /* Dsytopia */ + "!Dystopia" + { + + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "331" + "linux" "332" + } + "RemovePlayerItem" + { + "windows" "229" + "linux" "230" + } + "Weapon_GetSlot" + { + "windows" "227" + "linux" "228" + } + "Ignite" + { + "windows" "191" + "linux" "192" + } + "Extinguish" + { + "windows" "192" + "linux" "193" + } + "Teleport" + { + "windows" "100" + "linux" "101" + } + "CommitSuicide" + { + "windows" "360" + "linux" "361" + } + "GetVelocity" + { + "windows" "128" + "linux" "129" + } + "EyeAngles" + { + "windows" "120" + "linux" "121" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + /* Offset into CBaseTempEntity constructor. + * On Windows Dsytopia is heavily inlined; we use the function + * surrounding "aCouldnTFindTem" in IDA instead. + */ + "s_pTempEntities" + { + "windows" "70" + } + } + + "Signatures" + { + /* On Windows Dsytopia is heavily inlined; we use the function + * surrounding "aCouldnTFindTem" in IDA instead. + */ + "CBaseTempEntity" + { + "library" "server" + "windows" "\x81\xEC\x84\x00\x00\x00\x56\x8B\xF1\x8B\x46\x6C\x57\x8D\x7E\x6C\x8D\x4C\x24\x08\x83\xC8\x20\x51\x89\x44\x24\x0C\xE8\x2A\x2A\x2A" + } + + /* Dystopia always has to be different, doesn't it * - * Sometimes this block of bytes is at the beginning of the static - * CreateGameRulesObject function and sometimes it is in the middle - * of an entirely different function. This depends on the game. + * This is very similar to the general signature, except that + * it does "mov edx, [eax+2Ch]" before making a call rather than + * doing "call dword ptr [eax+2Ch]" */ "CreateGameRulesObject" { "library" "server" "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2" } - "g_pGameRules" + } + } + + /* Insurgency Generic */ + "!Insurgency" + { + "Offsets" + { + /* CBasePlayer */ + "Ignite" { - "library" "server" - "linux" "@g_pGameRules" + "windows" "174" + "linux" "175" + } + "Extinguish" + { + "windows" "175" + "linux" "176" + } + "Teleport" + { + "windows" "90" + "linux" "91" + } + "GetVelocity" + { + "windows" "115" + "linux" "116" + } + "EyeAngles" + { + "windows" "107" + "linux" "108" + } + "AcceptInput" + { + "windows" "34" + "linux" "35" + } + "s_pTempEntities" + { + "linux" "28" + } + "DispatchKeyValue" + { + "windows" "30" + "linux" "29" + } + "DispatchKeyValueFloat" + { + "windows" "29" + "linux" "30" + } + "DispatchKeyValueVector" + { + "windows" "28" + "linux" "31" + } + "SetEntityModel" + { + "windows" "24" + "linux" "25" } } } - /* Team Fortress 2 Offsets */ - "tf" + /* Insurgency 1.1a Patch for Linux */ + "!Insurgency" { + "CRC" + { + "server" + { + "linux" "6D0E55DC" + } + } + + "Offsets" + { + "s_pTempEntities" + { + "linux" "29" + } + } + } + + /* Pirates, Vikings and Knights II */ + "!Pirates, Vikings and Knights II" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "328" + "linux" "329" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "CommitSuicide" + { + "windows" "356" + "linux" "357" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + /* Temp Entities */ + "s_pTempEntities" + { + "linux" "29" + } + } + } + + /* SourceForts 1.9.2 */ + "!SourceForts v1.9.2" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "294" + "linux" "295" + } + "RemovePlayerItem" + { + "windows" "207" + "linux" "208" + } + "Weapon_GetSlot" + { + "windows" "205" + "linux" "206" + } + "Ignite" + { + "windows" "170" + "linux" "171" + } + "Extinguish" + { + "windows" "171" + "linux" "172" + } + "Teleport" + { + "windows" "90" + "linux" "91" + } + "GetVelocity" + { + "windows" "114" + "linux" "115" + } + "EyeAngles" + { + "windows" "106" + "linux" "107" + } + "DispatchKeyValue" + { + "windows" "30" + "linux" "29" + } + "DispatchKeyValueFloat" + { + "windows" "29" + "linux" "30" + } + "DispatchKeyValueVector" + { + "windows" "28" + "linux" "31" + } + "AcceptInput" + { + "windows" "34" + "linux" "35" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + /* Temp Entities */ + "s_pTempEntities" + { + "linux" "29" + } + "TE_GetServerClass" + { + "windows" "0" + "linux" "0" + } + } + } + + /* Fortress Forever */ + "FortressForever" + { + "Signatures" + { + "CreateGameRulesObject" + { + "library" "server" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x3B\xCB\x74\x07\x8B\x01\x6A\x01\xFF\x50" + } + } + "Offsets" { "GiveNamedItem" { - "windows" "348" - "linux" "349" + "windows" "338" + "linux" "339" } "RemovePlayerItem" { @@ -200,59 +977,213 @@ } "Ignite" { - "windows" "191" - "linux" "192" + "windows" "198" + "linux" "199" } "Extinguish" { - "windows" "195" - "linux" "196" + "windows" "199" + "linux" "200" } "Teleport" { - "windows" "99" - "linux" "100" + "windows" "104" + "linux" "105" } "CommitSuicide" { - "windows" "384" - "linux" "384" + "windows" "366" + "linux" "367" } "GetVelocity" + { + "windows" "136" + "linux" "137" + } + "EyeAngles" { "windows" "128" "linux" "129" } - "EyeAngles" + "AcceptInput" { - "windows" "120" - "linux" "121" + "windows" "39" + "linux" "40" } "DispatchKeyValue" { - "windows" "29" - "linux" "28" + "windows" "35" + "linux" "34" } "DispatchKeyValueFloat" - { - "windows" "28" - "linux" "29" - } - "DispatchKeyValueVector" - { - "windows" "27" - "linux" "30" - } - "SetEntityModel" - { - "windows" "23" - "linux" "24" - } - "AcceptInput" { "windows" "34" "linux" "35" } + "DispatchKeyValueVector" + { + "windows" "33" + "linux" "36" + } + "SetEntityModel" + { + "windows" "27" + "linux" "28" + } + } + } + + /* Garry's Mod 10 - Windows only */ + "garrysmod" + { + "Offsets" + { + "GiveNamedItem" + { + "windows" "366" + } + "RemovePlayerItem" + { + "windows" "264" + } + "Weapon_GetSlot" + { + "windows" "262" + } + "Ignite" + { + "windows" "220" + } + "Extinguish" + { + "windows" "221" + } + "Teleport" + { + "windows" "99" + } + "CommitSuicide" + { + "windows" "394" + } + "GetVelocity" + { + "windows" "127" + } + "EyeAngles" + { + "windows" "119" + } + "AcceptInput" + { + "windows" "35" + } + "DispatchKeyValue" + { + "windows" "31" + } + "DispatchKeyValueFloat" + { + "windows" "30" + } + "DispatchKeyValueVector" + { + "windows" "29" + } + } + } + + /* Empires 2 */ + "empires" + { + + "Offsets" + { + "GiveNamedItem" + { + "windows" "332" + "linux" "333" + } + "RemovePlayerItem" + { + "windows" "230" + "linux" "231" + } + "Weapon_GetSlot" + { + "windows" "228" + "linux" "229" + } + "Ignite" + { + "windows" "192" + "linux" "193" + } + "Extinguish" + { + "windows" "193" + "linux" "194" + } + "Teleport" + { + "windows" "102" + "linux" "103" + } + "CommitSuicide" + { + "windows" "360" + "linux" "361" + } + "GetVelocity" + { + "windows" "130" + "linux" "131" + } + "EyeAngles" + { + "windows" "122" + "linux" "123" + } + "AcceptInput" + { + "windows" "36" + "linux" "37" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + /* Offset into LevelShutdown for CGlobalEntList */ + "gEntList" + { + "windows" "64" + } + } + + "Signatures" + { + "LevelShutdown" + { + "library" "server" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2B\x56\xE8\x2A\x2A\x2A\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x8B\xF1\x74\x0E" + } } } } From 430a7ee54bbac895730333dd375c3514daabc8c0 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 22:57:47 +0000 Subject: [PATCH 076/263] reverted accidental stupid commit --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401759 --- gamedata/sdktools.games.ep2.txt | 1059 ++----------------------------- 1 file changed, 64 insertions(+), 995 deletions(-) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index c7c25951..7fc52211 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -25,22 +25,13 @@ } } } - + /* General Temp Entities */ "#default" { "#supported" { - "game" "cstrike" - "game" "dod" - "game" "hl2mp" - "game" "ship" - "game" "!Dystopia" - "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" - "game" "!SourceForts v1.9.2" - "game" "FortressForever" - "game" "empires" + "game" "tf" } "Offsets" @@ -62,8 +53,8 @@ } "TE_GetServerClass" { - "windows" "1" - "linux" "1" + "windows" "0" + "linux" "0" } } @@ -82,71 +73,37 @@ } } - /* General GameRules */ + /* Create Entity Signatures */ "#default" { "#supported" { - "game" "cstrike" - "game" "dod" - "game" "garrysmod" - "game" "hl2mp" - "game" "ship" - "game" "!Dystopia" - "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" - "game" "!SourceForts v1.9.2" - "game" "FortressForever" - "game" "empires" + "game" "tf" } - - "Offsets" - { - /* Offset into CreateGameRulesObject */ - "g_pGameRules" - { - "windows" "2" - } - } - + "Signatures" { - /* This signature sometimes has multiple matches, but this - * does not matter as g_pGameRules is involved in all of them. - * The same g_pGameRules offset applies to each match. - * - * Sometimes this block of bytes is at the beginning of the static - * CreateGameRulesObject function and sometimes it is in the middle - * of an entirely different function. This depends on the game. - */ - "CreateGameRulesObject" + "DispatchSpawn" { "library" "server" - "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01\xFF\x50" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x64\x8B\xCB" } - "g_pGameRules" + "CreateEntityByName" { "library" "server" - "linux" "@g_pGameRules" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2" } } } - + /* CGlobalEntityList */ "#default" { "#supported" { - "game" "cstrike" - "game" "dod" - "game" "garrysmod" - "game" "hl2mp" - "game" "ship" - "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" - "game" "!SourceForts v1.9.2" - "game" "FortressForever" - "game" "empires" + "game" "tf" } "Offsets" @@ -175,795 +132,61 @@ "FindEntityByClassname" { "library" "server" - "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x85\xC9\x57\x74\x2A\x8B\x01\xFF\x50\x2A\x8B\x08\x81\xE1\x2A\x2A\x2A\x2A\x83\xC1\x2A\xC1\xE1\x2A\x8B\x3C\x31\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\x9B\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39" + "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03" "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" } } } - /* Create Entity Signatures */ + /* General GameRules */ "#default" { "#supported" { - "game" "cstrike" - "game" "dod" - "game" "hl2mp" - "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" - "game" "FortressForever" - "game" "empires" + "game" "tf" } - + + "Offsets" + { + /* Offset into CreateGameRulesObject */ + "g_pGameRules" + { + "windows" "2" + } + } + "Signatures" { - "DispatchSpawn" - { - "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60" - } - "CreateEntityByName" - { - "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" - } - } - } - - /* Create Entity Signatures */ - "!SourceForts v1.9.2" - { - "Signatures" - { - "DispatchSpawn" - { - "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14\x8B\x16\x8B\xCE" - } - "CreateEntityByName" - { - "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" - } - } - } - - /* Create Entity Signatures */ - "ship" - { - "Signatures" - { - "DispatchSpawn" - { - "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60\x8B\0x16" - } - "CreateEntityByName" - { - "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" - } - } - } - - /* Counter-Strike: Source */ - "cstrike" - { - "Keys" - { - "SlapSoundCount" "3" - "SlapSound1" "player/damage1.wav" - "SlapSound2" "player/damage2.wav" - "SlapSound3" "player/damage3.wav" - } - - "Offsets" - { - "GiveNamedItem" - { - "windows" "329" - "linux" "330" - } - "RemovePlayerItem" - { - "windows" "226" - "linux" "227" - } - "Weapon_GetSlot" - { - "windows" "224" - "linux" "225" - } - "Ignite" - { - "windows" "188" - "linux" "189" - } - "Extinguish" - { - "windows" "189" - "linux" "190" - } - "Teleport" - { - "windows" "98" - "linux" "99" - } - "CommitSuicide" - { - "windows" "357" - "linux" "358" - } - "GetVelocity" - { - "windows" "126" - "linux" "127" - } - "EyeAngles" - { - "windows" "118" - "linux" "119" - } - "AcceptInput" - { - "windows" "35" - "linux" "36" - } - "DispatchKeyValue" - { - "windows" "31" - "linux" "30" - } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - } - } - - /* Day of Defeat */ - "dod" - { - "Offsets" - { - "GiveNamedItem" - { - "windows" "328" - "linux" "330" - } - "RemovePlayerItem" - { - "windows" "226" - "linux" "227" - } - "Weapon_GetSlot" - { - "windows" "224" - "linux" "225" - } - "Ignite" - { - "windows" "188" - "linux" "189" - } - "Extinguish" - { - "windows" "189" - "linux" "190" - } - "Teleport" - { - "windows" "98" - "linux" "99" - } - "CommitSuicide" - { - "windows" "356" - "linux" "357" - } - "GetVelocity" - { - "windows" "126" - "linux" "127" - } - "EyeAngles" - { - "windows" "118" - "linux" "119" - } - "AcceptInput" - { - "windows" "35" - "linux" "36" - } - "DispatchKeyValue" - { - "windows" "31" - "linux" "30" - } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - } - } - - /* Half-Life 2: Deathmatch */ - "hl2mp" - { - "Offsets" - { - "GiveNamedItem" - { - "windows" "328" - "linux" "329" - } - "RemovePlayerItem" - { - "windows" "226" - "linux" "227" - } - "Weapon_GetSlot" - { - "windows" "224" - "linux" "225" - } - "Ignite" - { - "windows" "188" - "linux" "189" - } - "Extinguish" - { - "windows" "189" - "linux" "190" - } - "Teleport" - { - "windows" "98" - "linux" "99" - } - "CommitSuicide" - { - "windows" "356" - "linux" "357" - } - "GetVelocity" - { - "windows" "126" - "linux" "127" - } - "EyeAngles" - { - "windows" "118" - "linux" "119" - } - "AcceptInput" - { - "windows" "35" - "linux" "36" - } - "DispatchKeyValue" - { - "windows" "31" - "linux" "30" - } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - } - } - - /* The Ship */ - "ship" - { - "Offsets" - { - /* CBasePlayer */ - "GiveNamedItem" - { - "windows" "316" - "linux" "317" - } - "RemovePlayerItem" - { - "windows" "220" - "linux" "221" - } - "Weapon_GetSlot" - { - "windows" "218" - "linux" "219" - } - "Ignite" - { - "windows" "180" - "linux" "181" - } - "Extinguish" - { - "windows" "181" - "linux" "182" - } - "Teleport" - { - "windows" "100" - "linux" "101" - } - "CommitSuicide" - { - "windows" "343" - "linux" "344" - } - "GetVelocity" - { - "windows" "124" - "linux" "125" - } - "EyeAngles" - { - "windows" "116" - "linux" "117" - } - "DispatchKeyValue" - { - "windows" "35" - "linux" "34" - } - "DispatchKeyValueFloat" - { - "windows" "34" - "linux" "35" - } - "DispatchKeyValueVector" - { - "windows" "33" - "linux" "36" - } - "AcceptInput" - { - "windows" "39" - "linux" "40" - } - "SetEntityModel" - { - "windows" "30" - "linux" "31" - } - - /* Temp Entities */ - "TE_GetServerClass" - { - "windows" "0" - "linux" "0" - } - } - } - - /* Dsytopia */ - "!Dystopia" - { - - "Offsets" - { - /* CBasePlayer */ - "GiveNamedItem" - { - "windows" "331" - "linux" "332" - } - "RemovePlayerItem" - { - "windows" "229" - "linux" "230" - } - "Weapon_GetSlot" - { - "windows" "227" - "linux" "228" - } - "Ignite" - { - "windows" "191" - "linux" "192" - } - "Extinguish" - { - "windows" "192" - "linux" "193" - } - "Teleport" - { - "windows" "100" - "linux" "101" - } - "CommitSuicide" - { - "windows" "360" - "linux" "361" - } - "GetVelocity" - { - "windows" "128" - "linux" "129" - } - "EyeAngles" - { - "windows" "120" - "linux" "121" - } - "AcceptInput" - { - "windows" "35" - "linux" "36" - } - "DispatchKeyValue" - { - "windows" "31" - "linux" "30" - } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - - /* Offset into CBaseTempEntity constructor. - * On Windows Dsytopia is heavily inlined; we use the function - * surrounding "aCouldnTFindTem" in IDA instead. - */ - "s_pTempEntities" - { - "windows" "70" - } - } - - "Signatures" - { - /* On Windows Dsytopia is heavily inlined; we use the function - * surrounding "aCouldnTFindTem" in IDA instead. - */ - "CBaseTempEntity" - { - "library" "server" - "windows" "\x81\xEC\x84\x00\x00\x00\x56\x8B\xF1\x8B\x46\x6C\x57\x8D\x7E\x6C\x8D\x4C\x24\x08\x83\xC8\x20\x51\x89\x44\x24\x0C\xE8\x2A\x2A\x2A" - } - - /* Dystopia always has to be different, doesn't it + /* This signature sometimes has multiple matches, but this + * does not matter as g_pGameRules is involved in all of them. + * The same g_pGameRules offset applies to each match. * - * This is very similar to the general signature, except that - * it does "mov edx, [eax+2Ch]" before making a call rather than - * doing "call dword ptr [eax+2Ch]" + * Sometimes this block of bytes is at the beginning of the static + * CreateGameRulesObject function and sometimes it is in the middle + * of an entirely different function. This depends on the game. */ "CreateGameRulesObject" { "library" "server" "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2" } - } - } - - /* Insurgency Generic */ - "!Insurgency" - { - "Offsets" - { - /* CBasePlayer */ - "Ignite" - { - "windows" "174" - "linux" "175" - } - "Extinguish" - { - "windows" "175" - "linux" "176" - } - "Teleport" - { - "windows" "90" - "linux" "91" - } - "GetVelocity" - { - "windows" "115" - "linux" "116" - } - "EyeAngles" - { - "windows" "107" - "linux" "108" - } - "AcceptInput" - { - "windows" "34" - "linux" "35" - } - "s_pTempEntities" - { - "linux" "28" - } - "DispatchKeyValue" - { - "windows" "30" - "linux" "29" - } - "DispatchKeyValueFloat" - { - "windows" "29" - "linux" "30" - } - "DispatchKeyValueVector" - { - "windows" "28" - "linux" "31" - } - "SetEntityModel" - { - "windows" "24" - "linux" "25" - } - } - } - - /* Insurgency 1.1a Patch for Linux */ - "!Insurgency" - { - "CRC" - { - "server" - { - "linux" "6D0E55DC" - } - } - - "Offsets" - { - "s_pTempEntities" - { - "linux" "29" - } - } - } - - /* Pirates, Vikings and Knights II */ - "!Pirates, Vikings and Knights II" - { - "Offsets" - { - /* CBasePlayer */ - "GiveNamedItem" - { - "windows" "328" - "linux" "329" - } - "RemovePlayerItem" - { - "windows" "226" - "linux" "227" - } - "Weapon_GetSlot" - { - "windows" "224" - "linux" "225" - } - "Ignite" - { - "windows" "188" - "linux" "189" - } - "Extinguish" - { - "windows" "189" - "linux" "190" - } - "Teleport" - { - "windows" "98" - "linux" "99" - } - "CommitSuicide" - { - "windows" "356" - "linux" "357" - } - "GetVelocity" - { - "windows" "126" - "linux" "127" - } - "EyeAngles" - { - "windows" "118" - "linux" "119" - } - "AcceptInput" - { - "windows" "35" - "linux" "36" - } - "DispatchKeyValue" - { - "windows" "31" - "linux" "30" - } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - - /* Temp Entities */ - "s_pTempEntities" - { - "linux" "29" - } - } - } - - /* SourceForts 1.9.2 */ - "!SourceForts v1.9.2" - { - "Offsets" - { - /* CBasePlayer */ - "GiveNamedItem" - { - "windows" "294" - "linux" "295" - } - "RemovePlayerItem" - { - "windows" "207" - "linux" "208" - } - "Weapon_GetSlot" - { - "windows" "205" - "linux" "206" - } - "Ignite" - { - "windows" "170" - "linux" "171" - } - "Extinguish" - { - "windows" "171" - "linux" "172" - } - "Teleport" - { - "windows" "90" - "linux" "91" - } - "GetVelocity" - { - "windows" "114" - "linux" "115" - } - "EyeAngles" - { - "windows" "106" - "linux" "107" - } - "DispatchKeyValue" - { - "windows" "30" - "linux" "29" - } - "DispatchKeyValueFloat" - { - "windows" "29" - "linux" "30" - } - "DispatchKeyValueVector" - { - "windows" "28" - "linux" "31" - } - "AcceptInput" - { - "windows" "34" - "linux" "35" - } - "SetEntityModel" - { - "windows" "25" - "linux" "26" - } - - /* Temp Entities */ - "s_pTempEntities" - { - "linux" "29" - } - "TE_GetServerClass" - { - "windows" "0" - "linux" "0" - } - } - } - - /* Fortress Forever */ - "FortressForever" - { - "Signatures" - { - "CreateGameRulesObject" + "g_pGameRules" { "library" "server" - "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x3B\xCB\x74\x07\x8B\x01\x6A\x01\xFF\x50" + "linux" "@g_pGameRules" } } - + } + + /* Team Fortress 2 Offsets */ + "tf" + { "Offsets" { "GiveNamedItem" { - "windows" "338" - "linux" "339" + "windows" "348" + "linux" "349" } "RemovePlayerItem" { @@ -977,212 +200,58 @@ } "Ignite" { - "windows" "198" - "linux" "199" + "windows" "191" + "linux" "192" } "Extinguish" { - "windows" "199" - "linux" "200" - } - "Teleport" - { - "windows" "104" - "linux" "105" - } - "CommitSuicide" - { - "windows" "366" - "linux" "367" - } - "GetVelocity" - { - "windows" "136" - "linux" "137" - } - "EyeAngles" - { - "windows" "128" - "linux" "129" - } - "AcceptInput" - { - "windows" "39" - "linux" "40" - } - "DispatchKeyValue" - { - "windows" "35" - "linux" "34" - } - "DispatchKeyValueFloat" - { - "windows" "34" - "linux" "35" - } - "DispatchKeyValueVector" - { - "windows" "33" - "linux" "36" - } - "SetEntityModel" - { - "windows" "27" - "linux" "28" - } - } - } - - /* Garry's Mod 10 - Windows only */ - "garrysmod" - { - "Offsets" - { - "GiveNamedItem" - { - "windows" "366" - } - "RemovePlayerItem" - { - "windows" "264" - } - "Weapon_GetSlot" - { - "windows" "262" - } - "Ignite" - { - "windows" "220" - } - "Extinguish" - { - "windows" "221" + "windows" "195" + "linux" "196" } "Teleport" { "windows" "99" + "linux" "100" } "CommitSuicide" { - "windows" "394" + "windows" "384" + "linux" "384" } "GetVelocity" { - "windows" "127" + "windows" "128" + "linux" "129" } "EyeAngles" { - "windows" "119" - } - "AcceptInput" - { - "windows" "35" + "windows" "120" + "linux" "121" } "DispatchKeyValue" { - "windows" "31" + "windows" "29" + "linux" "28" } "DispatchKeyValueFloat" { - "windows" "30" + "windows" "28" + "linux" "29" } "DispatchKeyValueVector" { - "windows" "29" - } - } - } - - /* Empires 2 */ - "empires" - { - - "Offsets" - { - "GiveNamedItem" - { - "windows" "332" - "linux" "333" - } - "RemovePlayerItem" - { - "windows" "230" - "linux" "231" - } - "Weapon_GetSlot" - { - "windows" "228" - "linux" "229" - } - "Ignite" - { - "windows" "192" - "linux" "193" - } - "Extinguish" - { - "windows" "193" - "linux" "194" - } - "Teleport" - { - "windows" "102" - "linux" "103" - } - "CommitSuicide" - { - "windows" "360" - "linux" "361" - } - "GetVelocity" - { - "windows" "130" - "linux" "131" - } - "EyeAngles" - { - "windows" "122" - "linux" "123" - } - "AcceptInput" - { - "windows" "36" - "linux" "37" - } - "DispatchKeyValue" - { - "windows" "31" + "windows" "27" "linux" "30" } - "DispatchKeyValueFloat" - { - "windows" "30" - "linux" "31" - } - "DispatchKeyValueVector" - { - "windows" "29" - "linux" "32" - } "SetEntityModel" { - "windows" "25" - "linux" "26" + "windows" "23" + "linux" "24" } - - /* Offset into LevelShutdown for CGlobalEntList */ - "gEntList" + "AcceptInput" { - "windows" "64" - } - } - - "Signatures" - { - "LevelShutdown" - { - "library" "server" - "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2B\x56\xE8\x2A\x2A\x2A\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x8B\xF1\x74\x0E" + "windows" "34" + "linux" "35" } } } From 02c062a380a454dfa4a77c311e5cb02e10342429 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Dec 2007 23:00:34 +0000 Subject: [PATCH 077/263] added empires mod support to sdktools --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401760 --- gamedata/sdktools.games.txt | 98 +++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 18fa31a6..e2a6815d 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -40,6 +40,7 @@ "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" "game" "FortressForever" + "game" "empires" } "Offsets" @@ -96,6 +97,7 @@ "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" "game" "FortressForever" + "game" "empires" } "Offsets" @@ -144,6 +146,7 @@ "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" "game" "FortressForever" + "game" "empires" } "Offsets" @@ -189,6 +192,7 @@ "game" "!Insurgency" "game" "!Pirates, Vikings and Knights II" "game" "FortressForever" + "game" "empires" } "Signatures" @@ -1088,5 +1092,99 @@ } } } + + /* Empires 2 */ + "empires" + { + + "Offsets" + { + "GiveNamedItem" + { + "windows" "332" + "linux" "333" + } + "RemovePlayerItem" + { + "windows" "230" + "linux" "231" + } + "Weapon_GetSlot" + { + "windows" "228" + "linux" "229" + } + "Ignite" + { + "windows" "192" + "linux" "193" + } + "Extinguish" + { + "windows" "193" + "linux" "194" + } + "Teleport" + { + "windows" "102" + "linux" "103" + } + "CommitSuicide" + { + "windows" "360" + "linux" "361" + } + "GetVelocity" + { + "windows" "130" + "linux" "131" + } + "EyeAngles" + { + "windows" "122" + "linux" "123" + } + "AcceptInput" + { + "windows" "36" + "linux" "37" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + /* Offset into LevelShutdown for CGlobalEntList */ + "gEntList" + { + "windows" "64" + } + } + + "Signatures" + { + "LevelShutdown" + { + "library" "server" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2B\x56\xE8\x2A\x2A\x2A\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x8B\xF1\x74\x0E" + } + } + } } From 0d6504b4a611116ada7378c2f46a9515bcd3bd3c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 01:01:05 +0000 Subject: [PATCH 078/263] added empires to the list of mods that supports ShowMenu --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401761 --- gamedata/core.games.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index 0077e39f..e9fc883b 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -54,6 +54,7 @@ "game" "sourceforts" "game" "!Insurgency" "game" "tf" + "game" "empires" } "Keys" From 3dd4c767c15fc4eef56dbf4951982c75ac56aec1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 01:08:03 +0000 Subject: [PATCH 079/263] added @t, @ts, @ct, @cts target patterns --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401762 --- extensions/cstrike/extension.cpp | 113 +++++++++++++++++++++++++++++++ extensions/cstrike/extension.h | 6 +- 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/extensions/cstrike/extension.cpp b/extensions/cstrike/extension.cpp index d0b8daa4..63943f77 100644 --- a/extensions/cstrike/extension.cpp +++ b/extensions/cstrike/extension.cpp @@ -32,6 +32,7 @@ #include "extension.h" #include "RegNatives.h" #include "timeleft.h" +#include "iplayerinfo.h" /** * @file extension.cpp @@ -73,6 +74,8 @@ bool CStrike::SDK_OnLoad(char *error, size_t maxlength, bool late) sharesys->OverrideNatives(myself, g_CS_PrintHintText); } + playerhelpers->RegisterCommandTargetProcessor(this); + return true; } @@ -94,6 +97,7 @@ void CStrike::SDK_OnUnload() } g_RegNatives.UnregisterAll(); gameconfs->CloseGameConfigFile(g_pGameConf); + playerhelpers->UnregisterCommandTargetProcessor(this); } void CStrike::SDK_OnAllLoaded() @@ -127,3 +131,112 @@ void CStrike::NotifyInterfaceDrop(SMInterface *pInterface) { g_RegNatives.UnregisterAll(); } + +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + size_t len = vsnprintf(buffer, maxlength, fmt, ap); + va_end(ap); + + if (len >= maxlength) + { + buffer[maxlength - 1] = '\0'; + return (maxlength - 1); + } + else + { + return len; + } +} + +bool CStrike::ProcessCommandTarget(cmd_target_info_t *info) +{ + int max_clients; + IPlayerInfo *pInfo; + unsigned int team_index = 0; + IGamePlayer *pPlayer, *pAdmin; + + if ((info->flags & COMMAND_FILTER_NO_MULTI) == COMMAND_FILTER_NO_MULTI) + { + return false; + } + + if (info->admin) + { + if ((pAdmin = playerhelpers->GetGamePlayer(info->admin)) == NULL) + { + return false; + } + if (!pAdmin->IsInGame()) + { + return false; + } + } + else + { + pAdmin = NULL; + } + + if (strcmp(info->pattern, "@ct") == 0 || strcmp(info->pattern, "@cts") == 0) + { + team_index = 3; + } + else if (strcmp(info->pattern, "@t") == 0 || strcmp(info->pattern, "@ts") == 0) + { + team_index = 2; + } + + info->num_targets = 0; + + max_clients = playerhelpers->GetMaxClients(); + for (int i = 1; + i <= max_clients && (cell_t)info->num_targets < info->max_targets; + i++) + { + if ((pPlayer = playerhelpers->GetGamePlayer(i)) == NULL) + { + continue; + } + if (!pPlayer->IsInGame()) + { + continue; + } + if ((pInfo = pPlayer->GetPlayerInfo()) == NULL) + { + continue; + } + if (pInfo->GetTeamIndex() != team_index) + { + continue; + } + if (playerhelpers->FilterCommandTarget(pAdmin, pPlayer, info->flags) + != COMMAND_TARGET_VALID) + { + continue; + } + info->targets[info->num_targets] = i; + info->num_targets++; + } + + if (info->num_targets == 0) + { + info->reason = COMMAND_TARGET_EMPTY_FILTER; + } + else + { + info->reason = COMMAND_TARGET_VALID; + } + + info->target_name_style = COMMAND_TARGETNAME_RAW; + if (team_index == 2) + { + UTIL_Format(info->target_name, info->target_name_maxlength, "Terrorists"); + } + else if (team_index == 3) + { + UTIL_Format(info->target_name, info->target_name_maxlength, "CTs"); + } + + return true; +} diff --git a/extensions/cstrike/extension.h b/extensions/cstrike/extension.h index acf301f3..dc77a009 100644 --- a/extensions/cstrike/extension.h +++ b/extensions/cstrike/extension.h @@ -44,7 +44,9 @@ * @brief Sample implementation of the SDK Extension. * Note: Uncomment one of the pre-defined virtual functions in order to use it. */ -class CStrike : public SDKExtension +class CStrike : + public SDKExtension, + public ICommandTargetProcessor { public: /** @@ -84,6 +86,8 @@ public: void NotifyInterfaceDrop(SMInterface *pInterface); bool QueryInterfaceDrop(SMInterface *pInterface); +public: + bool ProcessCommandTarget(cmd_target_info_t *info); public: #if defined SMEXT_CONF_METAMOD /** From b569bd8f97195a89a4238c14f340bf423fb6d411 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 01:17:15 +0000 Subject: [PATCH 080/263] - fixed a bug where sdktools did not filter @aim properly (:. immunity was ignored) - fixed a bug where sdktools did not check to see if g_pBinTools was valid before using it --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401763 --- extensions/sdktools/extension.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index 290ac288..3a8d7450 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -195,6 +195,11 @@ void SDKTools::SDK_OnAllLoaded() { SM_GET_LATE_IFACE(BINTOOLS, g_pBinTools); + if (!g_pBinTools) + { + return; + } + g_TEManager.Initialize(); s_TempEntHooks.Initialize(); s_SoundHooks.Initialize(); @@ -293,11 +298,20 @@ bool SDKTools::ProcessCommandTarget(cmd_target_info_t *info) int player_index; if ((player_index = GetClientAimTarget(pAdmin->GetEdict(), true)) < 1) { - return false; + info->reason = COMMAND_TARGET_NONE; + info->num_targets = 0; + return true; } IGamePlayer *pTarget = playerhelpers->GetGamePlayer(info->admin); + info->reason = playerhelpers->FilterCommandTarget(pAdmin, pTarget, info->flags); + if (info->reason != COMMAND_TARGET_VALID) + { + info->num_targets = 0; + return true; + } + info->targets[0] = player_index; info->num_targets = 1; info->reason = COMMAND_TARGET_VALID; From ec116917345ae0bc7ee54dbf983ff5bb7596dd07 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 02:10:02 +0000 Subject: [PATCH 081/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401764 --- extensions/cstrike/extension.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/cstrike/extension.cpp b/extensions/cstrike/extension.cpp index 63943f77..20675935 100644 --- a/extensions/cstrike/extension.cpp +++ b/extensions/cstrike/extension.cpp @@ -206,7 +206,7 @@ bool CStrike::ProcessCommandTarget(cmd_target_info_t *info) { continue; } - if (pInfo->GetTeamIndex() != team_index) + if (pInfo->GetTeamIndex() != (int)team_index) { continue; } From fc53efb2881380ceb6357bc7d060c47491a9405e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 02:35:46 +0000 Subject: [PATCH 082/263] fixed amb1241 - IVEngineServer implementation of client querying is completely broken on orange box, thanks valve --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401765 --- core/ConVarManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index 5e9a5ff4..594ccfd8 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -63,11 +63,11 @@ void ConVarManager::OnSourceModAllInitialized() */ #if !defined ORANGEBOX_BUILD if (g_SMAPI->GetGameDLLVersion() >= 6) -#endif { SH_ADD_HOOK_MEMFUNC(IServerGameDLL, OnQueryCvarValueFinished, gamedll, this, &ConVarManager::OnQueryCvarValueFinished, false); m_bIsDLLQueryHooked = true; } +#endif HandleAccess sec; From e07fa5bb28f54235af1b41dfcf024f8f1556fd51 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 03:10:03 +0000 Subject: [PATCH 083/263] universal INS detection for radio menus --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401766 --- gamedata/core.games.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index e9fc883b..51b7448c 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -52,7 +52,8 @@ "game" "cstrike" "game" "dod" "game" "sourceforts" - "game" "!Insurgency" + "game" "insurgency" + "game" "Insurgency" "game" "tf" "game" "empires" } From 97e8e16012a8b19094d2acf6d4fc7d46c2ac815e Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Tue, 4 Dec 2007 03:29:02 +0000 Subject: [PATCH 084/263] Typo fixed --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401767 --- translations/rockthevote.phrases.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/rockthevote.phrases.txt b/translations/rockthevote.phrases.txt index ebe48b11..c169ead0 100644 --- a/translations/rockthevote.phrases.txt +++ b/translations/rockthevote.phrases.txt @@ -31,7 +31,7 @@ "en" "The minimal number of players required has not been met." } - "Map Already in Vote" + "Map Already In Vote" { "#format" "{1:s}" "en" "Map '{1}' already in the Rock the Vote list." From c5b6c63ec6915549a849b461e125a8c6e502c5e1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 15:27:04 +0000 Subject: [PATCH 085/263] added ability to use game name from gameinfo.txt in gamedata files --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401768 --- core/GameConfigs.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index b5b5ca8f..3811c3fa 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -51,6 +51,7 @@ GameConfigManager g_GameConfigs; IGameConfig *g_pGameConf = NULL; char g_Game[256]; char g_GameDesc[256] = {'!', '\0'}; +char g_GameName[256] = {'$', '\0'}; #define PSTATE_NONE 0 #define PSTATE_GAMES 1 @@ -131,7 +132,8 @@ SMCResult CGameConfig::ReadSMC_NewSection(const SMCStates *states, const char *n if ((strcmp(name, "*") == 0) || (strcmp(name, "#default") == 0) || (strcasecmp(name, g_Game) == 0) - || (strcasecmp(name, g_GameDesc) == 0)) + || (strcasecmp(name, g_GameDesc) == 0) + || (strcasecmp(name, g_GameName) == 0)) { bShouldBeReadingDefault = true; m_ParseState = PSTATE_GAMEDEFS; @@ -271,7 +273,10 @@ SMCResult CGameConfig::ReadSMC_KeyValue(const SMCStates *states, const char *key sm_trie_replace(m_pKeys, key, (void *)id); } else if (m_ParseState == PSTATE_GAMEDEFS_SUPPORTED) { if (strcmp(key, "game") == 0 - && (strcasecmp(value, g_Game) == 0 || strcasecmp(value, g_GameDesc) == 0)) + && (strcasecmp(value, g_Game) == 0 + || strcasecmp(value, g_GameDesc) == 0 + || strcasecmp(value, g_GameName) == 0) + ) { bShouldBeReadingDefault = true; } @@ -585,6 +590,17 @@ void GameConfigManager::OnSourceModStartup(bool late) strncopy(g_Game, g_SourceMod.GetGameFolderName(), sizeof(g_Game)); strncopy(g_GameDesc + 1, SERVER_CALL(GetGameDescription)(), sizeof(g_GameDesc) - 1); + + KeyValues *pGameInfo = new KeyValues("GameInfo"); + if (pGameInfo->LoadFromFile(basefilesystem, "gameinfo.txt")) + { + const char *str; + if ((str = pGameInfo->GetString("game", NULL)) != NULL) + { + strncopy(g_GameName + 1, str, sizeof(g_GameName) - 1); + } + } + pGameInfo->deleteThis(); } void GameConfigManager::OnSourceModAllInitialized() From 8eb040a832c1e25c890db358d90186e9bd8b0986 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 15:29:37 +0000 Subject: [PATCH 086/263] added sdktools support for sourceforts 1.9.3 removed old s_pTempEntities offsets for linux --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401769 --- gamedata/sdktools.games.txt | 185 +++++++++++++++++++++--------------- 1 file changed, 110 insertions(+), 75 deletions(-) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index e2a6815d..5895b6ff 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -39,6 +39,7 @@ "game" "!Insurgency" "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" + "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" } @@ -96,6 +97,7 @@ "game" "!Insurgency" "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" + "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" } @@ -145,6 +147,7 @@ "game" "!Insurgency" "game" "!Pirates, Vikings and Knights II" "game" "!SourceForts v1.9.2" + "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" } @@ -191,6 +194,7 @@ "game" "hl2mp" "game" "!Insurgency" "game" "!Pirates, Vikings and Knights II" + "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" } @@ -212,46 +216,6 @@ } } - /* Create Entity Signatures */ - "!SourceForts v1.9.2" - { - "Signatures" - { - "DispatchSpawn" - { - "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14\x8B\x16\x8B\xCE" - } - "CreateEntityByName" - { - "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" - } - } - } - - /* Create Entity Signatures */ - "ship" - { - "Signatures" - { - "DispatchSpawn" - { - "library" "server" - "linux" "@_Z13DispatchSpawnP11CBaseEntity" - "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60\x8B\0x16" - } - "CreateEntityByName" - { - "library" "server" - "linux" "@_Z18CreateEntityByNamePKci" - "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" - } - } - } - /* Counter-Strike: Source */ "cstrike" { @@ -578,6 +542,22 @@ "linux" "0" } } + + "Signatures" + { + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60\x8B\0x16" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" + } + } } /* Dsytopia */ @@ -729,10 +709,6 @@ "windows" "34" "linux" "35" } - "s_pTempEntities" - { - "linux" "28" - } "DispatchKeyValue" { "windows" "30" @@ -756,26 +732,6 @@ } } - /* Insurgency 1.1a Patch for Linux */ - "!Insurgency" - { - "CRC" - { - "server" - { - "linux" "6D0E55DC" - } - } - - "Offsets" - { - "s_pTempEntities" - { - "linux" "29" - } - } - } - /* Pirates, Vikings and Knights II */ "!Pirates, Vikings and Knights II" { @@ -852,12 +808,6 @@ "windows" "25" "linux" "26" } - - /* Temp Entities */ - "s_pTempEntities" - { - "linux" "29" - } } } @@ -933,17 +883,28 @@ "linux" "26" } - /* Temp Entities */ - "s_pTempEntities" - { - "linux" "29" - } "TE_GetServerClass" { "windows" "0" "linux" "0" } } + + "Signatures" + { + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14\x8B\x16\x8B\xCE" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0" + } + } } /* Fortress Forever */ @@ -1186,5 +1147,79 @@ } } } + + /* SourceForts 1.9.3 */ + "$SourceForts v1.9.3" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "328" + "linux" "329" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + } } From 737a359990aa3ba4e51f343bdeb3e128633304e1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 4 Dec 2007 15:58:07 +0000 Subject: [PATCH 087/263] - removed ancient bcompat shim for translations/core.cfg file - fixed msvc8 whining about BfReadString --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401770 --- core/Translator.cpp | 15 +-------------- core/smn_bitbuffer.cpp | 2 +- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/core/Translator.cpp b/core/Translator.cpp index eb6bc92e..938ad8af 100644 --- a/core/Translator.cpp +++ b/core/Translator.cpp @@ -729,20 +729,7 @@ void Translator::OnSourceModAllInitialized() unsigned int id; - //backwards compatibility shim - /* hack -- if core.cfg exists, exec it instead. */ - char path[PLATFORM_MAX_PATH]; - g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "translations/core.cfg"); - - if (g_LibSys.PathExists(path)) - { - id = FindOrAddPhraseFile("core.cfg"); - } - else - { - id = FindOrAddPhraseFile("core.phrases.txt"); - } - + id = FindOrAddPhraseFile("core.phrases.txt"); g_pCorePhraseID = id; g_pCorePhrases = GetFileByIndex(id); } diff --git a/core/smn_bitbuffer.cpp b/core/smn_bitbuffer.cpp index fe8479a7..7db96957 100644 --- a/core/smn_bitbuffer.cpp +++ b/core/smn_bitbuffer.cpp @@ -497,7 +497,7 @@ static cell_t smn_BfReadString(IPluginContext *pCtx, const cell_t *params) } pCtx->LocalToPhysAddr(params[2], (cell_t **)&buf); - pBitBuf->ReadString(buf, params[3], params[4], &numChars); + pBitBuf->ReadString(buf, params[3], params[4] ? true : false, &numChars); if (pBitBuf->IsOverflowed()) { From 41ac66fceb864a4f54666eb67f83fa67e618efe9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 5 Dec 2007 15:38:45 +0000 Subject: [PATCH 088/263] deprecated IsValidHandle() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401771 --- plugins/include/handles.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/include/handles.inc b/plugins/include/handles.inc index e0c93600..68e437a1 100644 --- a/plugins/include/handles.inc +++ b/plugins/include/handles.inc @@ -92,4 +92,5 @@ native Handle:CloneHandle(Handle:hndl, Handle:plugin=INVALID_HANDLE); * @param hndl Handle to test for validity. * @return True if handle is valid, false otherwise. */ +#pragma deprecated Do not use this function. native bool:IsValidHandle(Handle:hndl); From 5ae2a5c4fed27a621f03cc424e8fd80a25197d0d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 5 Dec 2007 18:07:18 +0000 Subject: [PATCH 089/263] sm_dump_handles now shows memory usage --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401772 --- core/CellArray.h | 5 ++ core/ConVarManager.cpp | 6 ++ core/ConVarManager.h | 1 + core/MenuManager.cpp | 20 ++++++- core/MenuManager.h | 1 + core/MenuStyle_Base.cpp | 7 +++ core/MenuStyle_Base.h | 1 + core/MenuStyle_Radio.cpp | 17 ++++++ core/MenuStyle_Radio.h | 3 + core/MenuStyle_Valve.cpp | 15 +++++ core/MenuStyle_Valve.h | 3 + core/sm_memtable.h | 4 ++ core/sm_trie.cpp | 5 ++ core/sm_trie.h | 1 + core/smn_adt_array.cpp | 6 ++ core/smn_functions.cpp | 6 ++ core/smn_keyvalues.cpp | 25 +++++++++ core/smn_menus.cpp | 6 ++ core/smn_textparse.cpp | 6 ++ core/smn_usermsgs.cpp | 10 ++++ core/systems/HandleSys.cpp | 21 ++++++- core/systems/HandleSys.h | 2 + core/systems/PluginSys.cpp | 80 +++++++++++++++++++++++++++ core/systems/PluginSys.h | 2 + extensions/topmenus/TopMenu.cpp | 23 ++++++++ extensions/topmenus/TopMenu.h | 2 + extensions/topmenus/sdk/sm_memtable.h | 4 ++ extensions/topmenus/smn_topmenus.cpp | 5 ++ public/IHandleSys.h | 19 ++++++- public/IMenuManager.h | 23 +++++++- public/sm_trie_tpl.h | 7 +++ 31 files changed, 330 insertions(+), 6 deletions(-) diff --git a/core/CellArray.h b/core/CellArray.h index c9ee2831..f8925a60 100644 --- a/core/CellArray.h +++ b/core/CellArray.h @@ -156,6 +156,11 @@ public: return m_Data; } + size_t mem_usage() + { + return m_AllocSize * m_BlockSize * sizeof(cell_t); + } + private: bool GrowIfNeeded(size_t count) { diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index 594ccfd8..f245efff 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -241,6 +241,12 @@ void ConVarManager::OnHandleDestroy(HandleType_t type, void *object) { } +bool ConVarManager::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) +{ + *pSize = sizeof(ConVar); + return true; +} + void ConVarManager::OnRootConsoleCommand(const char *cmdname, const CCommand &command) { int argcount = command.ArgC(); diff --git a/core/ConVarManager.h b/core/ConVarManager.h index d9cfea24..6757bbde 100644 --- a/core/ConVarManager.h +++ b/core/ConVarManager.h @@ -82,6 +82,7 @@ public: // SMGlobalClass void OnSourceModVSPReceived(); public: // IHandleTypeDispatch void OnHandleDestroy(HandleType_t type, void *object); + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize); public: // IPluginsListener void OnPluginUnloaded(IPlugin *plugin); public: //IRootConsoleCommand diff --git a/core/MenuManager.cpp b/core/MenuManager.cpp index e0846f5e..c68fe454 100644 --- a/core/MenuManager.cpp +++ b/core/MenuManager.cpp @@ -81,11 +81,29 @@ void MenuManager::OnHandleDestroy(HandleType_t type, void *object) { IBaseMenu *menu = (IBaseMenu *)object; menu->Destroy(false); - } else if (type == m_StyleType) { + } + else if (type == m_StyleType) + { /* Do nothing */ } } +bool MenuManager::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) +{ + if (type == m_MenuType) + { + *pSize = ((IBaseMenu *)object)->GetApproxMemUsage(); + return true; + } + else + { + *pSize = ((IMenuStyle *)object)->GetApproxMemUsage(); + return true; + } + + return false; +} + Handle_t MenuManager::CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner) { if (m_MenuType == NO_HANDLE_TYPE) diff --git a/core/MenuManager.h b/core/MenuManager.h index 47c07360..c3f97af3 100644 --- a/core/MenuManager.h +++ b/core/MenuManager.h @@ -91,6 +91,7 @@ public: unsigned int GetRemainingVoteDelay(); public: //IHandleTypeDispatch void OnHandleDestroy(HandleType_t type, void *object); + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize); public: HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu); HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style); diff --git a/core/MenuStyle_Base.cpp b/core/MenuStyle_Base.cpp index fca46e6a..62f427eb 100644 --- a/core/MenuStyle_Base.cpp +++ b/core/MenuStyle_Base.cpp @@ -828,3 +828,10 @@ IMenuHandler *CBaseMenu::GetHandler() { return m_pHandler; } + +unsigned int CBaseMenu::GetBaseMemUsage() +{ + return m_Title.size() + + m_Strings.GetMemTable()->GetMemUsage() + + (m_items.size() * sizeof(CItem)); +} diff --git a/core/MenuStyle_Base.h b/core/MenuStyle_Base.h index 8d3df647..9cfe95a3 100644 --- a/core/MenuStyle_Base.h +++ b/core/MenuStyle_Base.h @@ -135,6 +135,7 @@ public: virtual unsigned int GetMenuOptionFlags(); virtual void SetMenuOptionFlags(unsigned int flags); virtual IMenuHandler *GetHandler(); + unsigned int GetBaseMemUsage(); private: void InternalDelete(); protected: diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index a1eee8ec..5efb3115 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -261,6 +261,11 @@ void CRadioStyle::ProcessWatchList() } } +unsigned int CRadioStyle::GetApproxMemUsage() +{ + return sizeof(CRadioStyle) + (sizeof(CRadioMenuPlayer) * 257); +} + CRadioDisplay::CRadioDisplay() { Reset(); @@ -494,6 +499,13 @@ bool CRadioDisplay::SetSelectableKeys(unsigned int keymap) return true; } +unsigned int CRadioDisplay::GetApproxMemUsage() +{ + return sizeof(CRadioDisplay) + + m_BufferText.size() + + m_Title.size(); +} + CRadioMenu::CRadioMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner) : CBaseMenu(pHandler, &g_RadioMenuStyle, pOwner) { @@ -542,6 +554,11 @@ void CRadioMenu::Cancel_Finally() g_RadioMenuStyle.CancelMenu(this); } +unsigned int CRadioMenu::GetApproxMemUsage() +{ + return sizeof(CRadioMenu) + GetBaseMemUsage(); +} + const char *g_RadioNumTable[11] = { "0. ", "1. ", "2. ", "3. ", "4. ", "5. ", "6. ", "7. ", "8. ", "9. ", "0. " diff --git a/core/MenuStyle_Radio.h b/core/MenuStyle_Radio.h index e8ba85f5..826c5de5 100644 --- a/core/MenuStyle_Radio.h +++ b/core/MenuStyle_Radio.h @@ -82,6 +82,7 @@ public: //IMenuStyle IMenuPanel *CreatePanel(); IBaseMenu *CreateMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner); unsigned int GetMaxPageItems(); + unsigned int GetApproxMemUsage(); public: //IUserMessageListener void OnUserMessage(int msg_id, bf_write *bf, IRecipientFilter *pFilter); void OnUserMessageSent(int msg_id); @@ -119,6 +120,7 @@ public: //IMenuPanel unsigned int GetCurrentKey(); bool SetCurrentKey(unsigned int key); int GetAmountRemaining(); + unsigned int GetApproxMemUsage(); public: void DirectSet(const char *str, int keymap); private: @@ -141,6 +143,7 @@ public: unsigned int start_item, IMenuHandler *alt_handler/* =NULL */); void Cancel_Finally(); + unsigned int GetApproxMemUsage(); }; extern CRadioStyle g_RadioMenuStyle; diff --git a/core/MenuStyle_Valve.cpp b/core/MenuStyle_Valve.cpp index dccace41..f51a85a0 100644 --- a/core/MenuStyle_Valve.cpp +++ b/core/MenuStyle_Valve.cpp @@ -163,6 +163,11 @@ bool ValveMenuStyle::DoClientMenu(int client, CBaseMenu *menu, unsigned int firs return BaseMenuStyle::DoClientMenu(client, menu, first_item, mh, time); } +unsigned int ValveMenuStyle::GetApproxMemUsage() +{ + return sizeof(ValveMenuStyle) + (sizeof(CValveMenuPlayer) * 257); +} + CValveMenuDisplay::CValveMenuDisplay() { m_pKv = NULL; @@ -342,6 +347,11 @@ int CValveMenuDisplay::GetAmountRemaining() return -1; } +unsigned int CValveMenuDisplay::GetApproxMemUsage() +{ + return sizeof(CValveMenuDisplay) + (sizeof(KeyValues) * m_NextPos * 10); +} + CValveMenu::CValveMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner) : CBaseMenu(pHandler, &g_ValveMenuStyle, pOwner), m_IntroColor(255, 0, 0, 255) @@ -409,6 +419,11 @@ void CValveMenu::SetMenuOptionFlags(unsigned int flags) CBaseMenu::SetMenuOptionFlags(flags); } +unsigned int CValveMenu::GetApproxMemUsage() +{ + return sizeof(CValveMenu) + GetBaseMemUsage(); +} + const char *g_OptionNumTable[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" diff --git a/core/MenuStyle_Valve.h b/core/MenuStyle_Valve.h index b59967c2..bf7bda4d 100644 --- a/core/MenuStyle_Valve.h +++ b/core/MenuStyle_Valve.h @@ -74,6 +74,7 @@ public: //IMenuStyle IMenuPanel *CreatePanel(); IBaseMenu *CreateMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner); unsigned int GetMaxPageItems(); + unsigned int GetApproxMemUsage(); private: void HookCreateMessage(edict_t *pEdict, DIALOG_TYPE type, KeyValues *kv, IServerPluginCallbacks *plugin); private: @@ -103,6 +104,7 @@ public: unsigned int GetCurrentKey(); bool SetCurrentKey(unsigned int key); int GetAmountRemaining(); + unsigned int GetApproxMemUsage(); private: KeyValues *m_pKv; unsigned int m_NextPos; @@ -126,6 +128,7 @@ public: //IBaseMenu unsigned int start_item, IMenuHandler *alt_handler/* =NULL */); void SetMenuOptionFlags(unsigned int flags); + unsigned int GetApproxMemUsage(); public: //CBaseMenu void Cancel_Finally(); private: diff --git a/core/sm_memtable.h b/core/sm_memtable.h index 744eb4b6..22743b7f 100644 --- a/core/sm_memtable.h +++ b/core/sm_memtable.h @@ -58,6 +58,10 @@ public: */ void Reset(); + inline unsigned int GetMemUsage() + { + return size; + } private: unsigned char *membase; diff --git a/core/sm_trie.cpp b/core/sm_trie.cpp index 14192d42..899ccd60 100644 --- a/core/sm_trie.cpp +++ b/core/sm_trie.cpp @@ -85,3 +85,8 @@ void sm_trie_clear(Trie *trie) { trie->k.clear(); } + +size_t sm_trie_mem_usage(Trie *trie) +{ + return trie->k.mem_usage(); +} diff --git a/core/sm_trie.h b/core/sm_trie.h index e3909dc2..6e25fbd1 100644 --- a/core/sm_trie.h +++ b/core/sm_trie.h @@ -41,5 +41,6 @@ bool sm_trie_replace(Trie *trie, const char *key, void *value); bool sm_trie_retrieve(Trie *trie, const char *key, void **value); bool sm_trie_delete(Trie *trie, const char *key); void sm_trie_clear(Trie *trie); +size_t sm_trie_mem_usage(Trie *trie); #endif //_INCLUDE_SOURCEMOD_SIMPLE_TRIE_H_ diff --git a/core/smn_adt_array.cpp b/core/smn_adt_array.cpp index a16fd479..cafcca54 100644 --- a/core/smn_adt_array.cpp +++ b/core/smn_adt_array.cpp @@ -56,6 +56,12 @@ public: //IHandleTypeDispatch CellArray *array = (CellArray *)object; delete array; } + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + CellArray *pArray = (CellArray *)object; + *pSize = sizeof(CellArray) + pArray->mem_usage(); + return true; + } } s_CellArrayHelpers; static cell_t CreateArray(IPluginContext *pContext, const cell_t *params) diff --git a/core/smn_functions.cpp b/core/smn_functions.cpp index d3b0c41a..24cade1b 100644 --- a/core/smn_functions.cpp +++ b/core/smn_functions.cpp @@ -78,6 +78,12 @@ public: g_Forwards.ReleaseForward(pForward); } + + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + *pSize = sizeof(CForward) + (((IForward *)object)->GetFunctionCount() * 12); + return true; + } } g_ForwardNativeHelpers; diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index 025cc5c8..c098f40d 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -34,6 +34,7 @@ #include "sm_stringutil.h" #include "HandleSys.h" #include <KeyValues.h> +#include "utlbuffer.h" HandleType_t g_KeyValueType; @@ -63,6 +64,30 @@ public: pStk->pBase->deleteThis(); delete pStk; } + int CalcKVSizeR(KeyValues *pv) + { + CUtlBuffer buf; + int size; + + pv->RecursiveSaveToFile(buf, 0); + size = buf.TellMaxPut(); + + buf.Purge(); + + return size; + } + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + KeyValueStack *pStk = (KeyValueStack *)object; + unsigned int size = sizeof(KeyValueStack) + (pStk->pCurRoot.size() * sizeof(KeyValues *)); + + /* Check how much memory the actual thing takes up */ + size += CalcKVSizeR(pStk->pBase); + + *pSize = size; + + return true; + } }; KeyValues *SourceModBase::ReadKeyValuesHandle(Handle_t hndl, HandleError *err, bool root) diff --git a/core/smn_menus.cpp b/core/smn_menus.cpp index 22534c7e..13473ee4 100644 --- a/core/smn_menus.cpp +++ b/core/smn_menus.cpp @@ -160,6 +160,12 @@ public: panel->DeleteThis(); } + virtual bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + *pSize = ((IMenuPanel *)object)->GetApproxMemUsage(); + return true; + } + /** * It is extremely important that unloaded plugins don't crash. * Thus, if a plugin unloads, we run through every handler we have. diff --git a/core/smn_textparse.cpp b/core/smn_textparse.cpp index 38a23e24..78b26304 100644 --- a/core/smn_textparse.cpp +++ b/core/smn_textparse.cpp @@ -169,6 +169,12 @@ public: ParseInfo *parse = (ParseInfo *)object; delete parse; } + + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + *pSize = sizeof(ParseInfo); + return true; + } }; TextParseGlobals g_TextParseGlobals; diff --git a/core/smn_usermsgs.cpp b/core/smn_usermsgs.cpp index d560dfbe..083d333c 100644 --- a/core/smn_usermsgs.cpp +++ b/core/smn_usermsgs.cpp @@ -57,6 +57,7 @@ public: //SMGlobalClass, IHandleTypeDispatch, IPluginListener void OnSourceModAllInitialized(); void OnSourceModShutdown(); void OnHandleDestroy(HandleType_t type, void *object); + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize); void OnPluginUnloaded(IPlugin *plugin); public: MsgListenerWrapper *CreateListener(IPluginContext *pCtx); @@ -109,6 +110,15 @@ void UsrMessageNatives::OnHandleDestroy(HandleType_t type, void *object) { } +bool UsrMessageNatives::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) +{ + bf_read *pRead = (bf_read *)object; + + *pSize = sizeof(bf_read) + pRead->GetNumBytesRead() + pRead->GetNumBytesLeft(); + + return true; +} + void UsrMessageNatives::OnPluginUnloaded(IPlugin *plugin) { MsgWrapperList *pList; diff --git a/core/systems/HandleSys.cpp b/core/systems/HandleSys.cpp index 5d0e9885..951e0cb9 100644 --- a/core/systems/HandleSys.cpp +++ b/core/systems/HandleSys.cpp @@ -36,6 +36,7 @@ #include "Logger.h" #include <assert.h> #include <string.h> +#include "sm_stringutil.h" HandleSystem g_HandleSys; @@ -996,8 +997,9 @@ bool HandleSystem::TryAndFreeSomeHandles() void HandleSystem::Dump(HANDLE_REPORTER rep) { - rep("%-10.10s\t%-20.20s\t%-20.20s", "Handle", "Owner", "Type"); - rep("---------------------------------------------"); + unsigned int total_size = 0; + rep("%-10.10s\t%-20.20s\t%-20.20s\t%-10.10s", "Handle", "Owner", "Type", "Memory"); + rep("--------------------------------------------------------------------------"); for (unsigned int i = 1; i <= m_HandleTail; i++) { if (m_Handles[i].set != HandleSet_Used) @@ -1042,11 +1044,24 @@ void HandleSystem::Dump(HANDLE_REPORTER rep) } const char *type = "ANON"; QHandleType *pType = &m_Types[m_Handles[i].type]; + unsigned int size = 0; if (pType->nameIdx != -1) { type = m_strtab->GetString(pType->nameIdx); } - rep("0x%08x\t%-20.20s\t%-20.20s", index, owner, type); + if (pType->dispatch->GetDispatchVersion() < HANDLESYS_MEMUSAGE_MIN_VERSION + || !pType->dispatch->GetHandleApproxSize(m_Handles[i].type, m_Handles[i].object, &size)) + { + rep("0x%08x\t%-20.20s\t%-20.20s\t%-10.10s", index, owner, type, "-1"); + } + else + { + char buffer[32]; + UTIL_Format(buffer, sizeof(buffer), "%d", size); + rep("0x%08x\t%-20.20s\t%-20.20s\t%-10.10s", index, owner, type, buffer); + total_size += size; + } } + rep("-- Approximately %d bytes of memory are in use by Handles.\n", total_size); } diff --git a/core/systems/HandleSys.h b/core/systems/HandleSys.h index c49b1510..b76c1896 100644 --- a/core/systems/HandleSys.h +++ b/core/systems/HandleSys.h @@ -48,6 +48,8 @@ #define HANDLESYS_SERIAL_MASK 0xFFFF0000 #define HANDLESYS_HANDLE_MASK 0x0000FFFF +#define HANDLESYS_MEMUSAGE_MIN_VERSION 3 + /** * The QHandle is a nasty structure that compacts the handle system into a big vector. * The members of the vector each encapsulate one Handle, however, they also act as nodes diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index d18aa689..e8225662 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -123,6 +123,80 @@ void CPlugin::InitIdentity() } } +unsigned int CPlugin::CalcMemUsage() +{ + unsigned int base_size = + sizeof(CPlugin) + + sizeof(IdentityToken_t) + + (m_PhraseFiles.size() * sizeof(unsigned int)) + + (m_dependents.size() * sizeof(CPlugin *)) + + (m_dependsOn.size() * sizeof(CPlugin *)) + + (m_fakeNatives.size() * (sizeof(FakeNative *) + sizeof(FakeNative))) + + (m_WeakNatives.size() * sizeof(WeakNative)) + + (m_configs.size() * (sizeof(AutoConfig *) + sizeof(AutoConfig))) + + sm_trie_mem_usage(m_pProps); + + for (unsigned int i = 0; i < m_configs.size(); i++) + { + base_size += m_configs[i]->autocfg.size(); + base_size += m_configs[i]->folder.size(); + } + + for (List<String>::iterator i = m_Libraries.begin(); + i != m_Libraries.end(); + i++) + { + base_size += (*i).size(); + } + + for (List<String>::iterator i = m_RequiredLibs.begin(); + i != m_RequiredLibs.end(); + i++) + { + base_size += (*i).size(); + } + + for (List<FakeNative *>::iterator i = m_fakeNatives.begin(); + i != m_fakeNatives.end(); + i++) + { + base_size += (*i)->name.size(); + } + + if (m_plugin != NULL) + { + base_size += sizeof(sp_plugin_t); + base_size += m_plugin->data_size; + base_size += m_plugin->pcode_size; + base_size += (m_plugin->info.natives_num * sizeof(sp_file_natives_t)); + base_size += (m_plugin->info.publics_num * sizeof(sp_file_publics_t)); + base_size += (m_plugin->info.pubvars_num * sizeof(sp_file_pubvars_t)); + base_size += (m_plugin->debug.files_num * sizeof(sp_fdbg_file_t)); + base_size += (m_plugin->debug.lines_num * sizeof(sp_fdbg_line_t)); + base_size += (m_plugin->debug.syms_num * sizeof(sp_fdbg_symbol_t)); + /* We can't get strtab size, oh well. */ + } + + if (m_ctx.base != NULL) + { + base_size += sizeof(BaseContext); + base_size += m_ctx.base->GetPublicsNum() * sizeof(CFunction); + } + if (m_ctx.ctx != NULL) + { + base_size += m_ctx.ctx->mem_size; + base_size += (m_plugin->debug.files_num * sizeof(sp_debug_file_t)); + base_size += (m_plugin->debug.lines_num * sizeof(sp_debug_line_t)); + base_size += (m_plugin->debug.syms_num * sizeof(sp_debug_symbol_t)); + base_size += (m_plugin->info.pubvars_num * sizeof(sp_pubvar_t)); + base_size += (m_plugin->info.publics_num * sizeof(sp_public_t)); + base_size += (m_plugin->info.natives_num * sizeof(sp_native_t)); + /* We also don't know the JIT code size, oh well. */ + } + + return base_size; +} + Handle_t CPlugin::GetMyHandle() { return m_handle; @@ -1969,6 +2043,12 @@ void CPluginManager::OnHandleDestroy(HandleType_t type, void *object) /* We don't care about the internal object, actually */ } +bool CPluginManager::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) +{ + *pSize = ((CPlugin *)object)->CalcMemUsage(); + return true; +} + void CPluginManager::RegisterNativesFromCore(sp_nativeinfo_t *natives) { for (unsigned int i = 0; natives[i].func != NULL; i++) diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index ce70a16f..f51b0f5a 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -169,6 +169,7 @@ public: unsigned int GetSerial(); const sp_plugin_t *GetPluginStructure(); IdentityToken_t *GetIdentity(); + unsigned int CalcMemUsage(); bool SetProperty(const char *prop, void *ptr); bool GetProperty(const char *prop, void **ptr, bool remove=false); public: @@ -355,6 +356,7 @@ public: //SMGlobalClass void OnSourceModShutdown(); public: //IHandleTypeDispatch void OnHandleDestroy(HandleType_t type, void *object); + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize); public: //IRootConsoleCommand void OnRootConsoleCommand(const char *cmdname, const CCommand &command); public: diff --git a/extensions/topmenus/TopMenu.cpp b/extensions/topmenus/TopMenu.cpp index 53b266ec..61b14620 100644 --- a/extensions/topmenus/TopMenu.cpp +++ b/extensions/topmenus/TopMenu.cpp @@ -87,6 +87,29 @@ TopMenu::~TopMenu() delete [] m_clients; } +unsigned int TopMenu::CalcMemUsage() +{ + unsigned int size = sizeof(TopMenu); + + size += m_Config.strings.GetMemTable()->MemUsage(); + size += (m_Config.cats.size() * sizeof(int)); + size += (sizeof(topmenu_player_t) * m_max_clients); + size += (m_SortedCats.size() * sizeof(unsigned int)); + size += (m_UnsortedCats.size() * sizeof(unsigned int)); + size += (m_Categories.size() * (sizeof(topmenu_category_t *) + sizeof(topmenu_category_t))); + size += (m_Objects.size() * (sizeof(topmenu_object_t *) + sizeof(topmenu_object_t))); + size += m_ObjLookup.mem_usage(); + + for (size_t i = 0; i < m_Categories.size(); i++) + { + size += m_Categories[i]->obj_list.size() * sizeof(topmenu_object_t *); + size += m_Categories[i]->sorted.size() * sizeof(topmenu_object_t *); + size += m_Categories[i]->unsorted.size() * sizeof(topmenu_object_t *); + } + + return size; +} + void TopMenu::OnClientConnected(int client) { if (m_clients == NULL) diff --git a/extensions/topmenus/TopMenu.h b/extensions/topmenus/TopMenu.h index c4c0ec86..2747c778 100644 --- a/extensions/topmenus/TopMenu.h +++ b/extensions/topmenus/TopMenu.h @@ -146,6 +146,8 @@ public: //ITextListener_SMC SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name); SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value); SMCResult ReadSMC_LeavingSection(const SMCStates *states); +public: + unsigned int CalcMemUsage(); private: void SortCategoriesIfNeeded(); void SortCategoryIfNeeded(unsigned int category); diff --git a/extensions/topmenus/sdk/sm_memtable.h b/extensions/topmenus/sdk/sm_memtable.h index 744eb4b6..7c7f00a2 100644 --- a/extensions/topmenus/sdk/sm_memtable.h +++ b/extensions/topmenus/sdk/sm_memtable.h @@ -58,6 +58,10 @@ public: */ void Reset(); + inline unsigned int MemUsage() + { + return size; + } private: unsigned char *membase; diff --git a/extensions/topmenus/smn_topmenus.cpp b/extensions/topmenus/smn_topmenus.cpp index 98575ec7..cb68c592 100644 --- a/extensions/topmenus/smn_topmenus.cpp +++ b/extensions/topmenus/smn_topmenus.cpp @@ -43,6 +43,11 @@ public: ITopMenu *pTopMenu = (ITopMenu *)object; g_TopMenus.DestroyTopMenu(pTopMenu); } + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + *pSize = ((TopMenu *)object)->CalcMemUsage(); + return true; + } } s_TopMenuHandle; void Initialize_Natives() diff --git a/public/IHandleSys.h b/public/IHandleSys.h index 55dc5fa5..b92cf828 100644 --- a/public/IHandleSys.h +++ b/public/IHandleSys.h @@ -52,7 +52,7 @@ #include <sp_vm_types.h> #define SMINTERFACE_HANDLESYSTEM_NAME "IHandleSys" -#define SMINTERFACE_HANDLESYSTEM_VERSION 2 +#define SMINTERFACE_HANDLESYSTEM_VERSION 3 /** Specifies no Identity */ #define DEFAULT_IDENTITY NULL @@ -195,8 +195,25 @@ namespace SourceMod public: /** * @brief Called when destroying a handle. Must be implemented. + * + * @param type Handle type. + * @param object Handle internal object. */ virtual void OnHandleDestroy(HandleType_t type, void *object) =0; + + /** + * @brief Called to get the size of a handle's memory usage in bytes. + * Implementation is optional. + * + * @param type Handle type. + * @param object Handle internal object. + * @param pSize Pointer to store the approximate memory usage in bytes. + * @return True on success, false if not implemented. + */ + virtual bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + return false; + } }; /** diff --git a/public/IMenuManager.h b/public/IMenuManager.h index cb97a2f4..16099f23 100644 --- a/public/IMenuManager.h +++ b/public/IMenuManager.h @@ -36,7 +36,7 @@ #include <IHandleSys.h> #define SMINTERFACE_MENUMANAGER_NAME "IMenuManager" -#define SMINTERFACE_MENUMANAGER_VERSION 13 +#define SMINTERFACE_MENUMANAGER_VERSION 14 /** * @file IMenuManager.h @@ -323,6 +323,13 @@ namespace SourceMod * -1, then the panel has no text limit. */ virtual int GetAmountRemaining() =0; + + /** + * @brief For the Handle system, returns approximate memory usage. + * + * @return Approximate number of bytes being used. + */ + virtual unsigned int GetApproxMemUsage() =0; }; /** @@ -406,6 +413,13 @@ namespace SourceMod * @return Handle_t pointing to this object. */ virtual Handle_t GetHandle() =0; + + /** + * @brief For the Handle system, returns approximate memory usage. + * + * @return Approximate number of bytes being used. + */ + virtual unsigned int GetApproxMemUsage() =0; }; /** @@ -597,6 +611,13 @@ namespace SourceMod unsigned int time, unsigned int start_item, IMenuHandler *alt_handler=NULL) =0; + + /** + * @brief For the Handle system, returns approximate memory usage. + * + * @return Approximate number of bytes being used. + */ + virtual unsigned int GetApproxMemUsage() =0; }; /** diff --git a/public/sm_trie_tpl.h b/public/sm_trie_tpl.h index 1aed1a38..195e1988 100644 --- a/public/sm_trie_tpl.h +++ b/public/sm_trie_tpl.h @@ -877,6 +877,13 @@ private: return x_check_multi(offsets, count, to_check+1); } +public: + size_t mem_usage() + { + return (sizeof(KTrieNode) * (m_baseSize)) + + m_stSize + + sizeof(KTrieNode); + } private: KTrieNode *m_base; /* Base array for the sparse tables */ KTrieNode *m_empty; /* Special case for empty strings */ From b4aca8dd06db5a073ff8a1821f46fc10235273fe Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 5 Dec 2007 18:12:25 +0000 Subject: [PATCH 090/263] fixed @aim giving wrong name in ProcessTargetString() feedback --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401773 --- extensions/sdktools/extension.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index 3a8d7450..e41a165d 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -303,7 +303,14 @@ bool SDKTools::ProcessCommandTarget(cmd_target_info_t *info) return true; } - IGamePlayer *pTarget = playerhelpers->GetGamePlayer(info->admin); + IGamePlayer *pTarget = playerhelpers->GetGamePlayer(player_index); + + if (pTarget == NULL) + { + info->reason = COMMAND_TARGET_NONE; + info->num_targets = 0; + return true; + } info->reason = playerhelpers->FilterCommandTarget(pAdmin, pTarget, info->flags); if (info->reason != COMMAND_TARGET_VALID) From 04c0684879054a963b3d8f64332d3936fd3172c4 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 5 Dec 2007 19:39:54 +0000 Subject: [PATCH 091/263] empires does not support radio menus properly --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401774 --- gamedata/core.games.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index 51b7448c..146edf1a 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -55,7 +55,6 @@ "game" "insurgency" "game" "Insurgency" "game" "tf" - "game" "empires" } "Keys" From 9ab9eba5d7400c2ae3be50bf4c12a967f043512d Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Thu, 6 Dec 2007 02:25:35 +0000 Subject: [PATCH 092/263] added amb1235, added support for the IServer interface added a native to retrieve the spray file of a client added a native to get the net traffic of the server --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401775 --- extensions/sdktools/extension.cpp | 2 + extensions/sdktools/extension.h | 3 ++ extensions/sdktools/vglobals.cpp | 57 ++++++++++++++++++++++++++ extensions/sdktools/vglobals.h | 1 + extensions/sdktools/vhelpers.cpp | 9 ++++ extensions/sdktools/vhelpers.h | 2 + extensions/sdktools/vnatives.cpp | 43 +++++++++++++++++++ gamedata/sdktools.games.ep2.txt | 23 +++++++++++ gamedata/sdktools.games.txt | 23 +++++++++++ plugins/include/sdktools_functions.inc | 20 +++++++++ 10 files changed, 183 insertions(+) diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index e41a165d..c01ff74a 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -64,6 +64,7 @@ IServerGameClients *serverClients = NULL; IVoiceServer *voiceserver = NULL; IPlayerInfoManager *playerinfomngr = NULL; ICvar *icvar = NULL; +IServer *iserver = NULL; SourceHook::CallClass<IVEngineServer> *enginePatch = NULL; SourceHook::CallClass<IEngineSound> *enginesoundPatch = NULL; HandleType_t g_CallHandle = 0; @@ -204,6 +205,7 @@ void SDKTools::SDK_OnAllLoaded() s_TempEntHooks.Initialize(); s_SoundHooks.Initialize(); InitializeValveGlobals(); + GetIServer(); } bool SDKTools::QueryRunning(char *error, size_t maxlength) diff --git a/extensions/sdktools/extension.h b/extensions/sdktools/extension.h index 7a331b55..c13343a9 100644 --- a/extensions/sdktools/extension.h +++ b/extensions/sdktools/extension.h @@ -46,6 +46,8 @@ #include <ivoiceserver.h> #include <iplayerinfo.h> #include <convar.h> +#include <iserver.h> +#include <cdll_int.h> #include <compat_wrappers.h> /** @@ -99,6 +101,7 @@ extern IServerGameClients *serverClients; extern IVoiceServer *voiceserver; extern IPlayerInfoManager *playerinfomngr; extern ICvar *icvar; +extern IServer *iserver; /* Interfaces from SourceMod */ extern IBinTools *g_pBinTools; extern IGameConfig *g_pGameConf; diff --git a/extensions/sdktools/vglobals.cpp b/extensions/sdktools/vglobals.cpp index d7cd3e4f..09337a70 100644 --- a/extensions/sdktools/vglobals.cpp +++ b/extensions/sdktools/vglobals.cpp @@ -82,3 +82,60 @@ void InitializeValveGlobals() g_pGameRules = reinterpret_cast<void **>(addr); } #endif + +#if defined PLATFORM_WINDOWS + /* Thanks to DS for the sigs */ + #define ISERVER_WIN_SIG "\x8B\x44\x24\x2A\x50\xB9\x2A\x2A\x2A\x2A\xE8" + #define ISERVER_WIN_SIG_LEN 11 +void GetIServer() +{ + /* First check that the IVEngineServer::CreateFakeClient exists */ + if (!memutils->FindPattern(engine, ISERVER_WIN_SIG, ISERVER_WIN_SIG_LEN)) + { + return; + } + + int offset; + void *vfunc = NULL; + + /* Get the offset into CreateFakeClient */ + if (!g_pGameConf->GetOffset("sv", &offset)) + { + return; + } +#if defined METAMOD_PLAPI_VERSION + /* Get the CreateFakeClient function pointer */ + if (!(vfunc=SH_GET_ORIG_VFNPTR_ENTRY(engine, &IVEngineServer::CreateFakeClient))) + { + return; + } + + /* Finally we have the interface we were looking for */ + iserver = *reinterpret_cast<IServer **>(reinterpret_cast<unsigned char *>(vfunc) + offset); +#else + /* Get the interface manually */ + SourceHook::MemFuncInfo info = {true, -1, 0, 0}; + SourceHook::GetFuncInfo(&IVEngineServer::CreateFakeClient, info); + + vfunc = enginePatch->GetOrigFunc(info.vtbloffs, info.vtblindex); + if (!vfunc) + { + void **vtable = *reinterpret_cast<void ***>(enginePatch->GetThisPtr() + info.thisptroffs + info.vtbloffs); + vfunc = vtable[info.vtblindex]; + } + + iserver = *reinterpret_cast<IServer **>(reinterpret_cast<unsigned char *>(vfunc) + offset); +#endif +} +#elif defined PLATFORM_POSIX +void GetIServer() +{ + void *addr; + if (!g_pGameConf->GetMemSig("sv", &addr) || !addr) + { + return; + } + + iserver = *reinterpret_cast<IServer **>(addr); +} +#endif diff --git a/extensions/sdktools/vglobals.h b/extensions/sdktools/vglobals.h index c66f2ada..5e9a65ee 100644 --- a/extensions/sdktools/vglobals.h +++ b/extensions/sdktools/vglobals.h @@ -36,5 +36,6 @@ extern void **g_pGameRules; extern void *g_EntList; void InitializeValveGlobals(); +void GetIServer(); #endif // _INCLUDE_SDKTOOLS_VGLOBALS_H_ diff --git a/extensions/sdktools/vhelpers.cpp b/extensions/sdktools/vhelpers.cpp index 93977c9c..44a577a1 100644 --- a/extensions/sdktools/vhelpers.cpp +++ b/extensions/sdktools/vhelpers.cpp @@ -267,6 +267,15 @@ bool IsEyeAnglesSupported() return SetupGetEyeAngles(); } +bool GetPlayerInfo(int client, player_info_t *info) +{ +#if defined ORANGEBOX_BUILD + return engine->GetPlayerInfo(client, info); +#else + return iserver->GetPlayerInfo(client, info); +#endif +} + void ShutdownHelpers() { s_Teleport.Shutdown(); diff --git a/extensions/sdktools/vhelpers.h b/extensions/sdktools/vhelpers.h index cae47a29..3ba1b116 100644 --- a/extensions/sdktools/vhelpers.h +++ b/extensions/sdktools/vhelpers.h @@ -68,6 +68,8 @@ bool IsEyeAnglesSupported(); int GetClientAimTarget(edict_t *pEdict, bool only_players); +bool GetPlayerInfo(int client, player_info_t *info); + void ShutdownHelpers(); #endif //_INCLUDE_SDKTOOLS_VHELPERS_H_ diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index 886ad887..ce54958d 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -825,6 +825,47 @@ static cell_t sm_SetEntityModel(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t GetPlayerDecalFile(IPluginContext *pContext, const cell_t *params) +{ + IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); + if (player == NULL) + { + return pContext->ThrowNativeError("Invalid client index %d", params[1]); + } + if (!player->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in game", params[1]); + } + + player_info_t info; + char *buffer; + + if (!GetPlayerInfo(params[1], &info) || !info.customFiles[0]) + { + return 0; + } + + pContext->LocalToString(params[2], &buffer); + Q_binarytohex((byte *)&info.customFiles[0], sizeof(info.customFiles[0]), buffer, params[3]); + + return 1; +} + +static cell_t GetServerNetStats(IPluginContext *pContext, const cell_t *params) +{ + float in, out; + cell_t *pIn, *pOut; + + pContext->LocalToPhysAddr(params[1], &pIn); + pContext->LocalToPhysAddr(params[2], &pOut); + iserver->GetNetStats(in, out); + + *pIn = sp_ftoc(in); + *pOut = sp_ftoc(out); + + return 1; +} + sp_nativeinfo_t g_Natives[] = { {"ExtinguishPlayer", ExtinguishEntity}, @@ -850,5 +891,7 @@ sp_nativeinfo_t g_Natives[] = {"DispatchKeyValueVector", DispatchKeyValueVector}, {"GetClientAimTarget", sm_GetClientAimTarget}, {"SetEntityModel", sm_SetEntityModel}, + {"GetPlayerDecalFile", GetPlayerDecalFile}, + {"GetServerNetStats", GetServerNetStats}, {NULL, NULL}, }; diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index 7fc52211..ea4e9c58 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -178,6 +178,29 @@ } } + /* IServer interface pointer */ + "#default" + { + "Offsets" + { + /* Offset into IVEngineServer::CreateFakeClient */ + "sv" + { + "windows" "6" + } + } + + "Signatures" + { + /* CBaseServer object for IServer interface */ + "sv" + { + "library" "engine" + "linux" "@sv" + } + } + } + /* Team Fortress 2 Offsets */ "tf" { diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 5895b6ff..aadea07f 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -216,6 +216,29 @@ } } + /* IServer interface pointer */ + "#default" + { + "Offsets" + { + /* Offset into IVEngineServer::CreateFakeClient */ + "sv" + { + "windows" "6" + } + } + + "Signatures" + { + /* CBaseServer object for IServer interface */ + "sv" + { + "library" "engine" + "linux" "@sv" + } + } + } + /* Counter-Strike: Source */ "cstrike" { diff --git a/plugins/include/sdktools_functions.inc b/plugins/include/sdktools_functions.inc index 4fc3958e..61eb4754 100644 --- a/plugins/include/sdktools_functions.inc +++ b/plugins/include/sdktools_functions.inc @@ -264,6 +264,26 @@ native GetTeamClientCount(index); */ native SetEntityModel(entity, const String:model[]); +/** + * Retrieves the decal file name associated to a given client. + * + * @param client Player's index. + * @param hex Buffer to store the logo filename. + * @param maxlength Maximum length of string buffer. + * @return True on success, otherwise false. + * @error Invalid client or client not in game. + */ +native bool:GetPlayerDecalFile(client, String:hex[], maxlength); + +/** + * Returns the average server network traffic in bytes/sec. + * + * @param in Buffer to store the input traffic velocity. + * @param out Buffer to store the output traffic velocity. + * @noreturn + */ +native GetServerNetStats(&Float:in, &Float:out); + /** * @deprecated */ From d78d7ab960f0ddb0aba9d50eadab51d96e33358d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 6 Dec 2007 03:28:02 +0000 Subject: [PATCH 093/263] - rewrote internal convar hooking mechanism to prevent crashes and potential "race conditions" - sharesys is now the first thing to run, so g_pCoreIdent is valid EVERYWHERE - added internal convar hooking funcs for timersys --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401776 --- core/ConVarManager.cpp | 112 +++++++++++++++++++++++++------------- core/ConVarManager.h | 14 ++++- core/TimerSys.cpp | 34 ++---------- core/sm_srvcmds.cpp | 23 +++++--- core/sm_srvcmds.h | 1 + core/sourcemod.cpp | 8 ++- core/systems/ShareSys.cpp | 2 +- core/systems/ShareSys.h | 2 +- 8 files changed, 115 insertions(+), 81 deletions(-) diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index f245efff..0f0f39ae 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -41,6 +41,16 @@ ConVarManager g_ConVarManager; +#if !defined ORANGEBOX_BUILD +#define CallGlobalChangeCallbacks CallGlobalChangeCallback +#endif + +#if defined ORANGEBOX_BUILD +SH_DECL_HOOK3_void(ICvar, CallGlobalChangeCallbacks, SH_NOATTRIB, false, ConVar *, const char *, float); +#else +SH_DECL_HOOK2_void(ICvar, CallGlobalChangeCallbacks, SH_NOATTRIB, false, ConVar *, const char *); +#endif + SH_DECL_HOOK5_void(IServerGameDLL, OnQueryCvarValueFinished, SH_NOATTRIB, 0, QueryCvarCookie_t, edict_t *, EQueryCvarValueStatus, const char *, const char *); SH_DECL_HOOK5_void(IServerPluginCallbacks, OnQueryCvarValueFinished, SH_NOATTRIB, 0, QueryCvarCookie_t, edict_t *, EQueryCvarValueStatus, const char *, const char *); @@ -56,6 +66,19 @@ ConVarManager::~ConVarManager() { } +void ConVarManager::OnSourceModStartup(bool late) +{ + HandleAccess sec; + + /* Set up access rights for the 'ConVar' handle type */ + sec.access[HandleAccess_Read] = 0; + sec.access[HandleAccess_Delete] = HANDLE_RESTRICT_IDENTITY | HANDLE_RESTRICT_OWNER; + sec.access[HandleAccess_Clone] = HANDLE_RESTRICT_IDENTITY | HANDLE_RESTRICT_OWNER; + + /* Create the 'ConVar' handle type */ + m_ConVarType = g_HandleSys.CreateType("ConVar", this, 0, NULL, &sec, g_pCoreIdent, NULL); +} + void ConVarManager::OnSourceModAllInitialized() { /** @@ -69,15 +92,7 @@ void ConVarManager::OnSourceModAllInitialized() } #endif - HandleAccess sec; - - /* Set up access rights for the 'ConVar' handle type */ - sec.access[HandleAccess_Read] = 0; - sec.access[HandleAccess_Delete] = HANDLE_RESTRICT_IDENTITY | HANDLE_RESTRICT_OWNER; - sec.access[HandleAccess_Clone] = HANDLE_RESTRICT_IDENTITY | HANDLE_RESTRICT_OWNER; - - /* Create the 'ConVar' handle type */ - m_ConVarType = g_HandleSys.CreateType("ConVar", this, 0, NULL, &sec, g_pCoreIdent, NULL); + SH_ADD_HOOK_STATICFUNC(ICvar, CallGlobalChangeCallbacks, icvar, OnConVarChanged, false); /* Add the 'convars' option to the 'sm' console command */ g_RootMenu.AddRootConsoleCommand("cvars", "View convars created by a plugin", this); @@ -138,6 +153,8 @@ void ConVarManager::OnSourceModShutdown() m_bIsVSPQueryHooked = false; } + SH_REMOVE_HOOK_STATICFUNC(ICvar, CallGlobalChangeCallbacks, icvar, OnConVarChanged, false); + /* Remove the 'convars' option from the 'sm' console command */ g_RootMenu.RemoveRootConsoleCommand("cvars", this); @@ -243,7 +260,7 @@ void ConVarManager::OnHandleDestroy(HandleType_t type, void *object) bool ConVarManager::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) { - *pSize = sizeof(ConVar); + *pSize = sizeof(ConVar) + sizeof(ConVarInfo); return true; } @@ -321,7 +338,6 @@ Handle_t ConVarManager::CreateConVar(IPluginContext *pContext, const char *name, pInfo = new ConVarInfo(); pInfo->sourceMod = false; pInfo->pChangeForward = NULL; - pInfo->origCallback = pConVar->GetCallback(); pInfo->pVar = pConVar; /* If we don't, then create a new handle from the convar */ @@ -361,7 +377,6 @@ Handle_t ConVarManager::CreateConVar(IPluginContext *pContext, const char *name, pInfo->handle = hndl; pInfo->sourceMod = true; pInfo->pChangeForward = NULL; - pInfo->origCallback = NULL; /* Create a handle from the new convar */ hndl = g_HandleSys.CreateHandle(m_ConVarType, pInfo, NULL, g_pCoreIdent, NULL); @@ -412,7 +427,6 @@ Handle_t ConVarManager::FindConVar(const char *name) pInfo = new ConVarInfo(); pInfo->sourceMod = false; pInfo->pChangeForward = NULL; - pInfo->origCallback = pConVar->GetCallback(); pInfo->pVar = pConVar; /* If we don't have a handle, then create a new one */ @@ -433,6 +447,33 @@ Handle_t ConVarManager::FindConVar(const char *name) return hndl; } +void ConVarManager::AddConVarChangeListener(const char *name, IConVarChangeListener *pListener) +{ + ConVarInfo *pInfo; + + if (FindConVar(name) == BAD_HANDLE) + { + return; + } + + /* Find the convar in the lookup trie */ + if (convar_cache_lookup(name, &pInfo)) + { + pInfo->changeListeners.push_back(pListener); + } +} + +void ConVarManager::RemoveConVarChangeListener(const char *name, IConVarChangeListener *pListener) +{ + ConVarInfo *pInfo; + + /* Find the convar in the lookup trie */ + if (convar_cache_lookup(name, &pInfo)) + { + pInfo->changeListeners.remove(pListener); + } +} + void ConVarManager::HookConVarChange(ConVar *pConVar, IPluginFunction *pFunction) { ConVarInfo *pInfo; @@ -449,9 +490,6 @@ void ConVarManager::HookConVarChange(ConVar *pConVar, IPluginFunction *pFunction { pForward = g_Forwards.CreateForwardEx(NULL, ET_Ignore, 3, CONVARCHANGE_PARAMS); pInfo->pChangeForward = pForward; - - /* Install our own callback */ - pConVar->InstallChangeCallback(OnConVarChanged); } /* Add function to forward's list */ @@ -491,9 +529,6 @@ void ConVarManager::UnhookConVarChange(ConVar *pConVar, IPluginFunction *pFuncti /* Free this forward */ g_Forwards.ReleaseForward(pForward); pInfo->pChangeForward = NULL; - - /* Put back the original convar callback */ - pConVar->InstallChangeCallback(pInfo->origCallback); } } } @@ -561,15 +596,12 @@ void ConVarManager::AddConVarToPluginList(IPluginContext *pContext, const ConVar } #if defined ORANGEBOX_BUILD -void ConVarManager::OnConVarChanged(IConVar *pIConVar, const char *oldValue, float flOldValue) +void ConVarManager::OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue) #else void ConVarManager::OnConVarChanged(ConVar *pConVar, const char *oldValue) #endif { /* If the values are the same, exit early in order to not trigger callbacks */ -#if defined ORANGEBOX_BUILD - ConVar *pConVar = (ConVar *)pIConVar; -#endif if (strcmp(pConVar->GetString(), oldValue) == 0) { return; @@ -583,24 +615,30 @@ void ConVarManager::OnConVarChanged(ConVar *pConVar, const char *oldValue) return; } - FnChangeCallback_t origCallback = pInfo->origCallback; IChangeableForward *pForward = pInfo->pChangeForward; - /* If there was a change callback installed previously, call it */ - if (origCallback) + if (pInfo->changeListeners.size() != 0) { + for (List<IConVarChangeListener *>::iterator i = pInfo->changeListeners.begin(); + i != pInfo->changeListeners.end(); + i++) + { #if defined ORANGEBOX_BUILD - origCallback(pConVar, oldValue, flOldValue); + (*i)->OnConVarChanged(pConVar, oldValue, flOldValue); #else - origCallback(pConVar, oldValue); + (*i)->OnConVarChanged(pConVar, oldValue, atof(oldValue)); #endif + } } - /* Now call forwards in plugins that have hooked this */ - pForward->PushCell(pInfo->handle); - pForward->PushString(oldValue); - pForward->PushString(reinterpret_cast<ConVar *>(pConVar)->GetString()); - pForward->Execute(NULL); + if (pForward != NULL) + { + /* Now call forwards in plugins that have hooked this */ + pForward->PushCell(pInfo->handle); + pForward->PushString(oldValue); + pForward->PushString(pConVar->GetString()); + pForward->Execute(NULL); + } } bool ConVarManager::IsQueryingSupported() @@ -815,14 +853,10 @@ void _IntExt_EnableYamagrams() } } -#if defined ORANGEBOX_BUILD -void _IntExt_OnHostnameChanged(IConVar *pConVar, const char *oldValue, float flOldValue) -#else -void _IntExt_OnHostnameChanged(ConVar *pConVar, char const *oldValue) -#endif +void _IntExt_OnHostnameChanged(ConVar *pConVar, const char *oldValue, float flOldValue) { if (strcmp(oldValue, "Good morning, DS-san.") == 0 - && strcmp(reinterpret_cast<ConVar *>(pConVar)->GetString(), "Good night, talking desk lamp.") == 0) + && strcmp(pConVar->GetString(), "Good night, talking desk lamp.") == 0) { _IntExt_EnableYamagrams(); } diff --git a/core/ConVarManager.h b/core/ConVarManager.h index 6757bbde..ac921ec5 100644 --- a/core/ConVarManager.h +++ b/core/ConVarManager.h @@ -44,6 +44,12 @@ using namespace SourceHook; +class IConVarChangeListener +{ +public: + virtual void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue) =0; +}; + /** * Holds SourceMod-specific information about a convar */ @@ -52,8 +58,8 @@ struct ConVarInfo Handle_t handle; /**< Handle to self */ bool sourceMod; /**< Determines whether or not convar was created by a SourceMod plugin */ IChangeableForward *pChangeForward; /**< Forward associated with convar */ - FnChangeCallback_t origCallback; /**< The original callback function */ ConVar *pVar; /**< The actual convar */ + List<IConVarChangeListener *> changeListeners; }; /** @@ -77,6 +83,7 @@ public: ConVarManager(); ~ConVarManager(); public: // SMGlobalClass + void OnSourceModStartup(bool late); void OnSourceModAllInitialized(); void OnSourceModShutdown(); void OnSourceModVSPReceived(); @@ -111,6 +118,9 @@ public: */ void UnhookConVarChange(ConVar *pConVar, IPluginFunction *pFunction); + void AddConVarChangeListener(const char *name, IConVarChangeListener *pListener); + void RemoveConVarChangeListener(const char *name, IConVarChangeListener *pListener); + /** * Starts a query to find the value of a client convar. */ @@ -131,7 +141,7 @@ private: * Static callback that Valve's ConVar object executes when the convar's value changes. */ #if defined ORANGEBOX_BUILD - static void OnConVarChanged(IConVar *pConVar, const char *oldValue, float flOldValue); + static void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue); #else static void OnConVarChanged(ConVar *pConVar, const char *oldValue); #endif diff --git a/core/TimerSys.cpp b/core/TimerSys.cpp index 464d4373..5831dd40 100644 --- a/core/TimerSys.cpp +++ b/core/TimerSys.cpp @@ -34,19 +34,10 @@ #include "ForwardSys.h" #include "sourcemm_api.h" #include "frame_hooks.h" +#include "ConVarManager.h" #define TIMER_MIN_ACCURACY 0.1 -#if !defined ORANGEBOX_BUILD -#define CallGlobalChangeCallbacks CallGlobalChangeCallback -#endif - -#if defined ORANGEBOX_BUILD -SH_DECL_HOOK3_void(ICvar, CallGlobalChangeCallbacks, SH_NOATTRIB, false, ConVar *, const char *, float); -#else -SH_DECL_HOOK2_void(ICvar, CallGlobalChangeCallbacks, SH_NOATTRIB, false, ConVar *, const char *); -#endif - TimerSystem g_Timers; double g_fUniversalTime = 0.0f; float g_fGameStartTime = 0.0f; /* Game game start time, non-universal */ @@ -74,7 +65,8 @@ time_t GetAdjustedTime(time_t *buf) class DefaultMapTimer : public IMapTimer, - public SMGlobalClass + public SMGlobalClass, + public IConVarChangeListener { public: DefaultMapTimer() @@ -118,34 +110,20 @@ public: mp_timelimit->SetValue(mp_timelimit->GetInt() + extra_time); } -#if defined ORANGEBOX_BUILD - void GlobalChangeCallback(ConVar *pVar, const char *old_value, float flOldValue) -#else - void GlobalChangeCallback(ConVar *pVar, const char *old_value) -#endif + void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue) { - if (pVar != mp_timelimit) - { - return; - } - - if (atoi(old_value) == pVar->GetInt()) - { - return; - } - g_Timers.MapTimeLeftChanged(); } private: void Enable() { - SH_ADD_HOOK_MEMFUNC(ICvar, CallGlobalChangeCallbacks, icvar, this, &DefaultMapTimer::GlobalChangeCallback, false); + g_ConVarManager.AddConVarChangeListener("mp_timelimit", this); } void Disable() { - SH_REMOVE_HOOK_MEMFUNC(ICvar, CallGlobalChangeCallbacks, icvar, this, &DefaultMapTimer::GlobalChangeCallback, false); + g_ConVarManager.RemoveConVarChangeListener("mp_timelimit", this); } private: diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index cbacadd0..657a8176 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -34,6 +34,7 @@ #include "sm_stringutil.h" #include "HandleSys.h" #include "CoreConfig.h" +#include "ConVarManager.h" RootConsoleMenu g_RootMenu; @@ -57,11 +58,16 @@ RootConsoleMenu::~RootConsoleMenu() m_Menu.clear(); } -#if defined ORANGEBOX_BUILD - extern void _IntExt_OnHostnameChanged(IConVar *var, const char *pOldValue, float flOldValue); -#else - extern void _IntExt_OnHostnameChanged(ConVar *pConVar, char const *oldValue); -#endif +extern void _IntExt_OnHostnameChanged(ConVar *var, const char *pOldValue, float flOldValue); + +class DetectHostNameChanges : public IConVarChangeListener +{ +public: + void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue) + { + _IntExt_OnHostnameChanged(pConVar, oldValue, flOldValue); + } +} s_HostnameChangeDetector; void RootConsoleMenu::OnSourceModStartup(bool late) { @@ -71,13 +77,16 @@ void RootConsoleMenu::OnSourceModStartup(bool late) CONVAR_REGISTER(this); AddRootConsoleCommand("version", "Display version information", this); AddRootConsoleCommand("credits", "Display credits listing", this); +} - ConVar *pHost = icvar->FindVar("hostname"); - pHost->InstallChangeCallback(_IntExt_OnHostnameChanged); +void RootConsoleMenu::OnSourceModAllInitialized() +{ + g_ConVarManager.AddConVarChangeListener("hostname", &s_HostnameChangeDetector); } void RootConsoleMenu::OnSourceModShutdown() { + g_ConVarManager.RemoveConVarChangeListener("hostname", &s_HostnameChangeDetector); RemoveRootConsoleCommand("credits", this); RemoveRootConsoleCommand("version", this); } diff --git a/core/sm_srvcmds.h b/core/sm_srvcmds.h index 1562bda2..c3950909 100644 --- a/core/sm_srvcmds.h +++ b/core/sm_srvcmds.h @@ -63,6 +63,7 @@ public: //IConCommandBaseAccessor bool RegisterConCommandBase(ConCommandBase *pCommand); public: //SMGlobalClass void OnSourceModStartup(bool late); + void OnSourceModAllInitialized(); void OnSourceModShutdown(); public: //IRootConsoleCommand void OnRootConsoleCommand(const char *cmdname, const CCommand &command); diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 26d9b22c..9b88b66c 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -281,6 +281,11 @@ void SourceModBase::StartSourceMod(bool late) enginePatch = SH_GET_CALLCLASS(engine); gamedllPatch = SH_GET_CALLCLASS(gamedll); + g_ShareSys.Initialize(); + + /* Make the global core identity */ + g_pCoreIdent = g_ShareSys.CreateCoreIdentity(); + /* Notify! */ SMGlobalClass *pBase = SMGlobalClass::head; while (pBase) @@ -289,9 +294,6 @@ void SourceModBase::StartSourceMod(bool late) pBase = pBase->m_pGlobalClassNext; } - /* Make the global core identity */ - g_pCoreIdent = g_ShareSys.CreateCoreIdentity(); - /* Notify! */ pBase = SMGlobalClass::head; while (pBase) diff --git a/core/systems/ShareSys.cpp b/core/systems/ShareSys.cpp index c3bf2c2d..196c4eb0 100644 --- a/core/systems/ShareSys.cpp +++ b/core/systems/ShareSys.cpp @@ -54,7 +54,7 @@ IdentityToken_t *ShareSystem::CreateCoreIdentity() return CreateIdentity(m_CoreType, this); } -void ShareSystem::OnSourceModStartup(bool late) +void ShareSystem::Initialize() { TypeAccess sec; diff --git a/core/systems/ShareSys.h b/core/systems/ShareSys.h index 60e99c21..998ec98a 100644 --- a/core/systems/ShareSys.h +++ b/core/systems/ShareSys.h @@ -84,7 +84,7 @@ public: //IShareSys void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives); public: //SMGlobalClass /* Pre-empt in case anything tries to register idents early */ - void OnSourceModStartup(bool late); + void Initialize(); void OnSourceModShutdown(); public: //IHandleTypeDispatch void OnHandleDestroy(HandleType_t type, void *object); From 37096d73070dbe03963483c1ea72a213ba6cd0b7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 6 Dec 2007 12:26:59 +0000 Subject: [PATCH 094/263] fixed doc error on GetClientMenu() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401777 --- plugins/include/menus.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/include/menus.inc b/plugins/include/menus.inc index 46537ab2..825209dc 100644 --- a/plugins/include/menus.inc +++ b/plugins/include/menus.inc @@ -575,8 +575,7 @@ native Handle:CreatePanel(Handle:hStyle=INVALID_HANDLE); native Handle:CreateMenuEx(Handle:hStyle=INVALID_HANDLE, MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DEFAULT); /** - * Returns whether a client is viewing a menu. If the menu source - * is MenuSource_Normal, a menu Handle will also be returned. + * Returns whether a client is viewing a menu. * * @param client Client index. * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. From 6151b89b946d86e6713ef05dee1e5d9640784931 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 6 Dec 2007 14:08:22 +0000 Subject: [PATCH 095/263] fixed documented param order being wrong on ReadMapList() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401778 --- plugins/include/sourcemod.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index 6f6f52f4..842c5740 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -520,14 +520,14 @@ forward OnLibraryRemoved(const String:name[]); * as strings. The array is never checked for duplicates, and it is * not read beforehand. Only the serial number is used to detect * changes. - * @param str Config name, or "default" for the default map list. Config names - * should be somewhat descriptive. For example, the admin menu uses - * a config name of "admin menu". The list names can be configured - * by users in addons/sourcemod/configs/maplists.cfg. * @param serial Serial number to identify last known map list change. If -1, the * the value will not be checked. If the map list has since changed, * the serial is updated (even if -1 was passed). If there is an error * finding a valid maplist, then the serial is set to -1. + * @param str Config name, or "default" for the default map list. Config names + * should be somewhat descriptive. For example, the admin menu uses + * a config name of "admin menu". The list names can be configured + * by users in addons/sourcemod/configs/maplists.cfg. * @param flags MAPLIST_FLAG flags. * @return On failure: * INVALID_HANDLE is returned, the serial is set to -1, and the input From 1ad8e3418146875820b448ba0dc3ea50f4e7fb93 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Fri, 7 Dec 2007 00:17:24 +0000 Subject: [PATCH 096/263] fixed amb1252, GetPlayerInfo wouldnt work for the last player index fixed iserver crashing on linux --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401779 --- extensions/sdktools/vglobals.cpp | 35 +++++++++++++++++++++++++------- extensions/sdktools/vhelpers.cpp | 2 +- extensions/sdktools/vnatives.cpp | 5 +++++ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/extensions/sdktools/vglobals.cpp b/extensions/sdktools/vglobals.cpp index 09337a70..0925dbec 100644 --- a/extensions/sdktools/vglobals.cpp +++ b/extensions/sdktools/vglobals.cpp @@ -83,18 +83,28 @@ void InitializeValveGlobals() } #endif +bool vcmp(const void *_addr1, const void *_addr2, size_t len) +{ + unsigned char *addr1 = (unsigned char *)_addr1; + unsigned char *addr2 = (unsigned char *)_addr2; + + for (size_t i=0; i<len; i++) + { + if (addr2[i] == '*') + continue; + if (addr1[i] != addr2[i]) + return false; + } + + return true; +} + #if defined PLATFORM_WINDOWS /* Thanks to DS for the sigs */ #define ISERVER_WIN_SIG "\x8B\x44\x24\x2A\x50\xB9\x2A\x2A\x2A\x2A\xE8" #define ISERVER_WIN_SIG_LEN 11 void GetIServer() { - /* First check that the IVEngineServer::CreateFakeClient exists */ - if (!memutils->FindPattern(engine, ISERVER_WIN_SIG, ISERVER_WIN_SIG_LEN)) - { - return; - } - int offset; void *vfunc = NULL; @@ -110,6 +120,12 @@ void GetIServer() return; } + /* Check if we're on the expected function */ + if (!vcmp(vfunc, ISERVER_WIN_SIG, ISERVER_WIN_SIG_LEN)) + { + return; + } + /* Finally we have the interface we were looking for */ iserver = *reinterpret_cast<IServer **>(reinterpret_cast<unsigned char *>(vfunc) + offset); #else @@ -123,6 +139,11 @@ void GetIServer() void **vtable = *reinterpret_cast<void ***>(enginePatch->GetThisPtr() + info.thisptroffs + info.vtbloffs); vfunc = vtable[info.vtblindex]; } + /* Check if we're on the expected function */ + if (!vcmp(vfunc, ISERVER_WIN_SIG, ISERVER_WIN_SIG_LEN)) + { + return; + } iserver = *reinterpret_cast<IServer **>(reinterpret_cast<unsigned char *>(vfunc) + offset); #endif @@ -136,6 +157,6 @@ void GetIServer() return; } - iserver = *reinterpret_cast<IServer **>(addr); + iserver = reinterpret_cast<IServer *>(addr); } #endif diff --git a/extensions/sdktools/vhelpers.cpp b/extensions/sdktools/vhelpers.cpp index 44a577a1..571abdd0 100644 --- a/extensions/sdktools/vhelpers.cpp +++ b/extensions/sdktools/vhelpers.cpp @@ -272,7 +272,7 @@ bool GetPlayerInfo(int client, player_info_t *info) #if defined ORANGEBOX_BUILD return engine->GetPlayerInfo(client, info); #else - return iserver->GetPlayerInfo(client, info); + return (iserver) ? iserver->GetPlayerInfo(client-1, info) : false; #endif } diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index ce54958d..6416caea 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -853,6 +853,11 @@ static cell_t GetPlayerDecalFile(IPluginContext *pContext, const cell_t *params) static cell_t GetServerNetStats(IPluginContext *pContext, const cell_t *params) { + if (iserver == NULL) + { + return pContext->ThrowNativeError("IServer interface not supported, file a bug report."); + } + float in, out; cell_t *pIn, *pOut; From bb64e2bd6d71b85ada38484c471ae8020aeaf32e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 7 Dec 2007 21:43:28 +0000 Subject: [PATCH 097/263] added debugging to build tool --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401780 --- tools/builder/ABuilder.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/builder/ABuilder.cs b/tools/builder/ABuilder.cs index d678b974..1500d699 100644 --- a/tools/builder/ABuilder.cs +++ b/tools/builder/ABuilder.cs @@ -44,11 +44,13 @@ namespace builder p.WaitForExit(); p.Close(); + Console.WriteLine("Debug: wd = " + info.WorkingDirectory + " fn = " + info.FileName + " arg = " + info.Arguments); Console.WriteLine(output); string binary = Config.PathFormat("{0}/{1}/addons/sourcemod/scripting/{2}.smx", cfg.pkg_path, pkg.GetBaseFolder(), pl.Source); if (!File.Exists(binary)) { + Console.WriteLine("Could not find binary: " + binary); return false; } From f187f1eb8aac9a4e600fa9c6a88b0748bc7cda21 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 8 Dec 2007 17:31:44 +0000 Subject: [PATCH 098/263] fixed amb1225 - extremely rare compiler bug could cause crash. unluckily, this suddenly started breaking the linux build, which should now work again --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401781 --- sourcepawn/compiler/sc3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sourcepawn/compiler/sc3.c b/sourcepawn/compiler/sc3.c index 5ff02707..c9a86974 100644 --- a/sourcepawn/compiler/sc3.c +++ b/sourcepawn/compiler/sc3.c @@ -2365,7 +2365,7 @@ static int nesting=0; */ } else { arglist[argpos]=ARG_DONE; /* flag argument as "present" */ - if (arg[argidx].numtags==1) /* set the expected tag, if any */ + if (arg[argidx].ident!=0 && arg[argidx].numtags==1) /* set the expected tag, if any */ lval.cmptag=arg[argidx].tags[0]; lvalue=hier14(&lval); assert(sc_status==statFIRST || arg[argidx].tags!=NULL); From 4ec75fbfe4874890669b605c956fea9a44360be9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 9 Dec 2007 19:33:25 +0000 Subject: [PATCH 099/263] added amb1257 - synergy support for sdktools --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401782 --- gamedata/sdktools.games.txt | 78 +++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index aadea07f..fb742734 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -42,6 +42,7 @@ "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" + "game" "synergy" } "Offsets" @@ -100,6 +101,7 @@ "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" + "game" "synergy" } "Offsets" @@ -150,6 +152,7 @@ "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" + "game" "synergy" } "Offsets" @@ -197,6 +200,7 @@ "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" + "game" "synergy" } "Signatures" @@ -1244,5 +1248,79 @@ } } } + + /* Synergy Release 1 */ + "synergy" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "334" + "linux" "335" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + } } From 5f81dd7be599c540507948f6ba0599f4f107eaab Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sun, 9 Dec 2007 21:45:23 +0000 Subject: [PATCH 100/263] Small change to RTV to avoid timer issues. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401783 --- plugins/rockthevote.sp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index a57f038a..b85b54d1 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -315,7 +315,9 @@ public Action:Command_Say(client, args) public Action:Timer_DelayRTV(Handle:timer) { - g_RTVAllowed = true; + g_RTVAllowed = true; + g_RTVStarted = false; + g_RTVEnded = false; } public Action:Timer_StartRTV(Handle:timer) From ff15a84e7c4c8aa4f7d34c3d6bd82a5395a496e8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 03:14:54 +0000 Subject: [PATCH 101/263] added temporary debugging to ReadMapList() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401784 --- core/smn_maplists.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index 864751ee..4907bf14 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -524,6 +524,10 @@ private: if ((fp = fopen(pMapList->path, "rt")) == NULL) { + char error_msg[255]; + strncopy(error_msg, "Unknown error", sizeof(error_msg)); + g_LibSys.GetPlatformError(error_msg, sizeof(error_msg)); + g_Logger.LogError("ReadMapList(): Could not open file \"%s\": %s\n", pMapList->path, error_msg); return false; } From d3a22aeff7ee463357795a8105f98c7a0ca07fc1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 05:14:37 +0000 Subject: [PATCH 102/263] added amb1262 - adt_trie --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401785 --- core/Makefile.ep1 | 3 +- core/Makefile.ep2 | 3 +- core/Makefile.orig | 3 +- core/msvc8/sourcemod_mm.vcproj | 4 + core/smn_adt_trie.cpp | 513 +++++++++++++++++++++++++++++++++ plugins/include/adt.inc | 1 + plugins/include/adt_trie.inc | 146 ++++++++++ 7 files changed, 670 insertions(+), 3 deletions(-) create mode 100644 core/smn_adt_trie.cpp create mode 100644 plugins/include/adt_trie.inc diff --git a/core/Makefile.ep1 b/core/Makefile.ep1 index 195f7693..c14f55d9 100644 --- a/core/Makefile.ep1 +++ b/core/Makefile.ep1 @@ -30,7 +30,8 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ - smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp + smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ + smn_adt_trie.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 index f0df5e60..99f9dbbf 100644 --- a/core/Makefile.ep2 +++ b/core/Makefile.ep2 @@ -30,7 +30,8 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ - smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp + smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ + smn_adt_trie.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ diff --git a/core/Makefile.orig b/core/Makefile.orig index dc2e4c76..fe895f49 100644 --- a/core/Makefile.orig +++ b/core/Makefile.orig @@ -30,7 +30,8 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ - smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp + smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ + smn_adt_trie.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index b059bb32..d7e53673 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1310,6 +1310,10 @@ RelativePath="..\smn_adt_array.cpp" > </File> + <File + RelativePath="..\smn_adt_trie.cpp" + > + </File> <File RelativePath="..\smn_banning.cpp" > diff --git a/core/smn_adt_trie.cpp b/core/smn_adt_trie.cpp new file mode 100644 index 00000000..79fc6585 --- /dev/null +++ b/core/smn_adt_trie.cpp @@ -0,0 +1,513 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <malloc.h> +#include "sm_globals.h" +#include "sm_stringutil.h" +#include "HandleSys.h" +#include "sm_trie_tpl.h" + +HandleType_t htCellTrie; + +enum TrieNodeType +{ + TrieNode_Cell, + TrieNode_CellArray, + TrieNode_String, +}; + +struct SmartTrieNode +{ + SmartTrieNode() + { + ptr = NULL; + type = TrieNode_Cell; + } + SmartTrieNode(const SmartTrieNode &obj) + { + type = obj.type; + ptr = obj.ptr; + data = obj.data; + data_len = obj.data_len; + } + SmartTrieNode & operator =(const SmartTrieNode &src) + { + type = src.type; + ptr = src.ptr; + data = src.data; + data_len = src.data_len; + return *this; + } + TrieNodeType type; + cell_t *ptr; + cell_t data; + cell_t data_len; +}; + +struct CellTrie +{ + KTrie<SmartTrieNode> trie; + cell_t mem_usage; +}; + +class TrieHelpers : + public SMGlobalClass, + public IHandleTypeDispatch +{ +public: //SMGlobalClass + void OnSourceModAllInitialized() + { + htCellTrie = g_HandleSys.CreateType("Trie", this, 0, NULL, NULL, g_pCoreIdent, NULL); + } + void OnSourceModShutdown() + { + g_HandleSys.RemoveType(htCellTrie, g_pCoreIdent); + } +public: //IHandleTypeDispatch + static void DestroySmartTrieNode(SmartTrieNode *pNode) + { + free(pNode->ptr); + } + void OnHandleDestroy(HandleType_t type, void *object) + { + CellTrie *pTrie = (CellTrie *)object; + + pTrie->trie.run_destructor(DestroySmartTrieNode); + + delete pTrie; + } + bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + CellTrie *pArray = (CellTrie *)object; + *pSize = sizeof(CellTrie) + pArray->mem_usage + pArray->trie.mem_usage(); + return true; + } +} s_CellTrieHelpers; + +static cell_t CreateTrie(IPluginContext *pContext, const cell_t *params) +{ + CellTrie *pTrie = new CellTrie; + Handle_t hndl; + + pTrie->mem_usage = 0; + + if ((hndl = g_HandleSys.CreateHandle(htCellTrie, pTrie, pContext->GetIdentity(), g_pCoreIdent, NULL)) + == BAD_HANDLE) + { + delete pTrie; + return BAD_HANDLE; + } + + return hndl; +} + +static void UpdateNodeCells(CellTrie *pTrie, SmartTrieNode *pData, const cell_t *cells, cell_t num_cells) +{ + if (num_cells == 1) + { + pData->data = *cells; + pData->type = TrieNode_Cell; + } + else + { + pData->type = TrieNode_CellArray; + if (pData->ptr == NULL) + { + pData->ptr = (cell_t *)malloc(num_cells * sizeof(cell_t)); + pData->data_len = num_cells; + pTrie->mem_usage += (pData->data_len * sizeof(cell_t)); + } + else if (pData->data_len < num_cells) + { + pData->ptr = (cell_t *)realloc(pData->ptr, num_cells * sizeof(cell_t)); + pTrie->mem_usage += (num_cells - pData->data_len) * sizeof(cell_t); + pData->data_len = num_cells; + } + if (num_cells != 0) + { + memcpy(pData->ptr, cells, sizeof(cell_t) * num_cells); + } + pData->data = num_cells; + } +} + +static void UpdateNodeString(CellTrie *pTrie, SmartTrieNode *pData, const char *str) +{ + size_t len = strlen(str); + cell_t num_cells = (len + sizeof(cell_t)) / sizeof(cell_t); + + if (pData->ptr == NULL) + { + pData->ptr = (cell_t *)malloc(num_cells * sizeof(cell_t)); + pData->data_len = num_cells; + pTrie->mem_usage += (pData->data_len * sizeof(cell_t)); + } + else if (pData->data_len < num_cells) + { + pData->ptr = (cell_t *)realloc(pData->ptr, num_cells * sizeof(cell_t)); + pTrie->mem_usage += (num_cells - pData->data_len) * sizeof(cell_t); + pData->data_len = num_cells; + } + + strcpy((char *)pData->ptr, str); + pData->data = len; + pData->type = TrieNode_String; +} + +static cell_t SetTrieValue(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + char *key; + pContext->LocalToString(params[2], &key); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL) + { + SmartTrieNode node; + UpdateNodeCells(pTrie, &node, ¶ms[3], 1); + return pTrie->trie.insert(key, node) ? 1 : 0; + } + + if (!params[4]) + { + return 0; + } + + UpdateNodeCells(pTrie, pNode, ¶ms[3], 1); + + return 1; +} + +static cell_t SetTrieArray(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + if (params[4] < 0) + { + return pContext->ThrowNativeError("Invalid array size: %d", params[4]); + } + + char *key; + cell_t *array; + pContext->LocalToString(params[2], &key); + pContext->LocalToPhysAddr(params[3], &array); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL) + { + SmartTrieNode node; + UpdateNodeCells(pTrie, &node, array, params[4]); + if (!pTrie->trie.insert(key, node)) + { + free(node.ptr); + return 0; + } + return 1; + } + + if (!params[4]) + { + return 0; + } + + UpdateNodeCells(pTrie, pNode, array, params[4]); + + return 1; +} + +static cell_t SetTrieString(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + char *key, *val; + pContext->LocalToString(params[2], &key); + pContext->LocalToString(params[3], &val); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL) + { + SmartTrieNode node; + UpdateNodeString(pTrie, &node, val); + if (!pTrie->trie.insert(key, node)) + { + free(node.ptr); + return 0; + } + return 1; + } + + if (!params[4]) + { + return 0; + } + + UpdateNodeString(pTrie, pNode, val); + + return 1; +} + +static cell_t RemoveFromTrie(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + char *key; + pContext->LocalToString(params[2], &key); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL) + { + return 0; + } + + free(pNode->ptr); + pNode->ptr = NULL; + + return pTrie->trie.remove(key) ? 1 : 0; +} + +static cell_t ClearTrie(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + pTrie->trie.run_destructor(TrieHelpers::DestroySmartTrieNode); + pTrie->trie.clear(); + + return 1; +} + +static cell_t GetTrieValue(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + char *key; + cell_t *pValue; + pContext->LocalToString(params[2], &key); + pContext->LocalToPhysAddr(params[3], &pValue); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL) + { + return 0; + } + + if (pNode->type == TrieNode_Cell) + { + *pValue = pNode->data; + return 1; + } + + return 0; +} + +static cell_t GetTrieArray(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + if (params[4] < 0) + { + return pContext->ThrowNativeError("Invalid array size: %d", params[4]); + } + + char *key; + cell_t *pValue, *pSize; + pContext->LocalToString(params[2], &key); + pContext->LocalToPhysAddr(params[3], &pValue); + pContext->LocalToPhysAddr(params[5], &pSize); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL + || pNode->type != TrieNode_CellArray) + { + return 0; + } + + if (pNode->ptr == NULL) + { + *pSize = 0; + return 1; + } + + if (pNode->data > params[4]) + { + *pSize = params[4]; + } + else if (params[4] != 0) + { + *pSize = pNode->data; + } + else + { + return 1; + } + + memcpy(pValue, pNode->ptr, sizeof(cell_t) * pSize[0]); + + return 1; +} + +static cell_t GetTrieString(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + if (params[4] < 0) + { + return pContext->ThrowNativeError("Invalid buffer size: %d", params[4]); + } + + char *key; + cell_t *pSize; + pContext->LocalToString(params[2], &key); + pContext->LocalToPhysAddr(params[5], &pSize); + + SmartTrieNode *pNode; + if ((pNode = pTrie->trie.retrieve(key)) == NULL + || pNode->type != TrieNode_String) + { + return 0; + } + + if (pNode->ptr == NULL) + { + *pSize = 0; + pContext->StringToLocal(params[3], params[4], ""); + return 1; + } + + size_t written; + pContext->StringToLocalUTF8(params[3], params[4], (char *)pNode->ptr, &written); + + *pSize = (cell_t)written; + + return 1; +} + +REGISTER_NATIVES(trieNatives) +{ + {"ClearTrie", ClearTrie}, + {"CreateTrie", CreateTrie}, + {"GetTrieArray", GetTrieArray}, + {"GetTrieString", GetTrieString}, + {"GetTrieValue", GetTrieValue}, + {"RemoveFromTrie", RemoveFromTrie}, + {"SetTrieArray", SetTrieArray}, + {"SetTrieString", SetTrieString}, + {"SetTrieValue", SetTrieValue}, + {NULL, NULL}, +}; diff --git a/plugins/include/adt.inc b/plugins/include/adt.inc index 819fd512..5fb58bf0 100644 --- a/plugins/include/adt.inc +++ b/plugins/include/adt.inc @@ -36,3 +36,4 @@ #define _adt_included #include <adt_array> +#include <adt_trie> diff --git a/plugins/include/adt_trie.inc b/plugins/include/adt_trie.inc new file mode 100644 index 00000000..303b1949 --- /dev/null +++ b/plugins/include/adt_trie.inc @@ -0,0 +1,146 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _adt_trie_included + #endinput +#endif +#define _adt_trie_included + +/** + * Creates a Trie structure. A trie is a data storage object that maps any value to a + * string of text. It features very fast lookup and deletion, but grows very slow for + * insertion once tens of thousands of items are added. + * + * Keys in Tries are unique. That is, each key may only have one value. Unlike arrays, + * Tries cannot be iterated right now. Since the contents are known to be unique, to + * work around this, you can use ADT Arrays to store a list of keys known to be in a + * Trie. + * + * @return New Trie Handle, which must be freed via CloseHandle(). + */ +native Handle:CreateTrie(); + +/** + * Sets a value in a Trie, either inserting a new entry or replacing an old one. + * + * @param trie Trie Handle. + * @param key Key string. + * @param value Value to store at this key. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. + */ +native bool:SetTrieValue(Handle:trie, const String:key[], any:value, bool:replace=true); + +/** + * Sets an array value in a Trie, either inserting a new entry or replacing an old one. + * + * @param trie Trie Handle. + * @param key Key string. + * @param array Array to store. + * @param num_items Number of items in the array. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. + */ +native bool:SetTrieArray(Handle:trie, const String:key[], const array[], num_items, bool:replace=true); + +/** + * Sets a string value in a Trie, either inserting a new entry or replacing an old one. + * + * @param trie Trie Handle. + * @param key Key string. + * @param array Array to store. + * @param num_items Number of items in the array. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. + */ +native bool:SetTrieString(Handle:trie, const String:key[], const String:value[], bool:replace=true); + +/** + * Retrieves a value in a Trie. + * + * @param trie Trie Handle. + * @param key Key string. + * @param val Variable to store value. + * @return True on success. False if the key is not set, or the key is set + * as an array or string (not a value). + * @error Invalid Handle. + */ +native bool:GetTrieValue(Handle:trie, const String:key[], &any:value); + +/** + * Retrieves an array in a Trie. + * + * @param trie Trie Handle. + * @param key Key string. + * @param array Buffer to store array. + * @param max_size Maximum size of array buffer. + * @param size Optional parameter to store the number of elements written to the buffer. + * @return True on success. False if the key is not set, or the key is set + * as a value or string (not an array). + * @error Invalid Handle. + */ +native bool:GetTrieArray(Handle:trie, const String:key[], array[], max_size, &size=0); + +/** + * Retrieves a string in a Trie. + * + * @param trie Trie Handle. + * @param key Key string. + * @param value Buffer to store value. + * @param max_size Maximum size of string buffer. + * @param size Optional parameter to store the number of bytes written to the buffer. + * @return True on success. False if the key is not set, or the key is set + * as a value or array (not a string). + * @error Invalid Handle. + */ +native bool:GetTrieString(Handle:trie, const String:key[], String:value[], max_size, &size=0); + +/** + * Removes a key entry from a Trie. + * + * @param trie Trie Handle. + * @param key Key string. + * @return True on success, false if the value was never set. + * @error Invalid Handle. + */ +native RemoveFromTrie(Handle:trie, const String:key[]); + +/** + * Clears all entries from a Trie. + * + * @param trie Trie Handle. + * @error Invalid Handle. + */ +native ClearTrie(Handle:trie); From c987c2f0f7c08e6751f4bd0d004f6df8e6a225a3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 05:16:08 +0000 Subject: [PATCH 103/263] added new ktrie function for running custom destructor --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401786 --- public/sm_trie_tpl.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/public/sm_trie_tpl.h b/public/sm_trie_tpl.h index 195e1988..5d9b0b59 100644 --- a/public/sm_trie_tpl.h +++ b/public/sm_trie_tpl.h @@ -659,6 +659,17 @@ public: free(m_base); free(m_stringtab); } + void run_destructor(void (*dtor)(K * ptr)) + { + for (size_t i = 0; i <= m_baseSize; i++) + { + if (m_base[i].valset) + { + dtor(&m_base[i].value); + m_base[i].valset = false; + } + } + } private: class KTrieNode { From 7847e6e2e85012e3bb998b200c632bfd21c196fa Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 12:19:24 +0000 Subject: [PATCH 104/263] fixed amb1266 - cstrike's ProcCmdString hook had a bug --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401787 --- extensions/cstrike/extension.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extensions/cstrike/extension.cpp b/extensions/cstrike/extension.cpp index 20675935..b35b98ba 100644 --- a/extensions/cstrike/extension.cpp +++ b/extensions/cstrike/extension.cpp @@ -186,6 +186,10 @@ bool CStrike::ProcessCommandTarget(cmd_target_info_t *info) { team_index = 2; } + else + { + return false; + } info->num_targets = 0; From 1904348efc4c8fe0ffbd1bcfcb9e054a0c86488f Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 22:20:53 +0000 Subject: [PATCH 105/263] - fixed amb1237 part 1 - maplists.cfg missing could cause ReadMapList() to fail - fixed amb1237 part 2 - nextmap could fail in certain cases with mapchooser present --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401789 --- core/smn_maplists.cpp | 5 +---- plugins/nextmap.sp | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index 4907bf14..640e0570 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -524,10 +524,6 @@ private: if ((fp = fopen(pMapList->path, "rt")) == NULL) { - char error_msg[255]; - strncopy(error_msg, "Unknown error", sizeof(error_msg)); - g_LibSys.GetPlatformError(error_msg, sizeof(error_msg)); - g_Logger.LogError("ReadMapList(): Could not open file \"%s\": %s\n", pMapList->path, error_msg); return false; } @@ -658,6 +654,7 @@ static cell_t SetMapListCompatBind(IPluginContext *pContext, const cell_t *param pContext->LocalToString(params[1], &name); pContext->LocalToString(params[2], &file); + s_MapLists.UpdateCache(); s_MapLists.AddOrUpdateDefault(name, file); return 1; diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index b17159a3..56301872 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -96,19 +96,6 @@ public OnConfigsExecuted() // not in mapcyclefile. So we keep it set to the last expected nextmap. - ferret if (strcmp(lastMap, currentMap) == 0) { - if (ReadMapList(g_MapList, - g_MapListSerial, - "mapcyclefile", - MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT) - == INVALID_HANDLE) - { - if (g_MapListSerial == -1) - { - LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); - SetFailState("Mapcycle Not Found"); - } - } - FindAndSetNextMap(); } } @@ -213,6 +200,10 @@ public Action:UserMsg_VGUIMenu(UserMsg:msg_id, Handle:bf, const players[], playe if (!IsMapValid(map)) { + if (g_MapPos == -1) + { + FindAndSetNextMap(); + } GetArrayString(g_MapList, g_MapPos, map, sizeof(map)); } @@ -244,6 +235,19 @@ public Action:Timer_ChangeMap(Handle:timer, Handle:dp) FindAndSetNextMap() { + if (ReadMapList(g_MapList, + g_MapListSerial, + "mapcyclefile", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT) + == INVALID_HANDLE) + { + if (g_MapListSerial == -1) + { + LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); + SetFailState("Mapcycle Not Found"); + } + } + new mapCount = GetArraySize(g_MapList); decl String:mapName[32]; From f261c2e756e0aa3604e0d163c8a4bf89341a421e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 10 Dec 2007 23:32:32 +0000 Subject: [PATCH 106/263] fixed the global ock error message having too many punctuation marks --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401790 --- core/systems/PluginSys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index e8225662..d26cee0f 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -1125,7 +1125,7 @@ IPlugin *CPluginManager::LoadPlugin(const char *path, bool debug, PluginType typ { if (m_LoadingLocked) { - UTIL_Format(error, maxlength, "There is a global plugin loading lock in effect."); + UTIL_Format(error, maxlength, "There is a global plugin loading lock in effect"); } else { From 18235d90e58f9102772a6f3906b132b70a772431 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 12 Dec 2007 02:16:25 +0000 Subject: [PATCH 107/263] Added sm_beacon Fixed burn menu returning you to the slay menu. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401791 --- plugins/basefuncommands.sp | 17 ++ plugins/basefuncommands/beacon.sp | 255 +++++++++++++++++++++++ plugins/basefuncommands/burn.sp | 2 +- translations/basefuncommands.phrases.txt | 11 + 4 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 plugins/basefuncommands/beacon.sp diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index bfbf6139..55c49501 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -54,6 +54,7 @@ new g_SlapDamage[MAXPLAYERS+1]; #include "basefuncommands/slay.sp" #include "basefuncommands/burn.sp" #include "basefuncommands/slap.sp" +#include "basefuncommands/beacon.sp" public OnPluginStart() { @@ -63,8 +64,11 @@ public OnPluginStart() RegAdminCmd("sm_burn", Command_Burn, ADMFLAG_SLAY, "sm_burn <#userid|name> [time]"); RegAdminCmd("sm_slap", Command_Slap, ADMFLAG_SLAY, "sm_slap <#userid|name> [damage]"); RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); + RegAdminCmd("sm_beacon", Command_Beacon, ADMFLAG_SLAY, "sm_beacon <#userid|name>"); RegAdminCmd("sm_play", Command_Play, ADMFLAG_GENERIC, "sm_play <#userid|name> <filename>"); + SetupBeacon(); + /* Account for late loading */ new Handle:topmenu; if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) @@ -73,6 +77,11 @@ public OnPluginStart() } } +public OnMapEnd() +{ + KillAllBeacons(); +} + public OnAdminMenuReady(Handle:topmenu) { /* Block us from being called twice */ @@ -112,6 +121,14 @@ public OnAdminMenuReady(Handle:topmenu) player_commands, "sm_slap", ADMFLAG_SLAY); + + AddToTopMenu(hTopMenu, + "sm_beacon", + TopMenuObject_Item, + AdminMenu_Beacon, + player_commands, + "sm_beacon", + ADMFLAG_SLAY); } } diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp new file mode 100644 index 00000000..0e434926 --- /dev/null +++ b/plugins/basefuncommands/beacon.sp @@ -0,0 +1,255 @@ +new Handle:g_BeaconTimers[MAXPLAYERS+1] = {INVALID_HANDLE, ...}; + +new g_beamSprite; +new g_haloSprite; + +SetupBeacon() +{ + HookEvent("player_death", Event_BeaconPlayerDeath, EventHookMode_Post); + HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); + + PrecacheSound("ambient/tones/elev1.wav", true); + //AddFileToDownloadsTable("sound/ambient/tones/elev1.wav"); + + g_beamSprite = PrecacheModel("materials/sprites/laser.vmt"); + g_haloSprite = PrecacheModel("materials/sprites/halo01.vmt"); +} + +CreateBeacon(client) +{ + g_BeaconTimers[client] = CreateTimer(2.0, Timer_Beacon, client, TIMER_REPEAT); +} + +KillBeacon(client) +{ + KillTimer(g_BeaconTimers[client]); + g_BeaconTimers[client] = INVALID_HANDLE; +} + +KillAllBeacons() +{ + new maxclients = GetMaxClients(); + for (new i = 1; i <= maxclients; i++) + { + if (g_BeaconTimers[i] != INVALID_HANDLE) + { + KillBeacon(i); + } + } +} + +PerformBeacon(client, target) +{ + LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); + + if (g_BeaconTimers[target] == INVALID_HANDLE) + { + CreateBeacon(target); + LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); + } + else + { + KillBeacon(target); + LogAction(client, target, "\"%L\" removed a beacon on \"%L\"", client, target); + } +} + +DisplayBeacon(client, r, g, b, a) +{ + new Float:vec[3]; + GetClientAbsOrigin(client, vec); + vec[2] += 5; + + TE_Start("BeamRingPoint"); + TE_WriteVector("m_vecCenter", vec); + TE_WriteFloat("m_flStartRadius", 20.0); + TE_WriteFloat("m_flEndRadius", 400.0); + TE_WriteNum("m_nModelIndex", g_beamSprite); + TE_WriteNum("m_nHaloIndex", g_haloSprite); + TE_WriteNum("m_nStartFrame", 0); + TE_WriteNum("m_nFrameRate", 0); + TE_WriteFloat("m_fLife", 1.0); + TE_WriteFloat("m_fWidth", 5.0); + TE_WriteFloat("m_fEndWidth", 5.0); + TE_WriteFloat("m_fAmplitude", 0.0); + TE_WriteNum("r", r); + TE_WriteNum("g", g); + TE_WriteNum("b", b); + TE_WriteNum("a", a); + TE_WriteNum("m_nSpeed", 50); + TE_WriteNum("m_nFlags", 0); + TE_WriteNum("m_nFadeLength", 0); + TE_SendToAll(); +} + +public Action:Timer_Beacon(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillBeacon(client); + return Plugin_Handled; + } + + new team = GetClientTeam(client); + + if (team == 2) + { + DisplayBeacon(client, 255, 75, 75, 255); + } + else if (team == 3) + { + DisplayBeacon(client, 75, 75, 255, 255); + } + + // Create a double ring, if we are the repeating timer. + if (g_BeaconTimers[client] == timer) + { + CreateTimer(0.2, Timer_Beacon, client); + + new Float:vec[3]; + GetClientEyePosition(client, vec); + EmitAmbientSound("ambient/tones/elev1.wav", vec, client, SNDLEVEL_RAIDSIREN); + } + + return Plugin_Handled; +} + +public Action:Event_BeaconPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast) +{ + new client = GetClientOfUserId(GetEventInt(event, "userid")); + if (g_BeaconTimers[client] != INVALID_HANDLE) + { + KillBeacon(client); + } + + return Plugin_Continue; +} + +public Action:Event_BeaconRoundEnd(Handle:event,const String:name[],bool:dontBroadcast) +{ + KillAllBeacons(); + + return Plugin_Handled; +} + +DisplayBeaconMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Beacon); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Beacon player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public AdminMenu_Beacon(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Beacon player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayBeaconMenu(param); + } +} + +public MenuHandler_Beacon(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformBeacon(param1, target); + ShowActivity2(param1, "[SM] ", "%t", "Toggled beacon on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayBeaconMenu(param1); + } + } +} + +public Action:Command_Beacon(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_beacon <#userid|name>"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformBeacon(client, target_list[i]); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled beacon on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled beacon on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/basefuncommands/burn.sp b/plugins/basefuncommands/burn.sp index 5c969a72..8a35987e 100644 --- a/plugins/basefuncommands/burn.sp +++ b/plugins/basefuncommands/burn.sp @@ -75,7 +75,7 @@ public MenuHandler_Burn(Handle:menu, MenuAction:action, param1, param2) /* Re-draw the menu if they're still valid */ if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) { - DisplaySlayMenu(param1); + DisplayBurnMenu(param1); } } } diff --git a/translations/basefuncommands.phrases.txt b/translations/basefuncommands.phrases.txt index 6eb1f9f6..d71f212a 100644 --- a/translations/basefuncommands.phrases.txt +++ b/translations/basefuncommands.phrases.txt @@ -10,6 +10,11 @@ { "en" "Burn player" } + + "Beacon player" + { + "en" "Beacon player" + } "Slap player" { @@ -43,4 +48,10 @@ "#format" "{1:t}" "en" "Set {1} on fire." } + + "Toggled beacon on target" + { + "#format" "{1:t}" + "en" "toggled beacon on {1}." + } } From 0e4ea825d3bf74529279d0b9ba55c20ac0cd094a Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 12 Dec 2007 02:23:00 +0000 Subject: [PATCH 108/263] Removed duplicated line in beacon.sp, whoops --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401792 --- plugins/basefuncommands/beacon.sp | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index 0e434926..63112378 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -9,7 +9,6 @@ SetupBeacon() HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); PrecacheSound("ambient/tones/elev1.wav", true); - //AddFileToDownloadsTable("sound/ambient/tones/elev1.wav"); g_beamSprite = PrecacheModel("materials/sprites/laser.vmt"); g_haloSprite = PrecacheModel("materials/sprites/halo01.vmt"); @@ -40,8 +39,6 @@ KillAllBeacons() PerformBeacon(client, target) { - LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); - if (g_BeaconTimers[target] == INVALID_HANDLE) { CreateBeacon(target); From b63963ef86ad1c97b70edf80ae808d0df5c234f4 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 12 Dec 2007 02:24:57 +0000 Subject: [PATCH 109/263] Removed player_death event from beacon.sp, wasn't needed, lol --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401793 --- plugins/basefuncommands/beacon.sp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index 63112378..2c89807c 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -5,7 +5,6 @@ new g_haloSprite; SetupBeacon() { - HookEvent("player_death", Event_BeaconPlayerDeath, EventHookMode_Post); HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); PrecacheSound("ambient/tones/elev1.wav", true); @@ -111,17 +110,6 @@ public Action:Timer_Beacon(Handle:timer, any:client) return Plugin_Handled; } -public Action:Event_BeaconPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast) -{ - new client = GetClientOfUserId(GetEventInt(event, "userid")); - if (g_BeaconTimers[client] != INVALID_HANDLE) - { - KillBeacon(client); - } - - return Plugin_Continue; -} - public Action:Event_BeaconRoundEnd(Handle:event,const String:name[],bool:dontBroadcast) { KillAllBeacons(); From 43150b07c98fb9a151db0b1fd67f236e24fdbb7a Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Dec 2007 22:45:23 +0000 Subject: [PATCH 110/263] fixed for amb1279 from ferret --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401794 --- plugins/basefuncommands.sp | 7 ++- plugins/basefuncommands/beacon.sp | 81 +++++++++++++++---------------- 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 55c49501..11694dd1 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -67,8 +67,6 @@ public OnPluginStart() RegAdminCmd("sm_beacon", Command_Beacon, ADMFLAG_SLAY, "sm_beacon <#userid|name>"); RegAdminCmd("sm_play", Command_Play, ADMFLAG_GENERIC, "sm_play <#userid|name> <filename>"); - SetupBeacon(); - /* Account for late loading */ new Handle:topmenu; if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) @@ -77,6 +75,11 @@ public OnPluginStart() } } +public OnMapStart() +{ + SetupBeacon(); +} + public OnMapEnd() { KillAllBeacons(); diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index 2c89807c..eb864ccd 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -1,16 +1,26 @@ new Handle:g_BeaconTimers[MAXPLAYERS+1] = {INVALID_HANDLE, ...}; -new g_beamSprite; -new g_haloSprite; +new g_BeaconRoundEndHooked = false; + +new g_BeamSprite; +new g_HaloSprite; + +new redColor[4] = {255, 75, 75, 255}; +new greenColor[4] = {75, 255, 75, 255}; +new blueColor[4] = {75, 75, 255, 255}; SetupBeacon() { - HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); + if (!g_BeaconRoundEndHooked) + { + HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); + g_BeaconRoundEndHooked = true; + } PrecacheSound("ambient/tones/elev1.wav", true); - g_beamSprite = PrecacheModel("materials/sprites/laser.vmt"); - g_haloSprite = PrecacheModel("materials/sprites/halo01.vmt"); + g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt"); + g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt"); } CreateBeacon(client) @@ -50,59 +60,44 @@ PerformBeacon(client, target) } } -DisplayBeacon(client, r, g, b, a) +public Action:Timer_Beacon(Handle:timer, any:client) { + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + if (g_BeaconTimers[client] == timer) + { + KillBeacon(client); + } + + return Plugin_Handled; + } + + new team = GetClientTeam(client); + new Float:vec[3]; GetClientAbsOrigin(client, vec); vec[2] += 5; - - TE_Start("BeamRingPoint"); - TE_WriteVector("m_vecCenter", vec); - TE_WriteFloat("m_flStartRadius", 20.0); - TE_WriteFloat("m_flEndRadius", 400.0); - TE_WriteNum("m_nModelIndex", g_beamSprite); - TE_WriteNum("m_nHaloIndex", g_haloSprite); - TE_WriteNum("m_nStartFrame", 0); - TE_WriteNum("m_nFrameRate", 0); - TE_WriteFloat("m_fLife", 1.0); - TE_WriteFloat("m_fWidth", 5.0); - TE_WriteFloat("m_fEndWidth", 5.0); - TE_WriteFloat("m_fAmplitude", 0.0); - TE_WriteNum("r", r); - TE_WriteNum("g", g); - TE_WriteNum("b", b); - TE_WriteNum("a", a); - TE_WriteNum("m_nSpeed", 50); - TE_WriteNum("m_nFlags", 0); - TE_WriteNum("m_nFadeLength", 0); - TE_SendToAll(); -} - -public Action:Timer_Beacon(Handle:timer, any:client) -{ - if (!IsClientInGame(client) || !IsPlayerAlive(client)) - { - KillBeacon(client); - return Plugin_Handled; - } - new team = GetClientTeam(client); - - if (team == 2) + if (team == 2) { - DisplayBeacon(client, 255, 75, 75, 255); + TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, redColor, 50, 0); } else if (team == 3) { - DisplayBeacon(client, 75, 75, 255, 255); + TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, blueColor, 50, 0); } + else + { + TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, greenColor, 50, 0); + } + + TE_SendToAll(); // Create a double ring, if we are the repeating timer. if (g_BeaconTimers[client] == timer) { CreateTimer(0.2, Timer_Beacon, client); - new Float:vec[3]; GetClientEyePosition(client, vec); EmitAmbientSound("ambient/tones/elev1.wav", vec, client, SNDLEVEL_RAIDSIREN); } @@ -114,7 +109,7 @@ public Action:Event_BeaconRoundEnd(Handle:event,const String:name[],bool:dontBro { KillAllBeacons(); - return Plugin_Handled; + return Plugin_Handled; } DisplayBeaconMenu(client) From 46c98c64fafafafb7d6ef619d950dcfe8279fd0e Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Thu, 13 Dec 2007 00:21:07 +0000 Subject: [PATCH 111/263] Fixed file headers on all base plugin includes. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401795 --- plugins/basebans/ban.sp | 33 +++++++++++++++++++++++++++ plugins/basecomm/gag.sp | 33 +++++++++++++++++++++++++++ plugins/basecommands/cancelvote.sp | 34 +++++++++++++++++++++++++++- plugins/basecommands/execcfg.sp | 33 +++++++++++++++++++++++++++ plugins/basecommands/kick.sp | 34 +++++++++++++++++++++++++++- plugins/basecommands/map.sp | 34 +++++++++++++++++++++++++++- plugins/basecommands/reloadadmins.sp | 34 +++++++++++++++++++++++++++- plugins/basecommands/who.sp | 34 +++++++++++++++++++++++++++- plugins/basefuncommands/beacon.sp | 33 +++++++++++++++++++++++++++ plugins/basefuncommands/burn.sp | 33 +++++++++++++++++++++++++++ plugins/basefuncommands/slap.sp | 33 +++++++++++++++++++++++++++ plugins/basefuncommands/slay.sp | 32 ++++++++++++++++++++++++++ plugins/basefunvotes/votealltalk.sp | 33 +++++++++++++++++++++++++++ plugins/basefunvotes/voteburn.sp | 33 +++++++++++++++++++++++++++ plugins/basefunvotes/voteff.sp | 33 +++++++++++++++++++++++++++ plugins/basefunvotes/votegravity.sp | 33 +++++++++++++++++++++++++++ plugins/basefunvotes/voteslay.sp | 33 +++++++++++++++++++++++++++ plugins/basevotes/voteban.sp | 32 ++++++++++++++++++++++++++ plugins/basevotes/votekick.sp | 33 +++++++++++++++++++++++++++ plugins/basevotes/votemap.sp | 33 +++++++++++++++++++++++++++ 20 files changed, 658 insertions(+), 5 deletions(-) diff --git a/plugins/basebans/ban.sp b/plugins/basebans/ban.sp index 5b3bb0e5..3ce206be 100644 --- a/plugins/basebans/ban.sp +++ b/plugins/basebans/ban.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands + * Functionality related to banning. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + PrepareBan(client, target, time, const String:reason[]) { decl String:authid[64], String:name[32]; diff --git a/plugins/basecomm/gag.sp b/plugins/basecomm/gag.sp index e8bd2925..fc14b32b 100644 --- a/plugins/basecomm/gag.sp +++ b/plugins/basecomm/gag.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecomm + * Part of Basecomm plugin, menu and other functionality. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + enum CommType { CommType_Mute, diff --git a/plugins/basecommands/cancelvote.sp b/plugins/basecommands/cancelvote.sp index 4946645c..1fb36689 100644 --- a/plugins/basecommands/cancelvote.sp +++ b/plugins/basecommands/cancelvote.sp @@ -1,4 +1,36 @@ - +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides cancelvote functionality. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + PerformCancelVote(client) { if (!IsVoteInProgress()) diff --git a/plugins/basecommands/execcfg.sp b/plugins/basecommands/execcfg.sp index 916d1d9f..b4cebf6b 100644 --- a/plugins/basecommands/execcfg.sp +++ b/plugins/basecommands/execcfg.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides exec cfg functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + new Handle:g_ConfigMenu = INVALID_HANDLE; PerformExec(client, String:path[]) diff --git a/plugins/basecommands/kick.sp b/plugins/basecommands/kick.sp index 935100a2..13f580a9 100644 --- a/plugins/basecommands/kick.sp +++ b/plugins/basecommands/kick.sp @@ -1,4 +1,36 @@ - +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides kick functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + PerformKick(client, target, const String:reason[]) { LogAction(client, target, "\"%L\" kicked \"%L\" (reason \"%s\")", client, target, reason); diff --git a/plugins/basecommands/map.sp b/plugins/basecommands/map.sp index a6c313c6..cea38b31 100644 --- a/plugins/basecommands/map.sp +++ b/plugins/basecommands/map.sp @@ -1,4 +1,36 @@ - +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides map functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + public MenuHandler_ChangeMap(Handle:menu, MenuAction:action, param1, param2) { if (action == MenuAction_Cancel) diff --git a/plugins/basecommands/reloadadmins.sp b/plugins/basecommands/reloadadmins.sp index d52197b0..82ce4d2e 100644 --- a/plugins/basecommands/reloadadmins.sp +++ b/plugins/basecommands/reloadadmins.sp @@ -1,4 +1,36 @@ - +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides reloadadmins functionality. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + PerformReloadAdmins(client) { /* Dump it all! */ diff --git a/plugins/basecommands/who.sp b/plugins/basecommands/who.sp index 1419bd53..699528e1 100644 --- a/plugins/basecommands/who.sp +++ b/plugins/basecommands/who.sp @@ -1,4 +1,36 @@ - +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basecommands Plugin + * Provides sm_who functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + PerformWho(client, target, ReplySource:reply, bool:is_admin) { decl String:name[MAX_NAME_LENGTH]; diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index eb864ccd..fdfc4c08 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides beacon functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + new Handle:g_BeaconTimers[MAXPLAYERS+1] = {INVALID_HANDLE, ...}; new g_BeaconRoundEndHooked = false; diff --git a/plugins/basefuncommands/burn.sp b/plugins/basefuncommands/burn.sp index 8a35987e..86ec5abf 100644 --- a/plugins/basefuncommands/burn.sp +++ b/plugins/basefuncommands/burn.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides burn functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + PerformBurn(client, target, Float:seconds) { LogAction(client, target, "\"%L\" ignited \"%L\" (seconds \"%f\")", client, target, seconds); diff --git a/plugins/basefuncommands/slap.sp b/plugins/basefuncommands/slap.sp index 1267381b..f5216835 100644 --- a/plugins/basefuncommands/slap.sp +++ b/plugins/basefuncommands/slap.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides slap functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + PerformSlap(client, target, damage) { LogAction(client, target, "\"%L\" slapped \"%L\" (damage \"%d\")", client, target, damage); diff --git a/plugins/basefuncommands/slay.sp b/plugins/basefuncommands/slay.sp index e1b0b0bd..3eb686bd 100644 --- a/plugins/basefuncommands/slay.sp +++ b/plugins/basefuncommands/slay.sp @@ -1,3 +1,35 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides slay functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ PerformSlay(client, target) { diff --git a/plugins/basefunvotes/votealltalk.sp b/plugins/basefunvotes/votealltalk.sp index a66b0a78..01731e71 100644 --- a/plugins/basefunvotes/votealltalk.sp +++ b/plugins/basefunvotes/votealltalk.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefunvotes Plugin + * Provides votealltalk functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteAllTalkMenu(client) { if (IsVoteInProgress()) diff --git a/plugins/basefunvotes/voteburn.sp b/plugins/basefunvotes/voteburn.sp index 4ba326a9..c3ea24bd 100644 --- a/plugins/basefunvotes/voteburn.sp +++ b/plugins/basefunvotes/voteburn.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefunvotes Plugin + * Provides voteburn functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteBurnMenu(client, target, String:name[]) { if (!IsPlayerAlive(target)) diff --git a/plugins/basefunvotes/voteff.sp b/plugins/basefunvotes/voteff.sp index 8effadd9..399a3ea4 100644 --- a/plugins/basefunvotes/voteff.sp +++ b/plugins/basefunvotes/voteff.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefunvotes Plugin + * Provides vote ff functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteFFMenu(client) { if (IsVoteInProgress()) diff --git a/plugins/basefunvotes/votegravity.sp b/plugins/basefunvotes/votegravity.sp index b5a37c7d..74a30ffd 100644 --- a/plugins/basefunvotes/votegravity.sp +++ b/plugins/basefunvotes/votegravity.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefunvotes Plugin + * Provides votegravity functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteGravityMenu(client,count,String:items[5][]) { diff --git a/plugins/basefunvotes/voteslay.sp b/plugins/basefunvotes/voteslay.sp index fd8f80c1..db705fa7 100644 --- a/plugins/basefunvotes/voteslay.sp +++ b/plugins/basefunvotes/voteslay.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefunvotes Plugin + * Provides voteslay functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteSlayMenu(client, target, String:name[]) { diff --git a/plugins/basevotes/voteban.sp b/plugins/basevotes/voteban.sp index 30918723..fa220f71 100644 --- a/plugins/basevotes/voteban.sp +++ b/plugins/basevotes/voteban.sp @@ -1,3 +1,35 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basevotes Plugin + * Provides ban functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ DisplayVoteBanMenu(client, target) { diff --git a/plugins/basevotes/votekick.sp b/plugins/basevotes/votekick.sp index 83f6594f..ca5122ca 100644 --- a/plugins/basevotes/votekick.sp +++ b/plugins/basevotes/votekick.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basevotes Plugin + * Provides kick functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + DisplayVoteKickMenu(client, target) { diff --git a/plugins/basevotes/votemap.sp b/plugins/basevotes/votemap.sp index 50460d2d..843b78d1 100644 --- a/plugins/basevotes/votemap.sp +++ b/plugins/basevotes/votemap.sp @@ -1,3 +1,36 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basevotes Plugin + * Provides map functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + */ + new Handle:g_MapList = INVALID_HANDLE; new g_mapCount; From 99ebeb164523bc62b8ef221927a44a1d54fae71d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 05:09:29 +0000 Subject: [PATCH 112/263] added amb1276 - local socket support --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401796 --- extensions/mysql/mysql/MyDriver.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/extensions/mysql/mysql/MyDriver.cpp b/extensions/mysql/mysql/MyDriver.cpp index 49ecd91c..a39e12ec 100644 --- a/extensions/mysql/mysql/MyDriver.cpp +++ b/extensions/mysql/mysql/MyDriver.cpp @@ -94,6 +94,7 @@ const char *MyDriver::GetProductName() MYSQL *Connect(const DatabaseInfo *info, char *error, size_t maxlength) { MYSQL *mysql = mysql_init(NULL); + const char *host = NULL, *socket = NULL; if (info->maxTimeout > 0) { @@ -106,13 +107,24 @@ MYSQL *Connect(const DatabaseInfo *info, char *error, size_t maxlength) my_bool my_true = true; mysql_options(mysql, MYSQL_OPT_RECONNECT, (const char *)&my_true); + if (info->host[0] == '/') + { + host = "localhost"; + socket = info->host; + } + else + { + host = info->host; + socket = NULL; + } + if (!mysql_real_connect(mysql, - info->host, + host, info->user, info->pass, info->database, info->port, - NULL, + socket, M_CLIENT_MULTI_RESULTS)) { /* :TODO: expose UTIL_Format from smutil! */ From af2142d70b1fa70d5a987aa8cbeb84d61e424e95 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 05:54:36 +0000 Subject: [PATCH 113/263] fixed amb1282 - elev1.wav is cstrike only --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401797 --- plugins/basefuncommands.sp | 9 +++++++++ plugins/basefuncommands/beacon.sp | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 11694dd1..3e10caf1 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -50,6 +50,7 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; new g_SlapDamage[MAXPLAYERS+1]; +new bool:g_cstrike = false; #include "basefuncommands/slay.sp" #include "basefuncommands/burn.sp" @@ -73,6 +74,14 @@ public OnPluginStart() { OnAdminMenuReady(topmenu); } + + decl String:folder[64]; + GetGameFolderName(folder, sizeof(folder)); + + if (strcmp(folder, "cstrike") == 0) + { + g_cstrike = true; + } } public OnMapStart() diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index fdfc4c08..3eb8c7df 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -50,7 +50,10 @@ SetupBeacon() g_BeaconRoundEndHooked = true; } - PrecacheSound("ambient/tones/elev1.wav", true); + if (g_cstrike) + { + PrecacheSound("ambient/tones/elev1.wav", true); + } g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt"); g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt"); @@ -132,7 +135,11 @@ public Action:Timer_Beacon(Handle:timer, any:client) CreateTimer(0.2, Timer_Beacon, client); GetClientEyePosition(client, vec); - EmitAmbientSound("ambient/tones/elev1.wav", vec, client, SNDLEVEL_RAIDSIREN); + + if (g_cstrike) + { + EmitAmbientSound("ambient/tones/elev1.wav", vec, client, SNDLEVEL_RAIDSIREN); + } } return Plugin_Handled; From 8ffeb9f6271b842946c5a79b36ec10c66bc60f60 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 06:19:42 +0000 Subject: [PATCH 114/263] fixed spacing and line endings --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401798 --- plugins/include/console.inc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/include/console.inc b/plugins/include/console.inc index 919ab59a..f3934ee2 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -704,16 +704,17 @@ stock bool:IsValidConVarChar(c) /** * Returns the bitstring of flags of a command. * - * @param name Name of the command. - * @return A bitstring containing the FCVAR_* flags that are enabled or INVALID_FCVAR_FLAGS if command not found. + * @param name Name of the command. + * @return A bitstring containing the FCVAR_* flags that are enabled + * or INVALID_FCVAR_FLAGS if command not found. */ native GetCommandFlags(const String:name[]); /** * Sets the bitstring of flags of a command. * - * @param name Name of the command. - * @param flags A bitstring containing the FCVAR_* flags to enable. + * @param name Name of the command. + * @param flags A bitstring containing the FCVAR_* flags to enable. * @return True on success, otherwise false. */ native bool:SetCommandFlags(const String:name[], flags); From d87e00a82dd9a0177a0058aeea675babdefe767d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 06:20:07 +0000 Subject: [PATCH 115/263] added amb1281 - added nextmap command to server console --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401799 --- plugins/nextmap.sp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index 56301872..16150086 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -75,6 +75,11 @@ public OnPluginStart() RegConsoleCmd("say", Command_Say); RegConsoleCmd("say_team", Command_Say); + + if (GetCommandFlags("nextmap") == INVALID_FCVAR_FLAGS) + { + RegServerCmd("nextmap", Command_Nextmap); + } RegAdminCmd("sm_setnextmap", Command_SetNextmap, ADMFLAG_CHANGEMAP, "sm_setnextmap <map>"); RegConsoleCmd("listmaps", Command_List); @@ -128,7 +133,7 @@ public Action:Command_Say(client, args) decl String:map[32]; GetConVarString(g_Cvar_Nextmap, map, sizeof(map)); - PrintToChatAll("%t", "Next Map", map); + PrintToChat(client, "%t", "Next Map", map); } return Plugin_Continue; @@ -217,6 +222,17 @@ public Action:UserMsg_VGUIMenu(UserMsg:msg_id, Handle:bf, const players[], playe return Plugin_Handled; } + +public Action:Command_Nextmap(args) +{ + decl String:map[64]; + + GetConVarString(g_Cvar_Nextmap, map, sizeof(map)); + + ReplyToCommand(0, "%t", "Next Map", map); + + return Plugin_Handled; +} public Action:Timer_ChangeMap(Handle:timer, Handle:dp) { From c9a9826989cf5310cd1b9bea405584609ab3b1de Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 06:42:40 +0000 Subject: [PATCH 116/263] added amb968 - setting for suppressing potential chat triggers from admins --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401800 --- configs/core.cfg | 9 +++++++++ core/ChatTriggers.cpp | 21 +++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/configs/core.cfg b/configs/core.cfg index c0d83e91..bafb12b9 100644 --- a/configs/core.cfg +++ b/configs/core.cfg @@ -47,6 +47,15 @@ */ "SilentChatTrigger" "/" + /** + * If a say command is a silent chat trigger, and is used by an admin, + * but it does not evaluate to an actual command, it will be displayed + * publicly. This setting allows you to suppress accidental typings. + * + * The default value is "no". A value of "yes" will supress. + */ + "SilentFailSuppress" "no" + /** * Password setinfo key that clients must set. You must change this in order for * passwords to work, for security reasons. diff --git a/core/ChatTriggers.cpp b/core/ChatTriggers.cpp index e3841ee1..e7526b94 100644 --- a/core/ChatTriggers.cpp +++ b/core/ChatTriggers.cpp @@ -33,7 +33,7 @@ #include "ChatTriggers.h" #include "sm_stringutil.h" #include "ConCmdManager.h" -#include <IPlayerHelpers.h> +#include "PlayerManager.h" /* :HACKHACK: We can't SH_DECL here because ConCmdManager.cpp does. * While the OB build only runs on MM:S 1.6.0+ (SH 5+), the older one @@ -54,6 +54,7 @@ extern bool __SourceHook_FHAddConCommandDispatch(void *, bool, class fastdelegat #endif //ORANGEBOX_BUILD ChatTriggers g_ChatTriggers; +bool g_bSupressSilentFails = false; ChatTriggers::ChatTriggers() : m_pSayCmd(NULL), m_bWillProcessInPost(false), m_bTriggerWasSilent(false), m_ReplyTo(SM_REPLY_CONSOLE) @@ -85,12 +86,19 @@ ConfigResult ChatTriggers::OnSourceModConfigChanged(const char *key, m_PubTrigger = sm_strdup(value); m_PubTriggerSize = strlen(m_PubTrigger); return ConfigResult_Accept; - } else if (strcmp(key, "SilentChatTrigger") == 0) { + } + else if (strcmp(key, "SilentChatTrigger") == 0) + { delete [] m_PrivTrigger; m_PrivTrigger = sm_strdup(value); m_PrivTriggerSize = strlen(m_PrivTrigger); return ConfigResult_Accept; } + else if (strcmp(key, "SilentFailSuppress") == 0) + { + g_bSupressSilentFails = strcmp(value, "yes") == 0; + return ConfigResult_Accept; + } return ConfigResult_Ignore; } @@ -205,6 +213,15 @@ void ChatTriggers::OnSayCommand_Pre() */ if (!PreProcessTrigger(engine->PEntityOfEntIndex(client), args, is_quoted)) { + CPlayer *pPlayer; + if (is_silent + && g_bSupressSilentFails + && client != 0 + && (pPlayer = g_Players.GetPlayerByIndex(client)) != NULL + && pPlayer->GetAdminId() != INVALID_ADMIN_ID) + { + RETURN_META(MRES_SUPERCEDE); + } RETURN_META(MRES_IGNORED); } From cf023a0b7d68aae8d13b04e121f6cec582ce6ec7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Dec 2007 23:27:34 +0000 Subject: [PATCH 117/263] added amb1204 - concommandbase iteration --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401801 --- core/smn_console.cpp | 106 +++++++++++++++++++++++++++++++++++- plugins/include/console.inc | 36 ++++++++++++ 2 files changed, 139 insertions(+), 3 deletions(-) diff --git a/core/smn_console.cpp b/core/smn_console.cpp index 418a0915..fe4ace2b 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -53,6 +53,7 @@ enum ConVarBounds }; HandleType_t hCmdIterType = 0; +HandleType_t htConCmdIter = 0; struct GlobCmdIter { @@ -60,6 +61,11 @@ struct GlobCmdIter List<ConCmdInfo *>::iterator iter; }; +struct ConCmdIter +{ + const ConCommandBase *pLast; +}; + class ConsoleHelpers : public SMGlobalClass, public IHandleTypeDispatch @@ -68,15 +74,41 @@ public: virtual void OnSourceModAllInitialized() { HandleAccess access; + g_HandleSys.InitAccessDefaults(NULL, &access); + + htConCmdIter = g_HandleSys.CreateType("ConCmdIter", this, 0, NULL, &access, g_pCoreIdent, NULL); + access.access[HandleAccess_Clone] = HANDLE_RESTRICT_OWNER | HANDLE_RESTRICT_IDENTITY; - hCmdIterType = g_HandleSys.CreateType(NULL, this, 0, NULL, &access, g_pCoreIdent, NULL); + hCmdIterType = g_HandleSys.CreateType("CmdIter", this, 0, NULL, &access, g_pCoreIdent, NULL); } virtual void OnHandleDestroy(HandleType_t type, void *object) { - GlobCmdIter *iter = (GlobCmdIter *)object; - delete iter; + if (type == hCmdIterType) + { + GlobCmdIter *iter = (GlobCmdIter *)object; + delete iter; + } + else if (type == htConCmdIter) + { + ConCmdIter *iter = (ConCmdIter * )object; + delete iter; + } + } + virtual bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + if (type == htConCmdIter) + { + *pSize = sizeof(ConCmdIter); + return true; + } + else if (type == hCmdIterType) + { + *pSize = sizeof(GlobCmdIter); + return true; + } + return false; } } s_ConsoleHelpers; @@ -1098,6 +1130,72 @@ static cell_t GetCommandFlags(IPluginContext *pContext, const cell_t *params) return (s_CommandFlagsHelper.GetFlags(name, &flags)) ? flags : -1; } +static cell_t FindFirstConCommand(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + ConCmdIter *pIter; + cell_t *pIsCmd, *pFlags; + const ConCommandBase *pConCmd; + + pContext->LocalToPhysAddr(params[3], &pIsCmd); + pContext->LocalToPhysAddr(params[4], &pFlags); + + pConCmd = icvar->GetCommands(); + + if (pConCmd == NULL) + { + return BAD_HANDLE; + } + + pContext->StringToLocalUTF8(params[1], params[2], pConCmd->GetName(), NULL); + *pIsCmd = pConCmd->IsCommand() ? 1 : 0; + *pFlags = pConCmd->GetFlags(); + + pIter = new ConCmdIter; + pIter->pLast = pConCmd; + + if ((hndl = g_HandleSys.CreateHandle(htConCmdIter, pIter, pContext->GetIdentity(), g_pCoreIdent, NULL)) + == BAD_HANDLE) + { + delete pIter; + return BAD_HANDLE; + } + + return hndl; +} + +static cell_t FindNextConCommand(IPluginContext *pContext, const cell_t *params) +{ + HandleError err; + ConCmdIter *pIter; + cell_t *pIsCmd, *pFlags; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + + if ((err = g_HandleSys.ReadHandle(params[1], htConCmdIter, &sec, (void **)&pIter)) != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + if (pIter->pLast == NULL) + { + return 0; + } + + if ((pIter->pLast = pIter->pLast->GetNext()) == NULL) + { + return 0; + } + + pContext->LocalToPhysAddr(params[4], &pIsCmd); + pContext->LocalToPhysAddr(params[5], &pFlags); + + pContext->StringToLocalUTF8(params[2], params[3], pIter->pLast->GetName(), NULL); + *pIsCmd = pIter->pLast->IsCommand() ? 1 : 0; + *pFlags = pIter->pLast->GetFlags(); + + return 1; +} + REGISTER_NATIVES(consoleNatives) { {"CreateConVar", sm_CreateConVar}, @@ -1142,5 +1240,7 @@ REGISTER_NATIVES(consoleNatives) {"IsChatTrigger", IsChatTrigger}, {"SetCommandFlags", SetCommandFlags}, {"GetCommandFlags", GetCommandFlags}, + {"FindFirstConCommand", FindFirstConCommand}, + {"FindNextConCommand", FindNextConCommand}, {NULL, NULL} }; diff --git a/plugins/include/console.inc b/plugins/include/console.inc index f3934ee2..6869bdbd 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -718,3 +718,39 @@ native GetCommandFlags(const String:name[]); * @return True on success, otherwise false. */ native bool:SetCommandFlags(const String:name[], flags); + +/** + * Starts a ConCommandBase search, traversing the list of ConVars and + * ConCommands. If a Handle is returned, the next entry must be read + * via FindNextConCommand(). The order of the list is undefined. + * + * @param buffer Buffer to store entry name. + * @param max_size Maximum size of the buffer. + * @param isCommand Variable to store whether the entry is a command. + * If it is not a command, it is a ConVar. + * @param flags Variable to store entry flags. + * @return On success, a ConCmdIter Handle is returned, which + * can be read via FindNextConCommand(), and must be + * closed via CloseHandle(). Additionally, the output + * parameters will be filled with information of the + * first ConCommandBase entry. + * On failure, INVALID_HANDLE is returned, and the + * contents of outputs is undefined. + */ +native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &flags=0); + +/** + * Reads the next entry in a ConCommandBase iterator. + * + * @param search ConCmdIter Handle to search. + * @param buffer Buffer to store entry name. + * @param max_size Maximum size of the buffer. + * @param isCommand Variable to store whether the entry is a command. + * If it is not a command, it is a ConVar. + * @param flags Variable to store entry flags. + * @return On success, the outputs are filled, the iterator is + * advanced to the next entry, and true is returned. + * If no more entries exist, false is returned, and the + * contents of outputs is undefined. + */ +native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0); From abb763d1e1049de0ae16d1848c0cf0619b747b88 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Dec 2007 23:11:00 +0000 Subject: [PATCH 118/263] added amb618 - binary file i/o --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401802 --- core/smn_filesystem.cpp | 195 ++++++++++++++++++++++++++++++++++++++ plugins/include/files.inc | 121 ++++++++++++++++++++--- 2 files changed, 303 insertions(+), 13 deletions(-) diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index b209bfd3..d54bc9f0 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -640,6 +640,197 @@ static cell_t sm_LogToOpenFileEx(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t sm_ReadFile(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + FILE *pFile; + size_t read = 0; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr); + } + + if (params[4] != 1 && params[4] != 2 && params[4] != 4) + { + return pContext->ThrowNativeError("Invalid size specifier (%d is not 1, 2, or 4)", params[4]); + } + + cell_t *data; + pContext->LocalToPhysAddr(params[2], &data); + + if (params[4] == 4) + { + read = fread(data, sizeof(cell_t), params[3], pFile); + } + else if (params[4] == 2) + { + int16_t val; + for (cell_t i = 0; i < params[3]; i++) + { + if (fread(&val, sizeof(int16_t), 1, pFile) != 1) + { + break; + } + data[read++] = val; + } + } + else if (params[4] == 1) + { + int8_t val; + for (cell_t i = 0; i < params[3]; i++) + { + if (fread(&val, sizeof(int8_t), 1, pFile) != 1) + { + break; + } + data[read++] = val; + } + } + + if (read != (size_t)params[3] && ferror(pFile) != 0) + { + return -1; + } + + return read; +} + +static cell_t sm_ReadFileString(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + FILE *pFile; + cell_t num_read = 0; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr); + } + + char *buffer; + pContext->LocalToString(params[2], &buffer); + + char val; + while (1) + { + /* If we're in stop mode, break as soon as the buffer is full. */ + if (params[4] && (params[3] == 0 || num_read >= params[3] - 1)) + { + break; + } + if (fread(&val, sizeof(val), 1, pFile) != 1) + { + if (ferror(pFile)) + { + return -1; + } + break; + } + if (val == '\0') + { + break; + } + if (params[3] > 0 && num_read < params[3] - 1) + { + buffer[num_read++] = val; + } + } + + if (params[3] > 0) + { + buffer[num_read] = '\0'; + } + + return num_read; +} + +static cell_t sm_WriteFile(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + FILE *pFile; + size_t read = 0; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr); + } + + cell_t *data; + pContext->LocalToPhysAddr(params[2], &data); + + if (params[4] != 1 && params[4] != 2 && params[4] != 4) + { + return pContext->ThrowNativeError("Invalid size specifier (%d is not 1, 2, or 4)", params[4]); + } + + /* :NOTE: This really isn't compatible with big endian but we will never have to worry about that. */ + + if (params[4] == 4) + { + if (fwrite(data, sizeof(cell_t), params[3], pFile) != (size_t)params[3]) + { + return 0; + } + } + else if (params[4] == 2) + { + for (cell_t i = 0; i < params[3]; i++) + { + if (fwrite(&data[i], sizeof(int16_t), 1, pFile) != 1) + { + return 0; + } + } + } + else if (params[4] == 1) + { + for (cell_t i = 0; i < params[3]; i++) + { + if (fwrite(&data[i], sizeof(int8_t), 1, pFile) != 1) + { + return 0; + } + } + } + + return 1; +} + +static cell_t sm_WriteFileString(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); + FILE *pFile; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr); + } + + char *buffer; + pContext->LocalToString(params[2], &buffer); + + size_t len = strlen(buffer); + + if (params[3]) + { + len++; + } + + return (fwrite(buffer, sizeof(char), len, pFile) == len) ? 1 : 0; +} + REGISTER_NATIVES(filesystem) { {"OpenDirectory", sm_OpenDirectory}, @@ -664,5 +855,9 @@ REGISTER_NATIVES(filesystem) {"GetFileTime", sm_GetFileTime}, {"LogToOpenFile", sm_LogToOpenFile}, {"LogToOpenFileEx", sm_LogToOpenFileEx}, + {"ReadFile", sm_ReadFile}, + {"ReadFileString", sm_ReadFileString}, + {"WriteFile", sm_WriteFile}, + {"WriteFileString", sm_WriteFileString}, {NULL, NULL}, }; diff --git a/plugins/include/files.inc b/plugins/include/files.inc index 41aa979a..54445510 100644 --- a/plugins/include/files.inc +++ b/plugins/include/files.inc @@ -158,6 +158,112 @@ native bool:DeleteFile(const String:path[]); */ native bool:ReadFileLine(Handle:hndl, String:buffer[], maxlength); +/** + * Reads binary data from a file. + * + * @param hndl Handle to the file. + * @param items Array to store each item read. + * @param num_items Number of items to read into the array. + * @param size Size of each element, in bytes, to be read. + * Valid sizes are 1, 2, or 4. + * @return Number of elements read, or -1 on error. + */ +native ReadFile(Handle:hndl, items[], num_items, size); + +/** + * Reads a UTF8 or ANSI string from a file. + * + * @param hndl Handle to the file. + * @param buffer Buffer to store the string. + * @param max_size Maximum size of the string buffer. + * @param stop If true, reading will stop once max_size-1 bytes have + * been read. If false, reading will stop once a NUL + * terminator is reached. The buffer will simply be + * terminated in either case, the difference is in how + * the far the file position is changed. + * @return Number of characters written to the buffer, or -1 + * if an error was encountered. + * @error Invalid Handle, or read_count > max_size. + */ +native ReadFileString(Handle:hndl, String:buffer[], max_size, read_count=-1); + +/** + * Writes binary data to a file. + * + * @param hndl Handle to the file. + * @param items Array of items to write. The data is read directly. + * That is, in 1 or 2-byte mode, the lower byte(s) in + * each cell are used directly, rather than performing + * any casts from a 4-byte number to a smaller number. + * @param num_items Number of items in the array. + * @param size Size of each item in the array in bytes. + * Valid sizes are 1, 2, or 4. + * @return True on success, false on error. + */ +native bool:WriteFile(Handle:hndl, const items[], num_items, size); + +/** + * Writes a binary string to a file. + * + * @param hndl Handle to th efile. + * @param buffer String to write. + * @param term True to append NUL terminator, false otherwise. + * @return True on success, false on error. + */ +native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term); + +/** + * Writes a line of text to a text file. A newline is automatically appended. + * + * @param hndl Handle to the file. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @return True on success, false otherwise. + */ +native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); + +/** + * Reads a single binary cell from a file. + * + * @param hndl Handle to the file. + * @param data Variable to store the data read. + * @param size Size of the data to read in bytes. Valid + * sizes are 1, 2, or 4 bytes. + * @return Number of elements read (max 1), or -1 on error. + */ +stock ReadFileCell(Handle:hndl, &data, size) +{ + new array[1], ret; + + if ((ret = ReadFile(hndl, array, 1, size)) == 1) + { + data = array[0]; + } + + return ret; +} + +/** + * Writes a single binary cell to a file. + * + * @param hndl Handle to the file. + * @param data Cell to write to the file. + * @param size Size of the data to read in bytes. Valid + * sizes are 1, 2, or 4 bytes. If the size + * is less than 4 bytes, the data is truncated + * rather than casted. That is, only the lower + * bits will be read. + * @return True on success, false on error. + */ +stock bool:WriteFileCell(Handle:hndl, data, size) +{ + new array[1]; + + array[0] = data; + + return WriteFile(hndl, array, 1, size); +} + /** * Tests if the end of file has been reached. * @@ -171,10 +277,10 @@ native bool:IsEndOfFile(Handle:file); * * @param file Handle to the file. * @param position Position relative to what is specified in whence. - * @param whence Look at the SEEK_* definitions. + * @param where SEEK_ constant value of where to see from. * @return True on success, false otherwise. */ -native bool:FileSeek(Handle:file, position, whence); +native bool:FileSeek(Handle:file, position, where); /** * Get current position in the file. @@ -235,17 +341,6 @@ native FlushFile(Handle:file); */ native bool:RemoveDir(const String:path[]); -/** - * Writes a line of text in a file. - * @note This native will append the newline character. - * - * @param hndl Handle to the file. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @return True on success, false otherwise. - */ -native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); - /** * Returns a file timestamp as a unix timestamp. * From 63d301c4c79d397783dc58837368cba4dfe99dc1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Dec 2007 23:45:03 +0000 Subject: [PATCH 119/263] added @error lines to a bunch of native docs --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401803 --- plugins/include/files.inc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/include/files.inc b/plugins/include/files.inc index 54445510..e8767e66 100644 --- a/plugins/include/files.inc +++ b/plugins/include/files.inc @@ -199,6 +199,7 @@ native ReadFileString(Handle:hndl, String:buffer[], max_size, read_count=-1); * @param size Size of each item in the array in bytes. * Valid sizes are 1, 2, or 4. * @return True on success, false on error. + * @error Invalid Handle. */ native bool:WriteFile(Handle:hndl, const items[], num_items, size); @@ -209,6 +210,7 @@ native bool:WriteFile(Handle:hndl, const items[], num_items, size); * @param buffer String to write. * @param term True to append NUL terminator, false otherwise. * @return True on success, false on error. + * @error Invalid Handle. */ native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term); @@ -219,6 +221,7 @@ native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term); * @param format Formatting rules. * @param ... Variable number of format parameters. * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); @@ -230,6 +233,7 @@ native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); * @param size Size of the data to read in bytes. Valid * sizes are 1, 2, or 4 bytes. * @return Number of elements read (max 1), or -1 on error. + * @error Invalid Handle. */ stock ReadFileCell(Handle:hndl, &data, size) { @@ -254,6 +258,7 @@ stock ReadFileCell(Handle:hndl, &data, size) * rather than casted. That is, only the lower * bits will be read. * @return True on success, false on error. + * @error Invalid Handle. */ stock bool:WriteFileCell(Handle:hndl, data, size) { @@ -269,6 +274,7 @@ stock bool:WriteFileCell(Handle:hndl, data, size) * * @param file Handle to the file. * @return True if end of file has been reached, false otherwise. + * @error Invalid Handle. */ native bool:IsEndOfFile(Handle:file); @@ -279,6 +285,7 @@ native bool:IsEndOfFile(Handle:file); * @param position Position relative to what is specified in whence. * @param where SEEK_ constant value of where to see from. * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool:FileSeek(Handle:file, position, where); @@ -287,6 +294,7 @@ native bool:FileSeek(Handle:file, position, where); * * @param file Handle to the file. * @return Value for the file position indicator. + * @error Invalid Handle. */ native FilePosition(Handle:file); From 6ba2593738f582a8c2f7edf1352652106dbdf79c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Dec 2007 23:45:41 +0000 Subject: [PATCH 120/263] added amb1289 - FindPluginByNumber --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401804 --- core/smn_core.cpp | 13 +++++++++++++ plugins/include/sourcemod.inc | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/core/smn_core.cpp b/core/smn_core.cpp index b55042ed..cd8de231 100644 --- a/core/smn_core.cpp +++ b/core/smn_core.cpp @@ -585,6 +585,18 @@ static cell_t GetExtensionFileStatus(IPluginContext *pContext, const cell_t *par return 1; } +static cell_t FindPluginByNumber(IPluginContext *pContext, const cell_t *params) +{ + CPlugin *pPlugin = g_PluginSys.GetPluginByOrder(params[1]); + + if (pPlugin == NULL) + { + return BAD_HANDLE; + } + + return pPlugin->GetMyHandle(); +} + REGISTER_NATIVES(coreNatives) { {"AutoExecConfig", AutoExecConfig}, @@ -607,6 +619,7 @@ REGISTER_NATIVES(coreNatives) {"LogToFile", LogToFile}, {"LogToFileEx", LogToFileEx}, {"GetExtensionFileStatus", GetExtensionFileStatus}, + {"FindPluginByNumber", FindPluginByNumber}, {NULL, NULL}, }; diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index 842c5740..aab0d7ab 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -266,6 +266,18 @@ native bool:IsPluginDebugging(Handle:hndl); */ native bool:GetPluginInfo(Handle:plugin, PluginInfo:info, String:buffer[], maxlength); +/** + * Finds a plugin by its order in the list from the "plugins list" server + * "sm" command. You should not use this function to loop through all plugins, + * use the iterator instead. Looping through all plugins using this native + * is O(n^2), whereas using the iterator is O(n). + * + * @param order_num Number of the plugin as it appears in "sm plugins list". + * @return Plugin Handle on success, INVALID_HANDLE if no plugin + * matches the given number. + */ +native Handle:FindPluginByNumber(order_num); + /** * Causes the plugin to enter a failed state. An error will be thrown and * the plugin will be paused until it is unloaded or reloaded. From b1451f692c2b89460c01bfccde9c9328e8583162 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 17 Dec 2007 00:54:10 +0000 Subject: [PATCH 121/263] fixed linuxbuild --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401805 --- core/smn_filesystem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index d54bc9f0..eeec4886 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -756,7 +756,6 @@ static cell_t sm_WriteFile(IPluginContext *pContext, const cell_t *params) HandleError herr; HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); FILE *pFile; - size_t read = 0; if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile)) != HandleError_None) From 570dc75512e1f3ac46c33e891ddd9698564c53aa Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Tue, 18 Dec 2007 21:03:34 +0000 Subject: [PATCH 122/263] Added new stocks for entity props. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401806 --- plugins/include/entity_prop_stocks.inc | 84 ++++++++++++++++++++++++++ plugins/include/sourcemod.inc | 1 + 2 files changed, 85 insertions(+) create mode 100644 plugins/include/entity_prop_stocks.inc diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc new file mode 100644 index 00000000..28514566 --- /dev/null +++ b/plugins/include/entity_prop_stocks.inc @@ -0,0 +1,84 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _entity_prop_stocks_included + #endinput +#endif +#define _entity_prop_stocks_included + +enum +{ + MOVETYPE_NONE = 0, /** never moves */ + MOVETYPE_ISOMETRIC, /** For players */ + MOVETYPE_WALK, /** Player only - moving on the ground */ + MOVETYPE_STEP, /** gravity, special edge handling -- monsters use this */ + MOVETYPE_FLY, /** No gravity, but still collides with stuff */ + MOVETYPE_FLYGRAVITY, /** flies through the air + is affected by gravity */ + MOVETYPE_VPHYSICS, /** uses VPHYSICS for simulation */ + MOVETYPE_PUSH, /** no clip to world, push and crush */ + MOVETYPE_NOCLIP, /** No gravity, no collisions, still do velocity/avelocity */ + MOVETYPE_LADDER, /** Used by players only when going onto a ladder */ + MOVETYPE_OBSERVER, /** Observer movement, depends on player's observer mode */ + MOVETYPE_CUSTOM, /** Allows the entity to describe its own physics */ +}; + +/** + * Sets an entity's color. + * + * @param index Entity index + * @param mt Movetype, see enum above + * @noreturn + */ +stock SetEntityMovetype(index, mt) +{ + new offset = GetEntSendPropOffs(index, "movetype"); + SetEntData(index, offset, mt, 1, true); +} + +/** + * Sets an entity's color. + * + * @param index Entity index + * @param r Amount of red (0-255) + * @param g Amount of green (0-255) + * @param b Amount of blue (0-255) + * @param a Amount of alpha (0-255) + * @noreturn + */ +stock SetEntityRenderColor(index, r=255, g=255, b=255, a=255) +{ + new offset = GetEntSendPropOffs(index, "m_clrRender"); + SetEntData(index, offset, r, 1, true); + SetEntData(index, offset + 1, g, 1, true); + SetEntData(index, offset + 2, b, 1, true); + SetEntData(index, offset + 3, a, 1, true); +} \ No newline at end of file diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index aab0d7ab..a353b425 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -572,4 +572,5 @@ native SetMapListCompatBind(const String:name[], const String:file[]); #include <helpers> #include <entity> +#include <entity_prop_stocks> From 5175e5fe92a9182c3cc7682db5673c66dac75493 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 19 Dec 2007 01:16:15 +0000 Subject: [PATCH 123/263] Large additions to basefuncommands. Moved slay and slap to a new plugin. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401807 --- plugins/basefuncommands.sp | 125 +++- plugins/basefuncommands/beacon.sp | 157 ++--- plugins/basefuncommands/burn.sp | 172 ------ plugins/basefuncommands/fire.sp | 503 ++++++++++++++++ plugins/basefuncommands/ice.sp | 554 ++++++++++++++++++ plugins/basefuncommands/timebomb.sp | 364 ++++++++++++ plugins/slapslay.sp | 103 ++++ plugins/{basefuncommands => slapslay}/slap.sp | 4 +- plugins/{basefuncommands => slapslay}/slay.sp | 2 +- translations/basefuncommands.phrases.txt | 77 ++- translations/slapslay.phrases.txt | 29 + 11 files changed, 1783 insertions(+), 307 deletions(-) delete mode 100644 plugins/basefuncommands/burn.sp create mode 100644 plugins/basefuncommands/fire.sp create mode 100644 plugins/basefuncommands/ice.sp create mode 100644 plugins/basefuncommands/timebomb.sp create mode 100644 plugins/slapslay.sp rename plugins/{basefuncommands => slapslay}/slap.sp (95%) rename plugins/{basefuncommands => slapslay}/slay.sp (94%) create mode 100644 translations/slapslay.phrases.txt diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 3e10caf1..f15006bb 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -49,24 +49,58 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; -new g_SlapDamage[MAXPLAYERS+1]; -new bool:g_cstrike = false; +// Sounds +#define SOUND_BLIP "buttons/blip1.wav" +#define SOUND_BEEP "buttons/button17.wav" +#define SOUND_FINAL "weapons/cguard/charging.wav" +#define SOUND_BOOM "weapons/explode3.wav" +#define SOUND_FREEZE "physics/glass/glass_impact_bullet4.wav" -#include "basefuncommands/slay.sp" -#include "basefuncommands/burn.sp" -#include "basefuncommands/slap.sp" +// Following are model indexes for temp entities +new g_BeamSprite; +new g_BeamSprite2; +new g_HaloSprite; +new g_GlowSprite; +new g_ExplosionSprite; + +// Basic color arrays for temp entities +new redColor[4] = {255, 75, 75, 255}; +new orangeColor[4] = {255, 128, 0, 255}; +new greenColor[4] = {75, 255, 75, 255}; +new blueColor[4] = {75, 75, 255, 255}; +new whiteColor[4] = {255, 255, 255, 255}; +new greyColor[4] = {128, 128, 128, 255}; + +// Used for some trace rays. +/* +new g_FilteredEntity = -1; +public bool:TR_Filter_Client(ent, contentMask) +{ + return (ent == g_FilteredEntity) ? false : true; +} +*/ + +// Include various commands and supporting functions #include "basefuncommands/beacon.sp" +#include "basefuncommands/timebomb.sp" +#include "basefuncommands/fire.sp" +#include "basefuncommands/ice.sp" public OnPluginStart() { LoadTranslations("common.phrases"); LoadTranslations("basefuncommands.phrases"); - RegAdminCmd("sm_burn", Command_Burn, ADMFLAG_SLAY, "sm_burn <#userid|name> [time]"); - RegAdminCmd("sm_slap", Command_Slap, ADMFLAG_SLAY, "sm_slap <#userid|name> [damage]"); - RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); - RegAdminCmd("sm_beacon", Command_Beacon, ADMFLAG_SLAY, "sm_beacon <#userid|name>"); RegAdminCmd("sm_play", Command_Play, ADMFLAG_GENERIC, "sm_play <#userid|name> <filename>"); + + HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); + + SetupBeacon(); // sm_beacon + SetupTimeBomb(); // sm_timebomb + SetupFire(); // sm_burn and sm_firebomb + SetupIce(); // sm_freeze and sm_freezebomb + + AutoExecConfig(true, "funcommands"); /* Account for late loading */ new Handle:topmenu; @@ -74,24 +108,39 @@ public OnPluginStart() { OnAdminMenuReady(topmenu); } - - decl String:folder[64]; - GetGameFolderName(folder, sizeof(folder)); - - if (strcmp(folder, "cstrike") == 0) - { - g_cstrike = true; - } } public OnMapStart() { - SetupBeacon(); + PrecacheSound(SOUND_BLIP, true); + PrecacheSound(SOUND_BEEP, true); + PrecacheSound(SOUND_FINAL, true); + PrecacheSound(SOUND_BOOM, true); + PrecacheSound(SOUND_FREEZE, true); + + g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt"); + g_BeamSprite2 = PrecacheModel("sprites/bluelight1.vmt"); + g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt"); + g_GlowSprite = PrecacheModel("sprites/blueglow2.vmt"); + g_ExplosionSprite = PrecacheModel("sprites/sprite_fire01.vmt"); } public OnMapEnd() { KillAllBeacons(); + KillAllTimeBombs(); + KillAllFireBombs(); + KillAllFreezes(); +} + +public Action:Event_RoundEnd(Handle:event,const String:name[],bool:dontBroadcast) +{ + KillAllBeacons(); + KillAllTimeBombs(); + KillAllFireBombs(); + KillAllFreezes(); + + return Plugin_Handled; } public OnAdminMenuReady(Handle:topmenu) @@ -111,13 +160,13 @@ public OnAdminMenuReady(Handle:topmenu) if (player_commands != INVALID_TOPMENUOBJECT) { AddToTopMenu(hTopMenu, - "sm_slay", + "sm_beacon", TopMenuObject_Item, - AdminMenu_Slay, + AdminMenu_Beacon, player_commands, - "sm_slay", + "sm_beacon", ADMFLAG_SLAY); - + AddToTopMenu(hTopMenu, "sm_burn", TopMenuObject_Item, @@ -127,20 +176,36 @@ public OnAdminMenuReady(Handle:topmenu) ADMFLAG_SLAY); AddToTopMenu(hTopMenu, - "sm_slap", + "sm_freeze", TopMenuObject_Item, - AdminMenu_Slap, + AdminMenu_Freeze, player_commands, - "sm_slap", + "sm_freeze", + ADMFLAG_SLAY); + + AddToTopMenu(hTopMenu, + "sm_timebomb", + TopMenuObject_Item, + AdminMenu_TimeBomb, + player_commands, + "sm_timebomb", ADMFLAG_SLAY); AddToTopMenu(hTopMenu, - "sm_beacon", + "sm_firebomb", TopMenuObject_Item, - AdminMenu_Beacon, + AdminMenu_FireBomb, player_commands, - "sm_beacon", - ADMFLAG_SLAY); + "sm_firebomb", + ADMFLAG_SLAY); + + AddToTopMenu(hTopMenu, + "sm_freezebomb", + TopMenuObject_Item, + AdminMenu_FreezeBomb, + player_commands, + "sm_freezebomb", + ADMFLAG_SLAY); } } @@ -196,7 +261,7 @@ public Action:Command_Play(client, args) for (new i = 0; i < target_count; i++) { ClientCommand(target_list[i], "playgamesound \"%s\"", Arguments[len]); - LogAction(client, target_list[i], "\"%L\" played sound on \"%L\" (file \"%s\")", client, target_list[i], Arguments[len]); + LogAction(client, target_list[i], "\"%L\" played sound on \"%L\" (file \"%s\")", client, target_list[i], Arguments[len]); } if (tn_is_ml) diff --git a/plugins/basefuncommands/beacon.sp b/plugins/basefuncommands/beacon.sp index 3eb8c7df..b178a032 100644 --- a/plugins/basefuncommands/beacon.sp +++ b/plugins/basefuncommands/beacon.sp @@ -31,32 +31,15 @@ * Version: $Id$ */ -new Handle:g_BeaconTimers[MAXPLAYERS+1] = {INVALID_HANDLE, ...}; +new Handle:g_BeaconTimers[MAXPLAYERS+1]; -new g_BeaconRoundEndHooked = false; - -new g_BeamSprite; -new g_HaloSprite; - -new redColor[4] = {255, 75, 75, 255}; -new greenColor[4] = {75, 255, 75, 255}; -new blueColor[4] = {75, 75, 255, 255}; +new Handle:g_BeaconRadius = INVALID_HANDLE; SetupBeacon() { - if (!g_BeaconRoundEndHooked) - { - HookEvent("round_end", Event_BeaconRoundEnd, EventHookMode_PostNoCopy); - g_BeaconRoundEndHooked = true; - } - - if (g_cstrike) - { - PrecacheSound("ambient/tones/elev1.wav", true); - } - - g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt"); - g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt"); + RegAdminCmd("sm_beacon", Command_Beacon, ADMFLAG_SLAY, "sm_beacon <#userid|name> [0/1]"); + + g_BeaconRadius = CreateConVar("sm_beacon_radius", "375", "Sets the radius for beacon's light rings.", 0, true, 50.0, true, 1500.0); } CreateBeacon(client) @@ -82,17 +65,41 @@ KillAllBeacons() } } -PerformBeacon(client, target) +PerformBeacon(client, target, toggle) { - if (g_BeaconTimers[target] == INVALID_HANDLE) + switch (toggle) { - CreateBeacon(target); - LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); - } - else - { - KillBeacon(target); - LogAction(client, target, "\"%L\" removed a beacon on \"%L\"", client, target); + case (2): + { + if (g_BeaconTimers[target] == INVALID_HANDLE) + { + CreateBeacon(target); + LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); + } + else + { + KillBeacon(target); + LogAction(client, target, "\"%L\" removed a beacon on \"%L\"", client, target); + } + } + + case (1): + { + if (g_BeaconTimers[target] == INVALID_HANDLE) + { + CreateBeacon(target); + LogAction(client, target, "\"%L\" set a beacon on \"%L\"", client, target); + } + } + + case (0): + { + if (g_BeaconTimers[target] != INVALID_HANDLE) + { + KillBeacon(target); + LogAction(client, target, "\"%L\" removed a beacon on \"%L\"", client, target); + } + } } } @@ -100,11 +107,8 @@ public Action:Timer_Beacon(Handle:timer, any:client) { if (!IsClientInGame(client) || !IsPlayerAlive(client)) { - if (g_BeaconTimers[client] == timer) - { - KillBeacon(client); - } - + KillBeacon(client); + return Plugin_Handled; } @@ -112,60 +116,32 @@ public Action:Timer_Beacon(Handle:timer, any:client) new Float:vec[3]; GetClientAbsOrigin(client, vec); - vec[2] += 5; + vec[2] += 10; + + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SendToAll(); if (team == 2) { - TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, redColor, 50, 0); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, redColor, 10, 0); } else if (team == 3) { - TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, blueColor, 50, 0); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, blueColor, 10, 0); } else { - TE_SetupBeamRingPoint(vec, 20.0, 400.0, g_BeamSprite, g_HaloSprite, 0, 0, 1.0, 3.0, 0.0, greenColor, 50, 0); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_BeaconRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, greenColor, 10, 0); } TE_SendToAll(); - - // Create a double ring, if we are the repeating timer. - if (g_BeaconTimers[client] == timer) - { - CreateTimer(0.2, Timer_Beacon, client); - - GetClientEyePosition(client, vec); - if (g_cstrike) - { - EmitAmbientSound("ambient/tones/elev1.wav", vec, client, SNDLEVEL_RAIDSIREN); - } - } + GetClientEyePosition(client, vec); + EmitAmbientSound(SOUND_BLIP, vec, client, SNDLEVEL_RAIDSIREN); return Plugin_Handled; } -public Action:Event_BeaconRoundEnd(Handle:event,const String:name[],bool:dontBroadcast) -{ - KillAllBeacons(); - - return Plugin_Handled; -} - -DisplayBeaconMenu(client) -{ - new Handle:menu = CreateMenu(MenuHandler_Beacon); - - decl String:title[100]; - Format(title, sizeof(title), "%T:", "Beacon player", client); - SetMenuTitle(menu, title); - SetMenuExitBackButton(menu, true); - - AddTargetsToMenu(menu, client, true, true); - - DisplayMenu(menu, client, MENU_TIME_FOREVER); -} - public AdminMenu_Beacon(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, @@ -183,6 +159,20 @@ public AdminMenu_Beacon(Handle:topmenu, } } +DisplayBeaconMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Beacon); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Beacon player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + public MenuHandler_Beacon(Handle:menu, MenuAction:action, param1, param2) { if (action == MenuAction_End) @@ -217,7 +207,7 @@ public MenuHandler_Beacon(Handle:menu, MenuAction:action, param1, param2) new String:name[32]; GetClientName(target, name, sizeof(name)); - PerformBeacon(param1, target); + PerformBeacon(param1, target, 2); ShowActivity2(param1, "[SM] ", "%t", "Toggled beacon on target", "_s", name); } @@ -233,12 +223,27 @@ public Action:Command_Beacon(client, args) { if (args < 1) { - ReplyToCommand(client, "[SM] Usage: sm_beacon <#userid|name>"); + ReplyToCommand(client, "[SM] Usage: sm_beacon <#userid|name> [0/1]"); return Plugin_Handled; } decl String:arg[65]; GetCmdArg(1, arg, sizeof(arg)); + + new toggle = 2; + if (args > 1) + { + decl String:arg2[2]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (arg2[0]) + { + toggle = 1; + } + else + { + toggle = 0; + } + } decl String:target_name[MAX_TARGET_LENGTH]; decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; @@ -259,7 +264,7 @@ public Action:Command_Beacon(client, args) for (new i = 0; i < target_count; i++) { - PerformBeacon(client, target_list[i]); + PerformBeacon(client, target_list[i], toggle); } if (tn_is_ml) diff --git a/plugins/basefuncommands/burn.sp b/plugins/basefuncommands/burn.sp deleted file mode 100644 index 86ec5abf..00000000 --- a/plugins/basefuncommands/burn.sp +++ /dev/null @@ -1,172 +0,0 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod Basefuncommands Plugin - * Provides burn functionality - * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ - */ - -PerformBurn(client, target, Float:seconds) -{ - LogAction(client, target, "\"%L\" ignited \"%L\" (seconds \"%f\")", client, target, seconds); - IgniteEntity(target, seconds); -} - -DisplayBurnMenu(client) -{ - new Handle:menu = CreateMenu(MenuHandler_Burn); - - decl String:title[100]; - Format(title, sizeof(title), "%T:", "Burn player", client); - SetMenuTitle(menu, title); - SetMenuExitBackButton(menu, true); - - AddTargetsToMenu(menu, client, true, true); - - DisplayMenu(menu, client, MENU_TIME_FOREVER); -} - -public AdminMenu_Burn(Handle:topmenu, - TopMenuAction:action, - TopMenuObject:object_id, - param, - String:buffer[], - maxlength) -{ - if (action == TopMenuAction_DisplayOption) - { - Format(buffer, maxlength, "%T", "Burn player", param); - } - else if (action == TopMenuAction_SelectOption) - { - DisplayBurnMenu(param); - } -} - -public MenuHandler_Burn(Handle:menu, MenuAction:action, param1, param2) -{ - if (action == MenuAction_End) - { - CloseHandle(menu); - } - else if (action == MenuAction_Cancel) - { - if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) - { - DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); - } - } - else if (action == MenuAction_Select) - { - decl String:info[32]; - new userid, target; - - GetMenuItem(menu, param2, info, sizeof(info)); - userid = StringToInt(info); - - if ((target = GetClientOfUserId(userid)) == 0) - { - PrintToChat(param1, "[SM] %t", "Player no longer available"); - } - else if (!CanUserTarget(param1, target)) - { - PrintToChat(param1, "[SM] %t", "Unable to target"); - } - else - { - new String:name[32]; - GetClientName(target, name, sizeof(name)); - PerformBurn(param1, target, 20.0); - ShowActivity2(param1, "[SM] ", "%t", "Set target on fire", "_s", name); - } - - /* Re-draw the menu if they're still valid */ - if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) - { - DisplayBurnMenu(param1); - } - } -} - -public Action:Command_Burn(client, args) -{ - if (args < 1) - { - ReplyToCommand(client, "[SM] Usage: sm_burn <#userid|name> [time]"); - return Plugin_Handled; - } - - decl String:arg[65]; - GetCmdArg(1, arg, sizeof(arg)); - - new Float:seconds = 20.0; - - if (args > 1) - { - decl String:time[20]; - GetCmdArg(2, time, sizeof(time)); - if (StringToFloatEx(time, seconds) == 0) - { - ReplyToCommand(client, "[SM] %t", "Invalid Amount"); - return Plugin_Handled; - } - } - - decl String:target_name[MAX_TARGET_LENGTH]; - decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; - - if ((target_count = ProcessTargetString( - arg, - client, - target_list, - MAXPLAYERS, - COMMAND_FILTER_ALIVE, - target_name, - sizeof(target_name), - tn_is_ml)) <= 0) - { - ReplyToTargetError(client, target_count); - return Plugin_Handled; - } - - for (new i = 0; i < target_count; i++) - { - PerformBurn(client, target_list[i], seconds); - } - - if (tn_is_ml) - { - ShowActivity2(client, "[SM] ", "%t", "Set target on fire", target_name); - } - else - { - ShowActivity2(client, "[SM] ", "%t", "Set target on fire", "_s", target_name); - } - - return Plugin_Handled; -} diff --git a/plugins/basefuncommands/fire.sp b/plugins/basefuncommands/fire.sp new file mode 100644 index 00000000..d6222d22 --- /dev/null +++ b/plugins/basefuncommands/fire.sp @@ -0,0 +1,503 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides FireBomb functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new Handle:g_FireBombTimers[MAXPLAYERS+1]; +new g_FireBombTracker[MAXPLAYERS+1]; + +new Handle:g_BurnDuration = INVALID_HANDLE; +new Handle:g_FireBombTicks = INVALID_HANDLE; +new Handle:g_FireBombRadius = INVALID_HANDLE; +new Handle:g_FireBombMode = INVALID_HANDLE; + +SetupFire() +{ + RegAdminCmd("sm_burn", Command_Burn, ADMFLAG_SLAY, "sm_burn <#userid|name> [time]"); + RegAdminCmd("sm_firebomb", Command_FireBomb, ADMFLAG_SLAY, "sm_firebomb <#userid|name> [0/1]"); + + g_BurnDuration = CreateConVar("sm_burn_duration", "20", "Sets the default duration of sm_burn and firebomb victims.", 0, true, 0.5, true, 20.0); + g_FireBombTicks = CreateConVar("sm_firebomb_ticks", "10", "Sets how long the FireBomb fuse is.", 0, true, 5.0, true, 120.0); + g_FireBombRadius = CreateConVar("sm_firebomb_radius", "1000", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); + g_FireBombMode = CreateConVar("sm_firebomb_mode", "0", "Who is targetted by the FireBomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); +} + +CreateFireBomb(client) +{ + g_FireBombTimers[client] = CreateTimer(1.0, Timer_FireBomb, client, TIMER_REPEAT); + g_FireBombTracker[client] = GetConVarInt(g_FireBombTicks); +} + +KillFireBomb(client) +{ + KillTimer(g_FireBombTimers[client]); + g_FireBombTimers[client] = INVALID_HANDLE; + + SetEntityRenderColor(client, 255, 255, 255, 255); +} + +KillAllFireBombs() +{ + new maxclients = GetMaxClients(); + for (new i = 1; i <= maxclients; i++) + { + if (g_FireBombTimers[i] != INVALID_HANDLE) + { + KillFireBomb(i); + } + } +} + +PerformBurn(client, target, Float:seconds) +{ + LogAction(client, target, "\"%L\" ignited \"%L\" (seconds \"%f\")", client, target, seconds); + IgniteEntity(target, seconds); +} + +PerformFireBomb(client, target, toggle) +{ + switch (toggle) + { + case (2): + { + if (g_FireBombTimers[target] == INVALID_HANDLE) + { + CreateFireBomb(target); + LogAction(client, target, "\"%L\" set a FireBomb on \"%L\"", client, target); + } + else + { + KillFireBomb(target); + LogAction(client, target, "\"%L\" removed a FireBomb on \"%L\"", client, target); + } + } + + case (1): + { + if (g_FireBombTimers[target] == INVALID_HANDLE) + { + CreateFireBomb(target); + LogAction(client, target, "\"%L\" set a FireBomb on \"%L\"", client, target); + } + } + + case (0): + { + if (g_FireBombTimers[target] != INVALID_HANDLE) + { + KillFireBomb(target); + LogAction(client, target, "\"%L\" removed a FireBomb on \"%L\"", client, target); + } + } + } +} + +public Action:Timer_FireBomb(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillFireBomb(client); + + return Plugin_Handled; + } + + g_FireBombTracker[client]--; + + new Float:vec[3]; + GetClientEyePosition(client, vec); + + if (g_FireBombTracker[client] > 1) + { + new color; + + if (g_FireBombTracker[client] > 1) + { + color = RoundToFloor(g_FireBombTracker[client] * (255.0 / GetConVarFloat(g_FireBombTicks))); + EmitAmbientSound(SOUND_BEEP, vec, client, SNDLEVEL_RAIDSIREN); + } + else + { + color = 0; + EmitAmbientSound(SOUND_FINAL, vec, client, SNDLEVEL_RAIDSIREN); + } + + SetEntityRenderColor(client, 255, color, color, 255); + + decl String:name[64]; + GetClientName(client, name, sizeof(name)); + PrintCenterTextAll("%t", "Till Explodes", name, g_FireBombTracker[client]); + + GetClientAbsOrigin(client, vec); + vec[2] += 10; + + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_FireBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SendToAll(); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_FireBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SendToAll(); + } + else + { + TE_SetupExplosion(vec, g_ExplosionSprite, 0.1, 1, 0, GetConVarInt(g_FireBombRadius), 5000); + TE_SendToAll(); + + GetClientAbsOrigin(client, vec); + vec[2] += 10; + TE_SetupBeamRingPoint(vec, 50.0, GetConVarFloat(g_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.5, 30.0, 1.5, orangeColor, 5, 0); + TE_SendToAll(); + vec[2] += 15; + TE_SetupBeamRingPoint(vec, 40.0, GetConVarFloat(g_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 30.0, 1.5, orangeColor, 5, 0); + TE_SendToAll(); + vec[2] += 15; + TE_SetupBeamRingPoint(vec, 30.0, GetConVarFloat(g_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.7, 30.0, 1.5, orangeColor, 5, 0); + TE_SendToAll(); + vec[2] += 15; + TE_SetupBeamRingPoint(vec, 20.0, GetConVarFloat(g_FireBombRadius), g_BeamSprite, g_HaloSprite, 0, 10, 0.8, 30.0, 1.5, orangeColor, 5, 0); + TE_SendToAll(); + + EmitAmbientSound(SOUND_BOOM, vec, client, SNDLEVEL_RAIDSIREN); + + IgniteEntity(client, GetConVarFloat(g_BurnDuration)); + KillFireBomb(client); + + if (GetConVarInt(g_FireBombMode) > 0) + { + new teamOnly = ((GetConVarInt(g_TimeBombMode) == 1) ? true : false); + new maxClients = GetMaxClients(); + + for (new i = 1; i < maxClients; i++) + { + if (!IsClientInGame(i) || !IsPlayerAlive(i) || i == client) + { + continue; + } + + if (teamOnly && GetClientTeam(i) != GetClientTeam(client)) + { + continue; + } + + new Float:pos[3]; + GetClientAbsOrigin(i, pos); + + new Float:distance = GetVectorDistance(vec, pos); + + if (distance > GetConVarFloat(g_FireBombRadius)) + { + continue; + } + + new Float:duration = GetConVarFloat(g_BurnDuration); + duration *= (GetConVarFloat(g_TimeBombRadius) - distance) / GetConVarFloat(g_TimeBombRadius); + + IgniteEntity(i, duration); + } + } + } + + return Plugin_Handled; +} + +public AdminMenu_Burn(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Burn player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayBurnMenu(param); + } +} + +public AdminMenu_FireBomb(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "FireBomb player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayFireBombMenu(param); + } +} + +DisplayBurnMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Burn); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Burn player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayFireBombMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_FireBomb); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "FireBomb player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Burn(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + PerformBurn(param1, target, 20.0); + ShowActivity2(param1, "[SM] ", "%t", "Set target on fire", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayBurnMenu(param1); + } + } +} + +public MenuHandler_FireBomb(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformFireBomb(param1, target, 2); + ShowActivity2(param1, "[SM] ", "%t", "Toggled FireBomb on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayFireBombMenu(param1); + } + } +} + +public Action:Command_Burn(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_burn <#userid|name> [time]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new Float:seconds = GetConVarFloat(g_BurnDuration); + + if (args > 1) + { + decl String:time[20]; + GetCmdArg(2, time, sizeof(time)); + if (StringToFloatEx(time, seconds) == 0) + { + ReplyToCommand(client, "[SM] %t", "Invalid Amount"); + return Plugin_Handled; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformBurn(client, target_list[i], seconds); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Set target on fire", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Set target on fire", "_s", target_name); + } + + return Plugin_Handled; +} + +public Action:Command_FireBomb(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_firebomb <#userid|name> [0/1]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new toggle = 2; + if (args > 1) + { + decl String:arg2[2]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (arg2[0]) + { + toggle = 1; + } + else + { + toggle = 0; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformFireBomb(client, target_list[i], toggle); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled FireBomb on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled FireBomb on target", "_s", target_name); + } + + return Plugin_Handled; +} + + + + + + diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp new file mode 100644 index 00000000..fb870215 --- /dev/null +++ b/plugins/basefuncommands/ice.sp @@ -0,0 +1,554 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides freeze and freezebomb functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new Handle:g_FreezeTimers[MAXPLAYERS+1]; +new Handle:g_FreezeBombTimers[MAXPLAYERS+1]; +new g_FreezeTracker[MAXPLAYERS+1]; +new g_FreezeBombTracker[MAXPLAYERS+1]; + +new Handle:g_FreezeDuration = INVALID_HANDLE; +new Handle:g_FreezeBombTicks = INVALID_HANDLE; +new Handle:g_FreezeBombRadius = INVALID_HANDLE; +new Handle:g_FreezeBombMode = INVALID_HANDLE; + +SetupIce() +{ + RegAdminCmd("sm_freeze", Command_Freeze, ADMFLAG_SLAY, "sm_freeze <#userid|name> [time]"); + RegAdminCmd("sm_freezebomb", Command_FreezeBomb, ADMFLAG_SLAY, "sm_freezebomb <#userid|name> [0/1]"); + + g_FreezeDuration = CreateConVar("sm_freeze_duration", "10.0", "Sets the default duration for sm_freeze and freezebomb victims", 0, true, 1.0, true, 120.0); + g_FreezeBombTicks = CreateConVar("sm_freezebomb_ticks", "10", "Sets how long the freezebomb fuse is.", 0, true, 5.0, true, 120.0); + g_FreezeBombRadius = CreateConVar("sm_freezebomb_radius", "1000", "Sets the freezebomb blast radius.", 0, true, 50.0, true, 3000.0); + g_FreezeBombMode = CreateConVar("sm_freezebomb_mode", "0", "Who is targetted by the freezebomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); +} + +FreezeClient(client, time) +{ + if (g_FreezeTimers[client] != INVALID_HANDLE) + { + UnfreezeClient(client); + } + + SetEntityMovetype(client, MOVETYPE_NONE); + SetEntityRenderColor(client, 0, 128, 255, 192); + + new Float:vec[3]; + GetClientEyePosition(client, vec); + EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN); + + g_FreezeTimers[client] = CreateTimer(1.0, Timer_Freeze, client, TIMER_REPEAT); + g_FreezeTracker[client] = time; +} + +UnfreezeClient(client) +{ + KillTimer(g_FreezeTimers[client]); + g_FreezeTimers[client] = INVALID_HANDLE; +} + +CreateFreezeBomb(client) +{ + g_FreezeBombTimers[client] = CreateTimer(1.0, Timer_FreezeBomb, client, TIMER_REPEAT); + g_FreezeBombTracker[client] = GetConVarInt(g_FreezeBombTicks); +} + + +KillFreezeBomb(client) +{ + KillTimer(g_FreezeBombTimers[client]); + g_FreezeBombTimers[client] = INVALID_HANDLE; + + SetEntityRenderColor(client, 255, 255, 255, 255); +} + +KillAllFreezes() +{ + new maxclients = GetMaxClients(); + for (new i = 1; i <= maxclients; i++) + { + if (g_FreezeTimers[i] != INVALID_HANDLE) + { + UnfreezeClient(i); + } + + if (g_FreezeBombTimers[i] != INVALID_HANDLE) + { + KillFreezeBomb(i); + } + } +} + +PerformFreeze(client, target, time) +{ + FreezeClient(target, time); + LogAction(client, target, "\"%L\" froze \"%L\"", client, target); +} + +PerformFreezeBomb(client, target, toggle) +{ + switch (toggle) + { + case (2): + { + if (g_FreezeBombTimers[target] == INVALID_HANDLE) + { + CreateFreezeBomb(target); + LogAction(client, target, "\"%L\" set a FreezeBomb on \"%L\"", client, target); + } + else + { + KillFreezeBomb(target); + LogAction(client, target, "\"%L\" removed a FreezeBomb on \"%L\"", client, target); + } + } + + case (1): + { + if (g_FreezeBombTimers[target] == INVALID_HANDLE) + { + CreateFreezeBomb(target); + LogAction(client, target, "\"%L\" set a FreezeBomb on \"%L\"", client, target); + } + } + + case (0): + { + if (g_FreezeBombTimers[target] != INVALID_HANDLE) + { + KillFreezeBomb(target); + LogAction(client, target, "\"%L\" removed a FreezeBomb on \"%L\"", client, target); + } + } + } +} + +public Action:Timer_Freeze(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillFreezeBomb(client); + + return Plugin_Handled; + } + + g_FreezeTracker[client]--; + + SetEntityMovetype(client, MOVETYPE_NONE); + SetEntityRenderColor(client, 0, 128, 255, 135); + + new Float:vec[3]; + GetClientAbsOrigin(client, vec); + vec[2] += 10; + + TE_SetupGlowSprite(vec, g_GlowSprite, 0.95, 1.5, 50); + TE_SendToAll(); + + if (g_FreezeTracker[client] == 0) + { + UnfreezeClient(client); + + GetClientEyePosition(client, vec); + EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN); + + SetEntityMovetype(client, MOVETYPE_WALK); + SetEntityRenderColor(client, 255, 255, 255, 255); + } + + return Plugin_Handled; +} + +public Action:Timer_FreezeBomb(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillFreezeBomb(client); + + return Plugin_Handled; + } + + g_FreezeBombTracker[client]--; + + new Float:vec[3]; + GetClientEyePosition(client, vec); + + if (g_FreezeBombTracker[client] > 1) + { + new color; + + if (g_FreezeBombTracker[client] > 1) + { + color = RoundToFloor(g_FreezeBombTracker[client] * (255.0 / GetConVarFloat(g_FreezeBombTicks))); + EmitAmbientSound(SOUND_BEEP, vec, client, SNDLEVEL_RAIDSIREN); + } + else + { + color = 0; + EmitAmbientSound(SOUND_FINAL, vec, client, SNDLEVEL_RAIDSIREN); + } + + SetEntityRenderColor(client, color, color, 255, 255); + + decl String:name[64]; + GetClientName(client, name, sizeof(name)); + PrintCenterTextAll("%t", "Till Explodes", name, g_FreezeBombTracker[client]); + + GetClientAbsOrigin(client, vec); + vec[2] += 10; + + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SendToAll(); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SendToAll(); + } + else + { + TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, GetConVarInt(g_FreezeBombRadius), 5000); + TE_SendToAll(); + + EmitAmbientSound(SOUND_BOOM, vec, client, SNDLEVEL_RAIDSIREN); + + KillFreezeBomb(client); + FreezeClient(client, GetConVarInt(g_FreezeDuration)); + + if (GetConVarInt(g_FreezeBombMode) > 0) + { + new teamOnly = ((GetConVarInt(g_FreezeBombMode) == 1) ? true : false); + new maxClients = GetMaxClients(); + + for (new i = 1; i < maxClients; i++) + { + if (!IsClientInGame(i) || !IsPlayerAlive(i) || i == client) + { + continue; + } + + if (teamOnly && GetClientTeam(i) != GetClientTeam(client)) + { + continue; + } + + new Float:pos[3]; + GetClientEyePosition(i, pos); + + new Float:distance = GetVectorDistance(vec, pos); + + if (distance > GetConVarFloat(g_FreezeBombRadius)) + { + continue; + } + +//stock TE_SetupBeamPoints(const Float:start[3], const Float:end[3], ModelIndex, HaloIndex, StartFrame, FrameRate, Float:Life, +// Float:Width, Float:EndWidth, FadeLength, Float:Amplitude, const Color[4], Speed) + + TE_SetupBeamPoints(vec, pos, g_BeamSprite2, g_HaloSprite, 0, 1, 0.7, 20.0, 50.0, 1, 1.5, blueColor, 10); + TE_SendToAll(); + + FreezeClient(i, GetConVarInt(g_FreezeDuration)); + } + } + } + + return Plugin_Handled; +} + +public AdminMenu_Freeze(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Freeze player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayFreezeMenu(param); + } +} + +public AdminMenu_FreezeBomb(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "FreezeBomb player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayFreezeBombMenu(param); + } +} + +DisplayFreezeMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Freeze); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Freeze player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayFreezeBombMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_FreezeBomb); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "FreezeBomb player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Freeze(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformFreeze(param1, target, 2); + ShowActivity2(param1, "[SM] ", "%t", "Froze target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayFreezeBombMenu(param1); + } + } +} + +public MenuHandler_FreezeBomb(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformFreezeBomb(param1, target, 2); + ShowActivity2(param1, "[SM] ", "%t", "Toggled FreezeBomb on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayFreezeBombMenu(param1); + } + } +} + +public Action:Command_Freeze(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_freeze <#userid|name> [time]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new seconds = GetConVarInt(g_FreezeDuration); + + if (args > 1) + { + decl String:time[20]; + GetCmdArg(2, time, sizeof(time)); + if (StringToIntEx(time, seconds) == 0) + { + ReplyToCommand(client, "[SM] %t", "Invalid Amount"); + return Plugin_Handled; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformFreeze(client, target_list[i], seconds); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Froze target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Froze target", "_s", target_name); + } + + return Plugin_Handled; +} + +public Action:Command_FreezeBomb(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_freezebomb <#userid|name> [0/1]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new toggle = 2; + if (args > 1) + { + decl String:arg2[2]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (arg2[0]) + { + toggle = 1; + } + else + { + toggle = 0; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformFreezeBomb(client, target_list[i], toggle); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled FreezeBomb on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled FreezeBomb on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/basefuncommands/timebomb.sp b/plugins/basefuncommands/timebomb.sp new file mode 100644 index 00000000..ac63ea84 --- /dev/null +++ b/plugins/basefuncommands/timebomb.sp @@ -0,0 +1,364 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides TimeBomb functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new Handle:g_TimeBombTimers[MAXPLAYERS+1]; +new g_TimeBombTracker[MAXPLAYERS+1]; + +new Handle:g_TimeBombTicks = INVALID_HANDLE; +new Handle:g_TimeBombRadius = INVALID_HANDLE; +new Handle:g_TimeBombMode = INVALID_HANDLE; + +SetupTimeBomb() +{ + RegAdminCmd("sm_timebomb", Command_TimeBomb, ADMFLAG_SLAY, "sm_timebomb <#userid|name> [0/1]"); + + g_TimeBombTicks = CreateConVar("sm_timebomb_ticks", "10", "Sets how long the timebomb fuse is.", 0, true, 5.0, true, 120.0); + g_TimeBombRadius = CreateConVar("sm_timebomb_radius", "600", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); + g_TimeBombMode = CreateConVar("sm_timebomb_mode", "0", "Who is killed by the timebomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); +} + +CreateTimeBomb(client) +{ + g_TimeBombTimers[client] = CreateTimer(1.0, Timer_TimeBomb, client, TIMER_REPEAT); + g_TimeBombTracker[client] = GetConVarInt(g_TimeBombTicks); +} + +KillTimeBomb(client) +{ + KillTimer(g_TimeBombTimers[client]); + g_TimeBombTimers[client] = INVALID_HANDLE; + + SetEntityRenderColor(client, 255, 255, 255, 255); +} + +KillAllTimeBombs() +{ + new maxclients = GetMaxClients(); + for (new i = 1; i <= maxclients; i++) + { + if (g_TimeBombTimers[i] != INVALID_HANDLE) + { + KillTimeBomb(i); + } + } +} + +PerformTimeBomb(client, target, toggle) +{ + switch (toggle) + { + case (2): + { + if (g_TimeBombTimers[target] == INVALID_HANDLE) + { + CreateTimeBomb(target); + LogAction(client, target, "\"%L\" set a TimeBomb on \"%L\"", client, target); + } + else + { + KillTimeBomb(target); + LogAction(client, target, "\"%L\" removed a TimeBomb on \"%L\"", client, target); + } + } + + case (1): + { + if (g_TimeBombTimers[target] == INVALID_HANDLE) + { + CreateTimeBomb(target); + LogAction(client, target, "\"%L\" set a TimeBomb on \"%L\"", client, target); + } + } + + case (0): + { + if (g_TimeBombTimers[target] != INVALID_HANDLE) + { + KillTimeBomb(target); + LogAction(client, target, "\"%L\" removed a TimeBomb on \"%L\"", client, target); + } + } + } +} + +public Action:Timer_TimeBomb(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillTimeBomb(client); + + return Plugin_Handled; + } + + g_TimeBombTracker[client]--; + + new Float:vec[3]; + GetClientEyePosition(client, vec); + + if (g_TimeBombTracker[client] > 1) + { + new color; + + if (g_TimeBombTracker[client] > 1) + { + color = RoundToFloor(g_TimeBombTracker[client] * (128.0 / GetConVarFloat(g_TimeBombTicks))); + EmitAmbientSound(SOUND_BEEP, vec, client, SNDLEVEL_RAIDSIREN); + } + else + { + color = 0; + EmitAmbientSound(SOUND_FINAL, vec, client, SNDLEVEL_RAIDSIREN); + } + + SetEntityRenderColor(client, 255, 128, color, 255); + + decl String:name[64]; + GetClientName(client, name, sizeof(name)); + PrintCenterTextAll("%t", "Till Explodes", name, g_TimeBombTracker[client]); + + GetClientAbsOrigin(client, vec); + vec[2] += 10; + + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_TimeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0); + TE_SendToAll(); + TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_TimeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0); + TE_SendToAll(); + } + else + { + TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, GetConVarInt(g_TimeBombRadius), 5000); + TE_SendToAll(); + + EmitAmbientSound(SOUND_BOOM, vec, client, SNDLEVEL_RAIDSIREN); + + ForcePlayerSuicide(client); + KillTimeBomb(client); + + if (GetConVarInt(g_TimeBombMode) > 0) + { + new teamOnly = ((GetConVarInt(g_TimeBombMode) == 1) ? true : false); + new maxClients = GetMaxClients(); + + //g_FilteredEntity = client; + + for (new i = 1; i < maxClients; i++) + { + if (!IsClientInGame(i) || !IsPlayerAlive(i) || i == client) + { + continue; + } + + if (teamOnly && GetClientTeam(i) != GetClientTeam(client)) + { + continue; + } + + new Float:pos[3]; + GetClientEyePosition(i, pos); + + new Float:distance = GetVectorDistance(vec, pos); + + if (distance > GetConVarFloat(g_TimeBombRadius)) + { + continue; + } + + new damage = 220; + damage = RoundToFloor(damage * ((GetConVarFloat(g_TimeBombRadius) - distance) / GetConVarFloat(g_TimeBombRadius))); + + SlapPlayer(i, damage, false); + TE_SetupExplosion(pos, g_ExplosionSprite, 0.05, 1, 0, 1, 1); + TE_SendToAll(); + + /* + new Float:dir[3]; + SubtractVectors(vec, pos, dir); + TR_TraceRayFilter(vec, dir, MASK_SOLID, RayType_Infinite, TR_Filter_Client); + + if (i == TR_GetEntityIndex()) + { + new damage = 100; + new radius = GetConVarInt(g_TimeBombRadius) / 2; + + if (distance > radius) + { + distance -= radius; + damage = RoundToFloor(damage * ((radius - distance) / radius)); + } + + SlapPlayer(i, damage, false); + } + */ + } + } + } + + return Plugin_Handled; +} + +public AdminMenu_TimeBomb(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "TimeBomb player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayTimeBombMenu(param); + } +} + +DisplayTimeBombMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_TimeBomb); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "TimeBomb player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_TimeBomb(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformTimeBomb(param1, target, 2); + ShowActivity2(param1, "[SM] ", "%t", "Toggled TimeBomb on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayTimeBombMenu(param1); + } + } +} + +public Action:Command_TimeBomb(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_timebomb <#userid|name> [0/1]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new toggle = 2; + if (args > 1) + { + decl String:arg2[2]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (arg2[0]) + { + toggle = 1; + } + else + { + toggle = 0; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformTimeBomb(client, target_list[i], toggle); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled TimeBomb on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled TimeBomb on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/slapslay.sp b/plugins/slapslay.sp new file mode 100644 index 00000000..2bd5ed9f --- /dev/null +++ b/plugins/slapslay.sp @@ -0,0 +1,103 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SlapSlay Commands Plugin + * Implements slap and slay commands + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#pragma semicolon 1 + +#include <sourcemod> +#include <sdktools> +#undef REQUIRE_PLUGIN +#include <adminmenu> + +public Plugin:myinfo = +{ + name = "SlapSlay Commands", + author = "AlliedModders LLC", + description = "Slap and Slay Commands", + version = SOURCEMOD_VERSION, + url = "http://www.sourcemod.net/" +}; + +new Handle:hTopMenu = INVALID_HANDLE; + +#include "basefuncommands/slay.sp" +#include "basefuncommands/slap.sp" + +public OnPluginStart() +{ + LoadTranslations("common.phrases"); + LoadTranslations("slapslay.phrases"); + + RegAdminCmd("sm_slap", Command_Slap, ADMFLAG_SLAY, "sm_slap <#userid|name> [damage]"); + RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); + + /* Account for late loading */ + new Handle:topmenu; + if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) + { + OnAdminMenuReady(topmenu); + } +} + +public OnAdminMenuReady(Handle:topmenu) +{ + /* Block us from being called twice */ + if (topmenu == hTopMenu) + { + return; + } + + /* Save the Handle */ + hTopMenu = topmenu; + + /* Find the "Player Commands" category */ + new TopMenuObject:player_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_PLAYERCOMMANDS); + + if (player_commands != INVALID_TOPMENUOBJECT) + { + AddToTopMenu(hTopMenu, + "sm_slay", + TopMenuObject_Item, + AdminMenu_Slay, + player_commands, + "sm_slay", + ADMFLAG_SLAY); + + AddToTopMenu(hTopMenu, + "sm_slap", + TopMenuObject_Item, + AdminMenu_Slap, + player_commands, + "sm_slap", + ADMFLAG_SLAY); + } +} \ No newline at end of file diff --git a/plugins/basefuncommands/slap.sp b/plugins/slapslay/slap.sp similarity index 95% rename from plugins/basefuncommands/slap.sp rename to plugins/slapslay/slap.sp index f5216835..efa793cb 100644 --- a/plugins/basefuncommands/slap.sp +++ b/plugins/slapslay/slap.sp @@ -28,8 +28,10 @@ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or <http://www.sourcemod.net/license.php>. * - * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + * Version: $Id$ */ + +new g_SlapDamage[MAXPLAYERS+1]; PerformSlap(client, target, damage) { diff --git a/plugins/basefuncommands/slay.sp b/plugins/slapslay/slay.sp similarity index 94% rename from plugins/basefuncommands/slay.sp rename to plugins/slapslay/slay.sp index 3eb686bd..daa00232 100644 --- a/plugins/basefuncommands/slay.sp +++ b/plugins/slapslay/slay.sp @@ -28,7 +28,7 @@ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or <http://www.sourcemod.net/license.php>. * - * Version: $Id: admin-flatfile.sp 1438 2007-09-16 03:45:06Z dvander $ + * Version: $Id$ */ PerformSlay(client, target) diff --git a/translations/basefuncommands.phrases.txt b/translations/basefuncommands.phrases.txt index d71f212a..e14a9e8e 100644 --- a/translations/basefuncommands.phrases.txt +++ b/translations/basefuncommands.phrases.txt @@ -11,37 +11,30 @@ "en" "Burn player" } + "FireBomb player" + { + "en" "Firebomb player" + } + + "Freeze player" + { + "en" "Freeze player" + } + + "FreezeBomb player" + { + "en" "Freezebomb player" + } + + "TimeBomb player" + { + "en" "Timebomb player" + } + "Beacon player" { "en" "Beacon player" } - - "Slap player" - { - "en" "Slap player" - } - - "Slap damage" - { - "en" "Slap damage" - } - - "Slay player" - { - "en" "Slay player" - } - - "Slapped target" - { - "#format" "{1:t}" - "en" "Slapped {1}." - } - - "Slayed target" - { - "#format" "{1:t}" - "en" "Slayed {1}." - } "Set target on fire" { @@ -49,9 +42,39 @@ "en" "Set {1} on fire." } + "Toggled FireBomb on target" + { + "#format" "{1:t}" + "en" "set a firebomb on {1}." + } + + "Froze target" + { + "#format" "{1:t}" + "en" "froze {1}." + } + + "Toggled FreezeBomb on target" + { + "#format" "{1:t}" + "en" "set a freezebomb on {1}." + } + "Toggled beacon on target" { "#format" "{1:t}" "en" "toggled beacon on {1}." } + + "Toggled TimeBomb on target" + { + "#format" "{1:t}" + "en" "set a timebomb on {1}." + } + + "Till Explodes" + { + "#format" "{1:s},{2:d}" + "en" "{2} seconds until {1} explodes." + } } diff --git a/translations/slapslay.phrases.txt b/translations/slapslay.phrases.txt new file mode 100644 index 00000000..ae8dc245 --- /dev/null +++ b/translations/slapslay.phrases.txt @@ -0,0 +1,29 @@ +"Phrases" +{ + "Slap player" + { + "en" "Slap player" + } + + "Slap damage" + { + "en" "Slap damage" + } + + "Slay player" + { + "en" "Slay player" + } + + "Slapped target" + { + "#format" "{1:t}" + "en" "Slapped {1}." + } + + "Slayed target" + { + "#format" "{1:t}" + "en" "Slayed {1}." + } +} From 4d5af8a946fb0c664c37cfe3a7814e41dea4842b Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 19 Dec 2007 01:20:56 +0000 Subject: [PATCH 124/263] Small adjustment to default convar values --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401808 --- plugins/basefuncommands/fire.sp | 2 +- plugins/basefuncommands/ice.sp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/basefuncommands/fire.sp b/plugins/basefuncommands/fire.sp index d6222d22..69ffb456 100644 --- a/plugins/basefuncommands/fire.sp +++ b/plugins/basefuncommands/fire.sp @@ -46,7 +46,7 @@ SetupFire() g_BurnDuration = CreateConVar("sm_burn_duration", "20", "Sets the default duration of sm_burn and firebomb victims.", 0, true, 0.5, true, 20.0); g_FireBombTicks = CreateConVar("sm_firebomb_ticks", "10", "Sets how long the FireBomb fuse is.", 0, true, 5.0, true, 120.0); - g_FireBombRadius = CreateConVar("sm_firebomb_radius", "1000", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); + g_FireBombRadius = CreateConVar("sm_firebomb_radius", "600", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); g_FireBombMode = CreateConVar("sm_firebomb_mode", "0", "Who is targetted by the FireBomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); } diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp index fb870215..c9dfc7db 100644 --- a/plugins/basefuncommands/ice.sp +++ b/plugins/basefuncommands/ice.sp @@ -48,7 +48,7 @@ SetupIce() g_FreezeDuration = CreateConVar("sm_freeze_duration", "10.0", "Sets the default duration for sm_freeze and freezebomb victims", 0, true, 1.0, true, 120.0); g_FreezeBombTicks = CreateConVar("sm_freezebomb_ticks", "10", "Sets how long the freezebomb fuse is.", 0, true, 5.0, true, 120.0); - g_FreezeBombRadius = CreateConVar("sm_freezebomb_radius", "1000", "Sets the freezebomb blast radius.", 0, true, 50.0, true, 3000.0); + g_FreezeBombRadius = CreateConVar("sm_freezebomb_radius", "600", "Sets the freezebomb blast radius.", 0, true, 50.0, true, 3000.0); g_FreezeBombMode = CreateConVar("sm_freezebomb_mode", "0", "Who is targetted by the freezebomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); } From 023e5629c759cbf8453f720324057936c22fe98c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 19 Dec 2007 01:34:01 +0000 Subject: [PATCH 125/263] renamed slapslay to playercommands --HG-- rename : plugins/slapslay.sp => plugins/playercommands.sp rename : plugins/slapslay/slap.sp => plugins/playercommands/slap.sp rename : plugins/slapslay/slay.sp => plugins/playercommands/slay.sp extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401809 --- plugins/{slapslay.sp => playercommands.sp} | 4 ++-- plugins/{slapslay => playercommands}/slap.sp | 0 plugins/{slapslay => playercommands}/slay.sp | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename plugins/{slapslay.sp => playercommands.sp} (94%) rename plugins/{slapslay => playercommands}/slap.sp (100%) rename plugins/{slapslay => playercommands}/slay.sp (100%) diff --git a/plugins/slapslay.sp b/plugins/playercommands.sp similarity index 94% rename from plugins/slapslay.sp rename to plugins/playercommands.sp index 2bd5ed9f..5709333b 100644 --- a/plugins/slapslay.sp +++ b/plugins/playercommands.sp @@ -49,8 +49,8 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; -#include "basefuncommands/slay.sp" -#include "basefuncommands/slap.sp" +#include "playercommands/slay.sp" +#include "playercommands/slap.sp" public OnPluginStart() { diff --git a/plugins/slapslay/slap.sp b/plugins/playercommands/slap.sp similarity index 100% rename from plugins/slapslay/slap.sp rename to plugins/playercommands/slap.sp diff --git a/plugins/slapslay/slay.sp b/plugins/playercommands/slay.sp similarity index 100% rename from plugins/slapslay/slay.sp rename to plugins/playercommands/slay.sp From d851108dd25631997ba214050cedf09a7bb476f9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 19 Dec 2007 01:35:24 +0000 Subject: [PATCH 126/263] added "playercommands" to build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401810 --- tools/builder/PkgCore.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index c5df9f5f..67ea621f 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -289,6 +289,7 @@ namespace builder plugins.Add(new Plugin("randomcycle", true)); plugins.Add(new Plugin("rockthevote", true)); plugins.Add(new Plugin("adminmenu")); + plugins.Add(new Plugin("playercommands")); return (Plugin [])plugins.ToArray(typeof(Plugin)); } From ae766d315060a3c1ed0bfc663bbc8882f2f22ad9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 19 Dec 2007 01:46:22 +0000 Subject: [PATCH 127/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401811 --- tools/builder/PkgCore.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index 67ea621f..12ec36f3 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -118,6 +118,7 @@ namespace builder builder.CopyFolder(this, "plugins/basevotes", "addons/sourcemod/scripting/basevotes", null); builder.CopyFolder(this, "plugins/basebans", "addons/sourcemod/scripting/basebans", null); builder.CopyFolder(this, "plugins/basefuncommands", "addons/sourcemod/scripting/basefuncommands", null); + builder.CopyFolder(this, "plugins/playercommands", "addons/sourcemod/scripting/playercommands", null); } /** From 24db2b259779299c11ef76570f49a0d7b037fd09 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 19 Dec 2007 01:47:26 +0000 Subject: [PATCH 128/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401812 --- tools/builder/PkgCore.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index 12ec36f3..0ef84bd5 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -66,6 +66,7 @@ namespace builder folders.Add("addons/sourcemod/extensions/auto.1.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep2"); + folders.Add("addons/sourcemod/scripting/playercommands"); return (string [])folders.ToArray(typeof(string)); } From 4d594bd4c72351603b56aa802a7bf36b24fc9ca0 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 19 Dec 2007 22:21:20 +0000 Subject: [PATCH 129/263] Fixed sm_freeze menu exit going to sm_freezebomb menu Fixed countdown timer on bombs stopping at 2 seconds, now stops at 1 second like it should. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401814 --- plugins/basefuncommands/fire.sp | 2 +- plugins/basefuncommands/ice.sp | 7 ++----- plugins/basefuncommands/timebomb.sp | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/plugins/basefuncommands/fire.sp b/plugins/basefuncommands/fire.sp index 69ffb456..b05c0220 100644 --- a/plugins/basefuncommands/fire.sp +++ b/plugins/basefuncommands/fire.sp @@ -134,7 +134,7 @@ public Action:Timer_FireBomb(Handle:timer, any:client) new Float:vec[3]; GetClientEyePosition(client, vec); - if (g_FireBombTracker[client] > 1) + if (g_FireBombTracker[client] > 0) { new color; diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp index c9dfc7db..2066d4a6 100644 --- a/plugins/basefuncommands/ice.sp +++ b/plugins/basefuncommands/ice.sp @@ -201,7 +201,7 @@ public Action:Timer_FreezeBomb(Handle:timer, any:client) new Float:vec[3]; GetClientEyePosition(client, vec); - if (g_FreezeBombTracker[client] > 1) + if (g_FreezeBombTracker[client] > 0) { new color; @@ -267,9 +267,6 @@ public Action:Timer_FreezeBomb(Handle:timer, any:client) continue; } -//stock TE_SetupBeamPoints(const Float:start[3], const Float:end[3], ModelIndex, HaloIndex, StartFrame, FrameRate, Float:Life, -// Float:Width, Float:EndWidth, FadeLength, Float:Amplitude, const Color[4], Speed) - TE_SetupBeamPoints(vec, pos, g_BeamSprite2, g_HaloSprite, 0, 1, 0.7, 20.0, 50.0, 1, 1.5, blueColor, 10); TE_SendToAll(); @@ -384,7 +381,7 @@ public MenuHandler_Freeze(Handle:menu, MenuAction:action, param1, param2) /* Re-draw the menu if they're still valid */ if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) { - DisplayFreezeBombMenu(param1); + DisplayFreezeMenu(param1); } } } diff --git a/plugins/basefuncommands/timebomb.sp b/plugins/basefuncommands/timebomb.sp index ac63ea84..b808b4f5 100644 --- a/plugins/basefuncommands/timebomb.sp +++ b/plugins/basefuncommands/timebomb.sp @@ -125,7 +125,7 @@ public Action:Timer_TimeBomb(Handle:timer, any:client) new Float:vec[3]; GetClientEyePosition(client, vec); - if (g_TimeBombTracker[client] > 1) + if (g_TimeBombTracker[client] > 0) { new color; From 6c9c7327ca1a9eb581ed5b00a2735254327ba564 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Wed, 19 Dec 2007 22:22:35 +0000 Subject: [PATCH 130/263] Added new fun commands to adminmenu_sorting.txt --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401815 --- configs/adminmenu_sorting.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/configs/adminmenu_sorting.txt b/configs/adminmenu_sorting.txt index 8dc3a1cb..24a9dbee 100644 --- a/configs/adminmenu_sorting.txt +++ b/configs/adminmenu_sorting.txt @@ -13,7 +13,12 @@ "item" "sm_kick" "item" "sm_ban" "item" "sm_gag" - "item" "sm_burn" + "item" "sm_burn" + "item" "sm_beacon" + "item" "sm_freeze" + "item" "sm_timebomb" + "item" "sm_firebomb" + "item" "sm_freezebomb" } "ServerCommands" From 02e210ae027ef760d474e439316d734afbf3dd23 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 21 Dec 2007 06:05:48 +0000 Subject: [PATCH 131/263] added support for Hidden:Source --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401816 --- gamedata/sdktools.games.txt | 94 +++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index fb742734..b7962f52 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -43,6 +43,7 @@ "game" "FortressForever" "game" "empires" "game" "synergy" + "game" "hidden" } "Offsets" @@ -102,6 +103,7 @@ "game" "FortressForever" "game" "empires" "game" "synergy" + "game" "hidden" } "Offsets" @@ -153,6 +155,7 @@ "game" "FortressForever" "game" "empires" "game" "synergy" + "game" "hidden" } "Offsets" @@ -201,6 +204,7 @@ "game" "FortressForever" "game" "empires" "game" "synergy" + "game" "hidden" } "Signatures" @@ -1322,5 +1326,95 @@ } } } + + /* Hidden:Source Beta 4b */ + "hidden" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "348" + "linux" "349" + } + "RemovePlayerItem" + { + "windows" "207" + "linux" "208" + } + "Weapon_GetSlot" + { + "windows" "205" + "linux" "206" + } + "Ignite" + { + "windows" "170" + "linux" "171" + } + "Extinguish" + { + "windows" "171" + "linux" "172" + } + "Teleport" + { + "windows" "90" + "linux" "91" + } + "GetVelocity" + { + "windows" "114" + "linux" "115" + } + "EyeAngles" + { + "windows" "106" + "linux" "107" + } + "DispatchKeyValue" + { + "windows" "30" + "linux" "29" + } + "DispatchKeyValueFloat" + { + "windows" "29" + "linux" "30" + } + "DispatchKeyValueVector" + { + "windows" "28" + "linux" "31" + } + "AcceptInput" + { + "windows" "34" + "linux" "35" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + + "TE_GetServerClass" + { + "windows" "0" + "linux" "0" + } + } + + "Signatures" + { + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14" + } + } + } } From f87da92617edc286c072e219001a0933df872b73 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 21 Dec 2007 06:17:04 +0000 Subject: [PATCH 132/263] fixed amb1291 - CommitSuicide offsets missing for a few mods --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401817 --- gamedata/sdktools.games.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index b7962f52..23f15a42 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -1215,6 +1215,11 @@ "windows" "98" "linux" "99" } + "CommitSuicide" + { + "windows" "356" + "linux" "357" + } "GetVelocity" { "windows" "126" @@ -1289,6 +1294,11 @@ "windows" "98" "linux" "99" } + "CommitSuicide" + { + "windows" "362" + "linux" "363" + } "GetVelocity" { "windows" "126" From ad5ef39cb463af7aed342a8e5329e6d71fbc82de Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 22 Dec 2007 05:16:18 +0000 Subject: [PATCH 133/263] patched amb1296 - multi-d r-values are now impossible --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401818 --- sourcepawn/compiler/msvc8/spcomp.vcproj | 12 ++++++------ sourcepawn/compiler/sc3.c | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sourcepawn/compiler/msvc8/spcomp.vcproj b/sourcepawn/compiler/msvc8/spcomp.vcproj index 312f8f91..ead149fd 100644 --- a/sourcepawn/compiler/msvc8/spcomp.vcproj +++ b/sourcepawn/compiler/msvc8/spcomp.vcproj @@ -39,12 +39,12 @@ /> <Tool Name="VCCLCompilerTool" - Optimization="3" - InlineFunctionExpansion="2" - EnableIntrinsicFunctions="true" - FavorSizeOrSpeed="1" - OmitFramePointers="true" - EnableFiberSafeOptimizations="true" + Optimization="0" + InlineFunctionExpansion="0" + EnableIntrinsicFunctions="false" + FavorSizeOrSpeed="0" + OmitFramePointers="false" + EnableFiberSafeOptimizations="false" AdditionalIncludeDirectories="..\..\..\public\sourcepawn" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="true" diff --git a/sourcepawn/compiler/sc3.c b/sourcepawn/compiler/sc3.c index c9a86974..19332800 100644 --- a/sourcepawn/compiler/sc3.c +++ b/sourcepawn/compiler/sc3.c @@ -1207,7 +1207,7 @@ static int hier14(value *lval1) } /* if */ } /* if */ if (lval3.sym->dim.array.level!=level) - return error(48); /* array dimensions must match */ + return error(47); /* array dimensions must match */ else if (ltlength<val || exactmatch && ltlength>val || val==0) return error(47); /* array sizes must match */ else if (lval3.ident!=iARRAYCELL && !matchtag(lval3.sym->x.tags.index,idxtag,TRUE)) @@ -1217,6 +1217,7 @@ static int hier14(value *lval1) symbol *sym1 = lval3.sym; symbol *sym2 = lval2.sym; int i; + error(23); assert(sym1!=NULL && sym2!=NULL); /* ^^^ sym2 must be valid, because only variables can be * multi-dimensional (there are no multi-dimensional literals), From a079a87f68b1030b3b7c3f0a9880fe88747f8fe8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 22 Dec 2007 08:57:08 +0000 Subject: [PATCH 134/263] fixed amb1305 by making OnClientPostAdminCheck() always occur after OnClientPutInServer(). this is now GUARANTEED. it was undefined before, however the usual case was opposite. if plugins were relying on this, they were written poorly and shouldn't have worked in the first place, especially with the threaded SQL plugin. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401819 --- core/PlayerManager.cpp | 12 +++++++----- plugins/include/clients.inc | 29 ++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 0e54712f..dcee273e 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -489,6 +489,11 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername m_clputinserver->PushCell(client); m_clputinserver->Execute(&res, NULL); + + if (m_Players[client].IsAuthorized()) + { + m_Players[client].DoPostConnectAuthorization(); + } } void PlayerManager::OnSourceModLevelEnd() @@ -1144,13 +1149,10 @@ void CPlayer::Connect() { const char *pass = engine->GetClientConVarValue(client, var); m_LastPassword.assign(pass ? pass : ""); - } else { - m_LastPassword.assign(""); } - - if (m_IsAuthorized) + else { - DoPostConnectAuthorization(); + m_LastPassword.assign(""); } } diff --git a/plugins/include/clients.inc b/plugins/include/clients.inc index 219a25dd..69d90587 100644 --- a/plugins/include/clients.inc +++ b/plugins/include/clients.inc @@ -56,10 +56,15 @@ enum NetFlow forward bool:OnClientConnect(client, String:rejectmsg[], maxlen); /** - * Called when a client is entering to the game. + * Called when a client is entering the game. * - * @note Whether a client has a steamid is undefined until OnClientAuthorized + * Whether a client has a steamid is undefined until OnClientAuthorized * is called, which may occur either before or after OnClientPutInServer. + * Similarly, use OnClientPostAdminCheck() if you need to verify whether + * connecting players are admins. + * + * GetClientCount() will include clients as they are passed through this + * function, as clients are already in game at this point. * * @param client Client index. * @noreturn @@ -100,9 +105,11 @@ forward Action:OnClientCommand(client, args); forward OnClientSettingsChanged(client); /** - * Called when a client receives a Steam ID. - - * Admin properties are not assigned here, but on OnClientPostAdminCheck(). + * Called when a client receives a Steam ID. The state of a client's + * authorization via Steam or as an admin is not guaranteed here. + * Use OnClientAuthorized() or OnClientPostAdminCheck() for those, + * respectively. + * * This is called by bots, but the ID will be "BOT". * * @param client Client index. @@ -114,11 +121,16 @@ forward OnClientAuthorized(client, const String:auth[]); /** * Called once a client is authorized and fully in-game, but * before admin checks are done. This can be used to override - * the default admin checks for a client. + * the default admin checks for a client. You should only use + * this for overriding; use OnClientPostAdminCheck() instead + * if you want notification. * * Note: If handled/blocked, PostAdminCheck must be signalled * manually via NotifyPostAdminCheck(). * + * This callback is gauranteed to occur on all clients, and always + * after each OnClientPutInServer() call. + * * @param client Client index. * @return Plugin_Handled to block admin checks. */ @@ -126,7 +138,10 @@ forward Action:OnClientPreAdminCheck(client); /** * Called once a client is authorized and fully in-game, and - * after all post-connection authorizations have been performed. + * after all post-connection authorizations have been performed. + * + * This callback is gauranteed to occur on all clients, and always + * after each OnClientPutInServer() call. * * @param client Client index. * @noreturn From c3456b880495bf246a459c61ff9088384cbcd83b Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 22 Dec 2007 19:35:54 +0000 Subject: [PATCH 135/263] moved errno.h to top of platform includes fixed bug where FormatMessage() did not ignore inserts --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401820 --- core/systems/LibrarySys.cpp | 2 +- public/sm_platform.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/systems/LibrarySys.cpp b/core/systems/LibrarySys.cpp index 6b067217..15386387 100644 --- a/core/systems/LibrarySys.cpp +++ b/core/systems/LibrarySys.cpp @@ -278,7 +278,7 @@ void LibrarySystem::GetPlatformError(char *error, size_t maxlength) #if defined PLATFORM_WINDOWS DWORD dw = GetLastError(); FormatMessageA( - FORMAT_MESSAGE_FROM_SYSTEM, + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), diff --git a/public/sm_platform.h b/public/sm_platform.h index 7a8405e3..2cc0e29f 100644 --- a/public/sm_platform.h +++ b/public/sm_platform.h @@ -63,9 +63,9 @@ #elif defined __linux__ #define PLATFORM_LINUX #define PLATFORM_POSIX +#include <errno.h> #include <unistd.h> #include <dirent.h> -#include <errno.h> #include <dlfcn.h> #include <sys/stat.h> #define PLATFORM_MAX_PATH PATH_MAX From f8f5a6a8888093076aaff4dae21b7e3d9df4d2b6 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 22 Dec 2007 19:36:28 +0000 Subject: [PATCH 136/263] added extended error info to text parser API; GameConfigs now display better errors --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401821 --- core/GameConfigs.cpp | 7 +------ core/TextParsers.cpp | 34 ++++++++++++++++++++++++++++++++++ core/TextParsers.h | 6 ++++++ public/ITextParsers.h | 17 ++++++++++++++++- 4 files changed, 57 insertions(+), 7 deletions(-) diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index 3811c3fa..cb96c655 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -508,14 +508,9 @@ bool CGameConfig::Reparse(char *error, size_t maxlength) sm_trie_clear(m_pProps); sm_trie_clear(m_pKeys); - if ((err=textparsers->ParseFile_SMC(path, this, NULL)) + if ((err=textparsers->ParseSMCFile(path, this, NULL, error, maxlength)) != SMCError_Okay) { - if (error && (err != SMCError_Custom)) - { - const char *str = textparsers->GetSMCErrorString(err); - snprintf(error, maxlength, "%s", str); - } return false; } diff --git a/core/TextParsers.cpp b/core/TextParsers.cpp index 51c23227..781ada22 100644 --- a/core/TextParsers.cpp +++ b/core/TextParsers.cpp @@ -37,6 +37,8 @@ #include <assert.h> #include "TextParsers.h" #include "ShareSys.h" +#include "sm_stringutil.h" +#include "LibrarySys.h" TextParsers g_TextParser; ITextParsers *textparsers = &g_TextParser; @@ -155,6 +157,38 @@ SMCError TextParsers::ParseFile_SMC(const char *file, ITextListener_SMC *smc, SM return result; } +SMCError TextParsers::ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) +{ + const char *errstr; + FILE *fp = fopen(file, "rt"); + + if (fp == NULL) + { + char error[256] = "unknown"; + if (states != NULL) + { + states->line = 0; + states->col = 0; + } + g_LibSys.GetPlatformError(error, sizeof(error)); + UTIL_Format(buffer, maxsize, "File could not be opened: %s", error); + return SMCError_StreamOpen; + } + + SMCError result = ParseStream_SMC(fp, FileStreamReader, smc_listener, states); + + fclose(fp); + + errstr = GetSMCErrorString(result); + UTIL_Format(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); + + return result; +} + /** * Raw parsing of streams with helper functions */ diff --git a/core/TextParsers.h b/core/TextParsers.h index 6065b0cf..7762c263 100644 --- a/core/TextParsers.h +++ b/core/TextParsers.h @@ -64,6 +64,12 @@ public: ITextListener_SMC *smc_listener, SMCStates *states); + SMCError ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize); + unsigned int GetUTF8CharBytes(const char *stream); const char *GetSMCErrorString(SMCError err); diff --git a/public/ITextParsers.h b/public/ITextParsers.h index 85f675e3..6cbdac95 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -43,7 +43,7 @@ namespace SourceMod { #define SMINTERFACE_TEXTPARSERS_NAME "ITextParsers" - #define SMINTERFACE_TEXTPARSERS_VERSION 2 + #define SMINTERFACE_TEXTPARSERS_VERSION 3 /** * The INI file format is defined as: @@ -390,6 +390,21 @@ namespace SourceMod * @return True if first character is whitespace, false otherwise. */ virtual bool IsWhitespace(const char *stream) =0; + + /** + * @brief Same as ParseFile_SMC, but with an extended error buffer. + * + * @param file Path to file. + * @param smc_listener Event handler for reading file. + * @param states Optional pointer to store last known states. + * @param buffer Error message buffer. + * @param maxsize Maximum size of the error buffer. + */ + virtual SMCError ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) =0; }; inline unsigned int _GetUTF8CharBytes(const char *stream) From 474f4d86c6bae91bea583da61dd6d1caaae1d287 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 23 Dec 2007 00:08:08 +0000 Subject: [PATCH 137/263] added pdb logging --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401822 --- tools/builder/Config.cs | 5 +++++ tools/builder/Main.cs | 4 ++++ tools/builder/Win32Builder.cs | 12 ++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tools/builder/Config.cs b/tools/builder/Config.cs index 309fce4e..3deb61fe 100644 --- a/tools/builder/Config.cs +++ b/tools/builder/Config.cs @@ -16,6 +16,7 @@ namespace builder public string pkg_path; public string builder_path; public string build_options; + public string pdb_log_file; public builder.BasePlatform Platform; public Config() @@ -85,6 +86,10 @@ namespace builder { build_options = val; } + else if (key.CompareTo("PDBLog") == 0) + { + pdb_log_file = val; + } } } } diff --git a/tools/builder/Main.cs b/tools/builder/Main.cs index 5fb74963..e4aa6452 100644 --- a/tools/builder/Main.cs +++ b/tools/builder/Main.cs @@ -31,6 +31,10 @@ namespace builder else if (cfg.Platform == BasePlatform.Platform_Windows) { bld = new Win32Builder(cfg); + if (cfg.pdb_log_file != null && File.Exists(cfg.pdb_log_file)) + { + File.Delete(cfg.pdb_log_file); + } } try diff --git a/tools/builder/Win32Builder.cs b/tools/builder/Win32Builder.cs index eff27468..99a55426 100644 --- a/tools/builder/Win32Builder.cs +++ b/tools/builder/Win32Builder.cs @@ -101,10 +101,14 @@ namespace builder binName); File.Copy(binpath, path, true); - /* On Windows we package the .pdb files as well */ - binpath = binpath.Replace(".dll", ".pdb"); - path = path.Replace(".dll", ".pdb"); - File.Copy(binpath, path, true); + /* On Windows we optionally log the PDB path */ + if (!lib.is_executable && cfg.pdb_log_file != null) + { + FileStream fs = File.Open(cfg.pdb_log_file, FileMode.Append, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + sw.WriteLine(binpath.Replace(".dll", ".pdb")); + sw.Close(); + } return true; } From e1748d9814a892f97825ba99b33f7790f8ed374e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 23 Dec 2007 00:17:54 +0000 Subject: [PATCH 138/263] disabled mm:s 1.6-episode1 builds --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401823 --- tools/builder/ABuilder.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/builder/ABuilder.cs b/tools/builder/ABuilder.cs index 1500d699..ffe46784 100644 --- a/tools/builder/ABuilder.cs +++ b/tools/builder/ABuilder.cs @@ -172,6 +172,10 @@ namespace builder Library [] libs = pkg.GetLibraries(); for (int i=0; i<libs.Length; i++) { + if (libs[i].build_mode == BuildMode.BuildMode_Episode1) + { + continue; + } if (!BuildLibrary(pkg, libs[i])) { throw new System.Exception("Failed to compile library: " + libs[i].binary_name); From c02dc7f71d5435107763dc3354c9cb59d7bdd66f Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sun, 23 Dec 2007 00:47:49 +0000 Subject: [PATCH 139/263] Changed the convar change hook for sv_alltalk to enforce sm_deadtalk correctly --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401824 --- plugins/basecomm.sp | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/plugins/basecomm.sp b/plugins/basecomm.sp index d081d920..5636dbc3 100644 --- a/plugins/basecomm.sp +++ b/plugins/basecomm.sp @@ -156,46 +156,31 @@ public Action:Command_Say(client, args) public ConVarChange_Alltalk(Handle:convar, const String:oldValue[], const String:newValue[]) { - if (StringToInt(newValue) != 0 - || StringToInt(oldValue) == 0) - { - return; - } + new mode = GetConVarInt(g_Cvar_Deadtalk); + new maxClients = GetMaxClients(); - new dt_val = GetConVarInt(g_Cvar_Deadtalk); - new max_clients = GetMaxClients(); - - for (new i = 1; i <= max_clients; i++) + for (new i = 1; i <= maxClients; i++) { if (!IsClientInGame(i)) { continue; } - PrintToServer("STAT (i %d) (g_Muted[%d] %d) (dt_val %d)", i, i, g_Muted[i], dt_val); - - if (IsPlayerAlive(i)) + if (g_Muted[i]) { - if (g_Muted[i]) - { - SetClientListeningFlags(i, VOICE_MUTED); - } - else - { - SetClientListeningFlags(i, VOICE_NORMAL); - } + SetClientListeningFlags(i, VOICE_MUTED); + } + else if (GetConVarBool(g_Cvar_Alltalk)) + { + SetClientListeningFlags(i, VOICE_NORMAL); } else { - if (g_Muted[i]) - { - SetClientListeningFlags(i, VOICE_MUTED); - } - else if (dt_val == 1) + if (mode == 1) { SetClientListeningFlags(i, VOICE_LISTENALL); } - else if (dt_val == 2) + else if (mode == 2) { SetClientListeningFlags(i, VOICE_TEAM); } @@ -233,12 +218,12 @@ public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) return; } - new dt_val = GetConVarInt(g_Cvar_Deadtalk); - if (dt_val == 1) + new mode = GetConVarInt(g_Cvar_Deadtalk); + if (mode == 1) { SetClientListeningFlags(client, VOICE_LISTENALL); } - else if (dt_val == 2) + else if (mode == 2) { SetClientListeningFlags(client, VOICE_TEAM); } From fdc67a7a52a75ca2402b140aca8da998f9ba5dc9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 23 Dec 2007 23:43:25 +0000 Subject: [PATCH 140/263] fixed amb1308 - CommitSuicide offset changed --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401825 --- gamedata/sdktools.games.ep2.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index ea4e9c58..93afb06d 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -238,8 +238,8 @@ } "CommitSuicide" { - "windows" "384" - "linux" "384" + "windows" "385" + "linux" "385" } "GetVelocity" { From 9ac2a2e318662bdcbcc65a617b78fe76a329acaa Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Mon, 24 Dec 2007 00:44:48 +0000 Subject: [PATCH 141/263] More netprop stocks for entities --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401826 --- plugins/include/entity_prop_stocks.inc | 52 +++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index 28514566..4e645b26 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -52,7 +52,19 @@ enum }; /** - * Sets an entity's color. + * Gets an entity's movetype. + * + * @param index Entity index + * @return Movetype, see enum above + */ +stock GetEntityMovetype(index) +{ + new offset = GetEntSendPropOffs(index, "movetype"); + return GetEntData(index, offset, 1); +} + +/** + * Sets an entity's movetype. * * @param index Entity index * @param mt Movetype, see enum above @@ -81,4 +93,42 @@ stock SetEntityRenderColor(index, r=255, g=255, b=255, a=255) SetEntData(index, offset + 1, g, 1, true); SetEntData(index, offset + 2, b, 1, true); SetEntData(index, offset + 3, a, 1, true); +} + +/** + * Gets an entity's gravity. + * + * @param index Entity index + * @return Entity's m_flGravity value + */ +stock Float:GetEntityGravity(index) +{ + new offset = FindDataMapOffs(index, "m_flGravity"); + return GetEntDataFloat(index, offset); +} + +/** + * Sets an entity's gravity. + * + * @param index Entity index + * @param amount Gravity to set. Default = 800 + * @noreturn + */ +stock SetEntityGravity(index, Float:amount) +{ + new offset = FindDataMapOffs(index, "m_flGravity"); + SetEntDataFloat(index, offset, amount, true); +} + +/** + * Sets an entity's health + * + * @param index Entity index + * @param amount Health + * @noreturn + */ +stock SetEntityHealth(index, amount) +{ + SetEntProp(client, Prop_Send, "m_iHealth", health, 1) + SetEntProp(client, Prop_Data, "m_iHealth", health, 1) } \ No newline at end of file From 6ab87ef82117d9b0dfe7d91d19db62f0aba2d096 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Mon, 24 Dec 2007 00:45:28 +0000 Subject: [PATCH 142/263] Added sm_blind, sm_drug, sm_gravity, sm_noclip Fixed the duration of sm_freeze when used from the menu --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401827 --- plugins/basefuncommands.sp | 178 ++++++++++++-- plugins/basefuncommands/blind.sp | 279 +++++++++++++++++++++ plugins/basefuncommands/drug.sp | 296 +++++++++++++++++++++++ plugins/basefuncommands/gravity.sp | 252 +++++++++++++++++++ plugins/basefuncommands/ice.sp | 2 +- plugins/basefuncommands/noclip.sp | 175 ++++++++++++++ translations/basefuncommands.phrases.txt | 102 +++++++- 7 files changed, 1255 insertions(+), 29 deletions(-) create mode 100644 plugins/basefuncommands/blind.sp create mode 100644 plugins/basefuncommands/drug.sp create mode 100644 plugins/basefuncommands/gravity.sp create mode 100644 plugins/basefuncommands/noclip.sp diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index f15006bb..519a6408 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -47,6 +47,23 @@ public Plugin:myinfo = url = "http://www.sourcemod.net/" }; +// ------------------------------------------------------------------------------- +// Set any of these to 0 and recompile to completely disable those commands +// ------------------------------------------------------------------------------- +#define BEACON 1 +#define TIMEBOMB 1 +#define FIRE 1 +#define ICE 1 +#define GRAVITY 1 +#define BLIND 1 +#define NOCLIP 1 +#define DRUG 1 +#define TELEPORT 1 +#define HEALTH 1 +#define COLORS 1 +#define CASH 1 +// ------------------------------------------------------------------------------- + new Handle:hTopMenu = INVALID_HANDLE; // Sounds @@ -71,34 +88,77 @@ new blueColor[4] = {75, 75, 255, 255}; new whiteColor[4] = {255, 255, 255, 255}; new greyColor[4] = {128, 128, 128, 255}; -// Used for some trace rays. -/* -new g_FilteredEntity = -1; -public bool:TR_Filter_Client(ent, contentMask) -{ - return (ent == g_FilteredEntity) ? false : true; -} -*/ +// UserMessageId for Fade. +new UserMsg:g_FadeUserMsgId; // Include various commands and supporting functions +#if BEACON #include "basefuncommands/beacon.sp" +#endif +#if TIMEBOMB #include "basefuncommands/timebomb.sp" +#endif +#if FIRE #include "basefuncommands/fire.sp" +#endif +#if ICE #include "basefuncommands/ice.sp" +#endif +#if GRAVITY +#include "basefuncommands/gravity.sp" +#endif +#if BLIND +#include "basefuncommands/blind.sp" +#endif +#if NOCLIP +#include "basefuncommands/noclip.sp" +#endif +#if DRUG +#include "basefuncommands/drug.sp" +#endif public OnPluginStart() { LoadTranslations("common.phrases"); LoadTranslations("basefuncommands.phrases"); + g_FadeUserMsgId = GetUserMessageId("Fade"); + RegAdminCmd("sm_play", Command_Play, ADMFLAG_GENERIC, "sm_play <#userid|name> <filename>"); HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); + #if BEACON SetupBeacon(); // sm_beacon + #endif + + #if TIMEBOMB SetupTimeBomb(); // sm_timebomb + #endif + + #if FIRE SetupFire(); // sm_burn and sm_firebomb + #endif + + #if ICE SetupIce(); // sm_freeze and sm_freezebomb + #endif + + #if GRAVITY + SetupGravity(); // sm_gravity + #endif + + #if BLIND + SetupBlind(); // sm_blind + #endif + + #if NOCLIP + SetupNoClip(); // sm_noclip + #endif + + #if DRUG + SetupDrugs(); // sm_drug + #endif AutoExecConfig(true, "funcommands"); @@ -127,18 +187,40 @@ public OnMapStart() public OnMapEnd() { + #if BEACON KillAllBeacons(); + #endif + #if TIMEBOMB KillAllTimeBombs(); + #endif + #if FIRE KillAllFireBombs(); + #endif + #if ICE KillAllFreezes(); + #endif + #if DRUG + KillAllDrugs(); + #endif } public Action:Event_RoundEnd(Handle:event,const String:name[],bool:dontBroadcast) { + #if BEACON KillAllBeacons(); + #endif + #if TIMEBOMB KillAllTimeBombs(); + #endif + #if FIRE KillAllFireBombs(); + #endif + #if ICE KillAllFreezes(); + #endif + #if DRUG + KillAllDrugs(); + #endif return Plugin_Handled; } @@ -159,6 +241,7 @@ public OnAdminMenuReady(Handle:topmenu) if (player_commands != INVALID_TOPMENUOBJECT) { + #if BEACON AddToTopMenu(hTopMenu, "sm_beacon", TopMenuObject_Item, @@ -166,7 +249,19 @@ public OnAdminMenuReady(Handle:topmenu) player_commands, "sm_beacon", ADMFLAG_SLAY); + #endif + #if TIMEBOMB + AddToTopMenu(hTopMenu, + "sm_timebomb", + TopMenuObject_Item, + AdminMenu_TimeBomb, + player_commands, + "sm_timebomb", + ADMFLAG_SLAY); + #endif + + #if FIRE AddToTopMenu(hTopMenu, "sm_burn", TopMenuObject_Item, @@ -175,22 +270,6 @@ public OnAdminMenuReady(Handle:topmenu) "sm_burn", ADMFLAG_SLAY); - AddToTopMenu(hTopMenu, - "sm_freeze", - TopMenuObject_Item, - AdminMenu_Freeze, - player_commands, - "sm_freeze", - ADMFLAG_SLAY); - - AddToTopMenu(hTopMenu, - "sm_timebomb", - TopMenuObject_Item, - AdminMenu_TimeBomb, - player_commands, - "sm_timebomb", - ADMFLAG_SLAY); - AddToTopMenu(hTopMenu, "sm_firebomb", TopMenuObject_Item, @@ -198,6 +277,16 @@ public OnAdminMenuReady(Handle:topmenu) player_commands, "sm_firebomb", ADMFLAG_SLAY); + #endif + + #if ICE + AddToTopMenu(hTopMenu, + "sm_freeze", + TopMenuObject_Item, + AdminMenu_Freeze, + player_commands, + "sm_freeze", + ADMFLAG_SLAY); AddToTopMenu(hTopMenu, "sm_freezebomb", @@ -206,6 +295,47 @@ public OnAdminMenuReady(Handle:topmenu) player_commands, "sm_freezebomb", ADMFLAG_SLAY); + #endif + + #if GRAVITY + AddToTopMenu(hTopMenu, + "sm_gravity", + TopMenuObject_Item, + AdminMenu_Gravity, + player_commands, + "sm_gravity", + ADMFLAG_SLAY); + #endif + + #if BLIND + AddToTopMenu(hTopMenu, + "sm_blind", + TopMenuObject_Item, + AdminMenu_Blind, + player_commands, + "sm_blind", + ADMFLAG_SLAY); + #endif + + #if NOCLIP + AddToTopMenu(hTopMenu, + "sm_noclip", + TopMenuObject_Item, + AdminMenu_NoClip, + player_commands, + "sm_noclip", + ADMFLAG_SLAY); + #endif + + #if DRUG + AddToTopMenu(hTopMenu, + "sm_drug", + TopMenuObject_Item, + AdminMenu_Drug, + player_commands, + "sm_drug", + ADMFLAG_SLAY); + #endif } } diff --git a/plugins/basefuncommands/blind.sp b/plugins/basefuncommands/blind.sp new file mode 100644 index 00000000..3f90aa06 --- /dev/null +++ b/plugins/basefuncommands/blind.sp @@ -0,0 +1,279 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides blind functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new g_BlindTarget[MAXPLAYERS+1]; + +SetupBlind() +{ + RegAdminCmd("sm_blind", Command_Blind, ADMFLAG_SLAY, "sm_blind <#userid|name> [amount] - Leave amount off to reset."); +} + +PerformBlind(client, target, amount) +{ + new targets[2]; + targets[0] = target; + + new Handle:message = StartMessageEx(g_FadeUserMsgId, targets, 1); + BfWriteShort(message, 1536); + BfWriteShort(message, 1536); + + if (amount == 0) + { + BfWriteShort(message, (0x0001 | 0x0010)); + } + else + { + BfWriteShort(message, (0x0002 | 0x0008)); + } + + BfWriteByte(message, 0); + BfWriteByte(message, 0); + BfWriteByte(message, 0); + BfWriteByte(message, amount); + + EndMessage(); + + LogAction(client, target, "\"%L\" set blind on \"%L\", amount %d.", client, target, amount); +} + +public AdminMenu_Blind(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Blind player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayBlindMenu(param); + } + else if (action == TopMenuAction_DrawOption) + { + // Disable if we could not find the user message id for Fade. + buffer[0] = ((g_FadeUserMsgId == INVALID_MESSAGE_ID) ? ITEMDRAW_IGNORE : ITEMDRAW_DEFAULT); + } +} + +DisplayBlindMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Blind); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Blind player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayAmountMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Amount); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Blind amount", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddMenuItem(menu, "255", "Fully blind"); + AddMenuItem(menu, "240", "Half blind"); + AddMenuItem(menu, "0", "No blind"); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Blind(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + g_BlindTarget[param1] = userid; + DisplayAmountMenu(param1); + return; // Return, because we went to a new menu and don't want the re-draw to occur. + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayBlindMenu(param1); + } + } + + return; +} + +public MenuHandler_Amount(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new amount, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + amount = StringToInt(info); + + if ((target = GetClientOfUserId(g_BlindTarget[param1])) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformBlind(param1, target, amount); + ShowActivity2(param1, "[SM] ", "%t", "Set blind on target", "_s", name, amount); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayBlindMenu(param1); + } + } +} + + +public Action:Command_Blind(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_blind <#userid|name> [amount]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new amount = 0; + if (args > 1) + { + decl String:arg2[20]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (StringToIntEx(arg2, amount) == 0) + { + ReplyToCommand(client, "[SM] %t", "Invalid Amount"); + return Plugin_Handled; + } + + if (amount < 0) + { + amount = 0; + } + + if (amount > 255) + { + amount = 255; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformBlind(client, target_list[i], amount); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Set blind on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Set blind on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/basefuncommands/drug.sp b/plugins/basefuncommands/drug.sp new file mode 100644 index 00000000..59da6664 --- /dev/null +++ b/plugins/basefuncommands/drug.sp @@ -0,0 +1,296 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides drug functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new Handle:g_DrugTimers[MAXPLAYERS+1]; +new Float:g_DrugAngles[20] = {0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 20.0, 15.0, 10.0, 5.0, 0.0, -5.0, -10.0, -15.0, -20.0, -25.0, -20.0, -15.0, -10.0, -5.0}; + +SetupDrugs() +{ + RegAdminCmd("sm_drug", Command_Drug, ADMFLAG_SLAY, "sm_drug <#userid|name> [0/1]"); +} + +CreateDrug(client) +{ + g_DrugTimers[client] = CreateTimer(1.0, Timer_Drug, client, TIMER_REPEAT); +} + +KillDrug(client) +{ + KillTimer(g_DrugTimers[client]); + g_DrugTimers[client] = INVALID_HANDLE; + + new Float:pos[3]; + GetClientAbsOrigin(client, pos); + new Float:angs[3]; + GetClientEyeAngles(client, angs); + + angs[2] = 0.0; + + TeleportEntity(client, pos, angs, NULL_VECTOR); + + new clients[2]; + clients[0] = client; + + new Handle:message = StartMessageEx(g_FadeUserMsgId, clients, 1); + BfWriteShort(message, 1536); + BfWriteShort(message, 1536); + BfWriteShort(message, (0x0001 | 0x0010)); + BfWriteByte(message, 0); + BfWriteByte(message, 0); + BfWriteByte(message, 0); + BfWriteByte(message, 0); + EndMessage(); +} + +KillAllDrugs() +{ + new maxclients = GetMaxClients(); + for (new i = 1; i <= maxclients; i++) + { + if (g_DrugTimers[i] != INVALID_HANDLE) + { + KillDrug(i); + } + } +} + +PerformDrug(client, target, toggle) +{ + switch (toggle) + { + case (2): + { + if (g_DrugTimers[target] == INVALID_HANDLE) + { + CreateDrug(target); + LogAction(client, target, "\"%L\" drugged \"%L\"", client, target); + } + else + { + KillDrug(target); + LogAction(client, target, "\"%L\" undrugged \"%L\"", client, target); + } + } + + case (1): + { + if (g_DrugTimers[target] == INVALID_HANDLE) + { + CreateDrug(target); + LogAction(client, target, "\"%L\" drugged \"%L\"", client, target); + } + } + + case (0): + { + if (g_DrugTimers[target] != INVALID_HANDLE) + { + KillDrug(target); + LogAction(client, target, "\"%L\" undrugged \"%L\"", client, target); + } + } + } +} + +public Action:Timer_Drug(Handle:timer, any:client) +{ + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + { + KillDrug(client); + + return Plugin_Handled; + } + + new Float:pos[3]; + GetClientAbsOrigin(client, pos); + + new Float:angs[3]; + GetClientEyeAngles(client, angs); + + angs[2] = g_DrugAngles[GetRandomInt(0,100) % 20]; + + TeleportEntity(client, pos, angs, NULL_VECTOR); + + new clients[2]; + clients[0] = client; + + new Handle:message = StartMessageEx(g_FadeUserMsgId, clients, 1); + BfWriteShort(message, 255); + BfWriteShort(message, 255); + BfWriteShort(message, (0x0002)); + BfWriteByte(message, GetRandomInt(0,255)); + BfWriteByte(message, GetRandomInt(0,255)); + BfWriteByte(message, GetRandomInt(0,255)); + BfWriteByte(message, 128); + + EndMessage(); + + return Plugin_Handled; +} + +public AdminMenu_Drug(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Drug player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayDrugMenu(param); + } +} + +DisplayDrugMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Drug); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Drug player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Drug(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformDrug(param1, target, 2); + ShowActivity2(param1, "[SM] ", "%t", "Toggled drug on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayDrugMenu(param1); + } + } +} + +public Action:Command_Drug(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_drug <#userid|name> [0/1]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new toggle = 2; + if (args > 1) + { + decl String:arg2[2]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (arg2[0]) + { + toggle = 1; + } + else + { + toggle = 0; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformDrug(client, target_list[i], toggle); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled drug on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled drug on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/basefuncommands/gravity.sp b/plugins/basefuncommands/gravity.sp new file mode 100644 index 00000000..dfb7ece8 --- /dev/null +++ b/plugins/basefuncommands/gravity.sp @@ -0,0 +1,252 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides gravity functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +new g_GravityTarget[MAXPLAYERS+1]; + +SetupGravity() +{ + RegAdminCmd("sm_gravity", Command_Gravity, ADMFLAG_SLAY, "sm_gravity <#userid|name> [amount] - Leave amount off to reset. Amount is 0.0 through 5.0"); +} + +PerformGravity(client, target, Float:amount) +{ + new offset = FindDataMapOffs(client, "m_flGravity"); + new Float:temp = GetEntDataFloat(client, offset); + PrintToChatAll("Gravity check %f", temp); + + SetEntityGravity(target, amount); + LogAction(client, target, "\"%L\" set gravity on \"%L\" to %d.", client, target, amount); +} + +public AdminMenu_Gravity(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Gravity player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayGravityMenu(param); + } +} + +DisplayGravityMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Gravity); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Gravity player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayGravityAmountMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_GravityAmount); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Gravity amount", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddMenuItem(menu, "4.0", "Gravity Very High"); + AddMenuItem(menu, "2.0", "Gravity High"); + AddMenuItem(menu, "1.0", "Gravity Normal"); + AddMenuItem(menu, "0.5", "Gravity Low"); + AddMenuItem(menu, "0.1", "Gravity Very Low"); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Gravity(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + g_GravityTarget[param1] = userid; + DisplayGravityAmountMenu(param1); + return; // Return, because we went to a new menu and don't want the re-draw to occur. + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayGravityMenu(param1); + } + } + + return; +} + +public MenuHandler_GravityAmount(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new Float:amount, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + amount = StringToFloat(info); + + if ((target = GetClientOfUserId(g_GravityTarget[param1])) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformGravity(param1, target, amount); + ShowActivity2(param1, "[SM] ", "%t", "Set gravity on target", "_s", name, amount); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayGravityMenu(param1); + } + } +} + +public Action:Command_Gravity(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_gravity <#userid|name> [amount]"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + new Float:amount = 1.0; + if (args > 1) + { + decl String:arg2[20]; + GetCmdArg(2, arg2, sizeof(arg2)); + if (StringToFloatEx(arg2, amount) == 0) + { + ReplyToCommand(client, "[SM] %t", "Invalid Amount"); + return Plugin_Handled; + } + + if (amount < 0.0) + { + amount = 0.0; + } + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformGravity(client, target_list[i], amount); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Set gravity on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Set gravity on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp index 2066d4a6..976742af 100644 --- a/plugins/basefuncommands/ice.sp +++ b/plugins/basefuncommands/ice.sp @@ -374,7 +374,7 @@ public MenuHandler_Freeze(Handle:menu, MenuAction:action, param1, param2) new String:name[32]; GetClientName(target, name, sizeof(name)); - PerformFreeze(param1, target, 2); + PerformFreeze(param1, target, GetConVarInt(g_FreezeDuration)); ShowActivity2(param1, "[SM] ", "%t", "Froze target", "_s", name); } diff --git a/plugins/basefuncommands/noclip.sp b/plugins/basefuncommands/noclip.sp new file mode 100644 index 00000000..22a074af --- /dev/null +++ b/plugins/basefuncommands/noclip.sp @@ -0,0 +1,175 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Basefuncommands Plugin + * Provides noclip functionality + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +SetupNoClip() +{ + RegAdminCmd("sm_noclip", Command_NoClip, ADMFLAG_SLAY|ADMFLAG_CHEATS, "sm_noclip <#userid|name>"); +} + +PerformNoClip(client, target) +{ + new movetype = GetEntityMovetype(target); + PrintToChatAll("movetype was %d", movetype); + if (movetype != MOVETYPE_NOCLIP) + { + SetEntityMovetype(target, MOVETYPE_NOCLIP); + } + else + { + SetEntityMovetype(target, MOVETYPE_WALK); + } + + LogAction(client, target, "\"%L\" toggled noclip on \"%L\"", client, target); +} + +public AdminMenu_NoClip(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "NoClip player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayNoClipMenu(param); + } +} + +DisplayNoClipMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_NoClip); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "NoClip player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_NoClip(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + new String:name[32]; + GetClientName(target, name, sizeof(name)); + + PerformNoClip(param1, target); + ShowActivity2(param1, "[SM] ", "%t", "Toggled noclip on target", "_s", name); + } + + /* Re-draw the menu if they're still valid */ + if (IsClientInGame(param1) && !IsClientInKickQueue(param1)) + { + DisplayNoClipMenu(param1); + } + } +} + +public Action:Command_NoClip(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_noclip <#userid|name>"); + return Plugin_Handled; + } + + decl String:arg[65]; + GetCmdArg(1, arg, sizeof(arg)); + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for (new i = 0; i < target_count; i++) + { + PerformNoClip(client, target_list[i]); + } + + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Toggled noclip on target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Toggled noclip on target", "_s", target_name); + } + + return Plugin_Handled; +} diff --git a/translations/basefuncommands.phrases.txt b/translations/basefuncommands.phrases.txt index e14a9e8e..1d132c9e 100644 --- a/translations/basefuncommands.phrases.txt +++ b/translations/basefuncommands.phrases.txt @@ -34,7 +34,77 @@ "Beacon player" { "en" "Beacon player" - } + } + + "NoClip player" + { + "en" "NoClip player" + } + + "Blind player" + { + "en" "Blind player" + } + + "Drug player" + { + "en" "Drug player" + } + + "Gravity player" + { + "en" "Gravity player" + } + + "Blind amount" + { + "en" "How blind?" + } + + "Fully blind" + { + "en" "Fully blind" + } + + "Half blind" + { + "en" "Half blind" + } + + "No blind" + { + "en" "No blind" + } + + "Gravity amount" + { + "en" "Gravity?" + } + + "Gravity Very High" + { + "en" "Gravity Very High" + } + + "Gravity High" + { + "en" "Gravity High" + } + + "Gravity Normal" + { + "en" "Gravity Normal" + } + + "Gravity Low" + { + "en" "Gravity Low" + } + + "Gravity Very Low" + { + "en" "Gravity Very Low" + } "Set target on fire" { @@ -45,7 +115,7 @@ "Toggled FireBomb on target" { "#format" "{1:t}" - "en" "set a firebomb on {1}." + "en" "toggled firebomb on {1}." } "Froze target" @@ -57,7 +127,7 @@ "Toggled FreezeBomb on target" { "#format" "{1:t}" - "en" "set a freezebomb on {1}." + "en" "toggled freezebomb on {1}." } "Toggled beacon on target" @@ -69,7 +139,31 @@ "Toggled TimeBomb on target" { "#format" "{1:t}" - "en" "set a timebomb on {1}." + "en" "toggled timebomb on {1}." + } + + "Toggled noclip on target" + { + "#format" "{1:t}" + "en" "toggled noclip on {1}." + } + + "Toggled drug on target" + { + "#format" "{1:t}" + "en" "toggled drugs on {1}." + } + + "Set blind on target" + { + "#format" "{1:t}" + "en" "used blind on {1}." + } + + "Set gravity on target" + { + "#format" "{1:t}" + "en" "set {1}'s gravity." } "Till Explodes" From ef7fed49fa7aa70f99d4924965d23cbca362f704 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Mon, 24 Dec 2007 20:41:33 +0000 Subject: [PATCH 143/263] Removed '#include <core>' --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401828 --- plugins/include/cstrike.inc | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/include/cstrike.inc b/plugins/include/cstrike.inc index b0e867cd..7f8ae436 100644 --- a/plugins/include/cstrike.inc +++ b/plugins/include/cstrike.inc @@ -35,8 +35,6 @@ #endif #define _cstrike_included -#include <core> - #define CS_TEAM_NONE 0 /**< No team yet. */ #define CS_TEAM_SPECTATOR 1 /**< Spectators. */ #define CS_TEAM_T 2 /**< Terrorists. */ From d0fac2def94e7ca3c44467c82627e742e837be33 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Fri, 28 Dec 2007 07:10:09 +0000 Subject: [PATCH 144/263] Added a new entity stock function GetClientButtons() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401832 --- plugins/include/entity_prop_stocks.inc | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index 4e645b26..20cf2f94 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -51,6 +51,32 @@ enum MOVETYPE_CUSTOM, /** Allows the entity to describe its own physics */ }; +#define IN_ATTACK (1 << 0) +#define IN_JUMP (1 << 1) +#define IN_DUCK (1 << 2) +#define IN_FORWARD (1 << 3) +#define IN_BACK (1 << 4) +#define IN_USE (1 << 5) +#define IN_CANCEL (1 << 6) +#define IN_LEFT (1 << 7) +#define IN_RIGHT (1 << 8) +#define IN_MOVELEFT (1 << 9) +#define IN_MOVERIGHT (1 << 10) +#define IN_ATTACK2 (1 << 11) +#define IN_RUN (1 << 12) +#define IN_RELOAD (1 << 13) +#define IN_ALT1 (1 << 14) +#define IN_ALT2 (1 << 15) +#define IN_SCORE (1 << 16) // Used by client.dll for when scoreboard is held down +#define IN_SPEED (1 << 17) // Player is holding the speed key +#define IN_WALK (1 << 18) // Player holding walk key +#define IN_ZOOM (1 << 19) // Zoom key for HUD zoom +#define IN_WEAPON1 (1 << 20) // weapon defines these bits +#define IN_WEAPON2 (1 << 21) // weapon defines these bits +#define IN_BULLRUSH (1 << 22) +#define IN_GRENADE1 (1 << 23) // grenade 1 +#define IN_GRENADE2 (1 << 24) // grenade 2 + /** * Gets an entity's movetype. * @@ -131,4 +157,16 @@ stock SetEntityHealth(index, amount) { SetEntProp(client, Prop_Send, "m_iHealth", health, 1) SetEntProp(client, Prop_Data, "m_iHealth", health, 1) +} + +/** + * Get's a users current pressed buttons + * + * @param client Client index + * @return Bitsum of buttons + */ +stock GetClientButtons(client) +{ + new offset = FindDataMapOffs(client, "m_nButtons"); + return GetEntData(client, offset, 4); } \ No newline at end of file From 9970ad59ac5b233f23967259270f6de8d76f38c9 Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Fri, 28 Dec 2007 16:46:42 +0000 Subject: [PATCH 145/263] A few runtime fixes for basefuncommands --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401833 --- plugins/basefuncommands/drug.sp | 29 +++++++++++++++---- plugins/basefuncommands/fire.sp | 5 ++-- plugins/basefuncommands/ice.sp | 44 +++++++++++++++++++++-------- plugins/basefuncommands/timebomb.sp | 5 ++-- 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/plugins/basefuncommands/drug.sp b/plugins/basefuncommands/drug.sp index 59da6664..f6572dc9 100644 --- a/plugins/basefuncommands/drug.sp +++ b/plugins/basefuncommands/drug.sp @@ -46,8 +46,7 @@ CreateDrug(client) KillDrug(client) { - KillTimer(g_DrugTimers[client]); - g_DrugTimers[client] = INVALID_HANDLE; + KillDrugTimer(client); new Float:pos[3]; GetClientAbsOrigin(client, pos); @@ -72,6 +71,12 @@ KillDrug(client) EndMessage(); } +KillDrugTimer(client) +{ + KillTimer(g_DrugTimers[client]); + g_DrugTimers[client] = INVALID_HANDLE; +} + KillAllDrugs() { new maxclients = GetMaxClients(); @@ -79,7 +84,14 @@ KillAllDrugs() { if (g_DrugTimers[i] != INVALID_HANDLE) { - KillDrug(i); + if(IsClientInGame(i)) + { + KillDrug(i); + } + else + { + KillDrugTimer(i); + } } } } @@ -124,13 +136,20 @@ PerformDrug(client, target, toggle) public Action:Timer_Drug(Handle:timer, any:client) { - if (!IsClientInGame(client) || !IsPlayerAlive(client)) + if (!IsClientInGame(client)) { - KillDrug(client); + KillDrugTimer(client); return Plugin_Handled; } + if (!IsPlayerAlive(client)) + { + KillDrug(client); + + return Plugin_Handled; + } + new Float:pos[3]; GetClientAbsOrigin(client, pos); diff --git a/plugins/basefuncommands/fire.sp b/plugins/basefuncommands/fire.sp index b05c0220..90e96c3c 100644 --- a/plugins/basefuncommands/fire.sp +++ b/plugins/basefuncommands/fire.sp @@ -60,8 +60,6 @@ KillFireBomb(client) { KillTimer(g_FireBombTimers[client]); g_FireBombTimers[client] = INVALID_HANDLE; - - SetEntityRenderColor(client, 255, 255, 255, 255); } KillAllFireBombs() @@ -96,6 +94,7 @@ PerformFireBomb(client, target, toggle) else { KillFireBomb(target); + SetEntityRenderColor(client, 255, 255, 255, 255); LogAction(client, target, "\"%L\" removed a FireBomb on \"%L\"", client, target); } } @@ -114,6 +113,7 @@ PerformFireBomb(client, target, toggle) if (g_FireBombTimers[target] != INVALID_HANDLE) { KillFireBomb(target); + SetEntityRenderColor(client, 255, 255, 255, 255); LogAction(client, target, "\"%L\" removed a FireBomb on \"%L\"", client, target); } } @@ -186,6 +186,7 @@ public Action:Timer_FireBomb(Handle:timer, any:client) IgniteEntity(client, GetConVarFloat(g_BurnDuration)); KillFireBomb(client); + SetEntityRenderColor(client, 255, 255, 255, 255); if (GetConVarInt(g_FireBombMode) > 0) { diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp index 976742af..11afbcbb 100644 --- a/plugins/basefuncommands/ice.sp +++ b/plugins/basefuncommands/ice.sp @@ -71,6 +71,21 @@ FreezeClient(client, time) } UnfreezeClient(client) +{ + KillFreezeTimer(client); + + new Float:vec[3]; + GetClientAbsOrigin(client, vec); + vec[2] += 10; + + GetClientEyePosition(client, vec); + EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN); + + SetEntityMovetype(client, MOVETYPE_WALK); + SetEntityRenderColor(client, 255, 255, 255, 255); +} + +KillFreezeTimer(client) { KillTimer(g_FreezeTimers[client]); g_FreezeTimers[client] = INVALID_HANDLE; @@ -82,7 +97,6 @@ CreateFreezeBomb(client) g_FreezeBombTracker[client] = GetConVarInt(g_FreezeBombTicks); } - KillFreezeBomb(client) { KillTimer(g_FreezeBombTimers[client]); @@ -98,7 +112,14 @@ KillAllFreezes() { if (g_FreezeTimers[i] != INVALID_HANDLE) { - UnfreezeClient(i); + if(IsClientInGame(i)) + { + UnfreezeClient(i); + } + else + { + KillFreezeTimer(i); + } } if (g_FreezeBombTimers[i] != INVALID_HANDLE) @@ -154,13 +175,20 @@ PerformFreezeBomb(client, target, toggle) public Action:Timer_Freeze(Handle:timer, any:client) { - if (!IsClientInGame(client) || !IsPlayerAlive(client)) + if (!IsClientInGame(client)) { - KillFreezeBomb(client); + KillFreezeTimer(client); return Plugin_Handled; } + if (!IsPlayerAlive(client)) + { + UnfreezeClient(client); + + return Plugin_Handled; + } + g_FreezeTracker[client]--; SetEntityMovetype(client, MOVETYPE_NONE); @@ -176,14 +204,8 @@ public Action:Timer_Freeze(Handle:timer, any:client) if (g_FreezeTracker[client] == 0) { UnfreezeClient(client); - - GetClientEyePosition(client, vec); - EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN); - - SetEntityMovetype(client, MOVETYPE_WALK); - SetEntityRenderColor(client, 255, 255, 255, 255); } - + return Plugin_Handled; } diff --git a/plugins/basefuncommands/timebomb.sp b/plugins/basefuncommands/timebomb.sp index b808b4f5..be6731e0 100644 --- a/plugins/basefuncommands/timebomb.sp +++ b/plugins/basefuncommands/timebomb.sp @@ -57,8 +57,6 @@ KillTimeBomb(client) { KillTimer(g_TimeBombTimers[client]); g_TimeBombTimers[client] = INVALID_HANDLE; - - SetEntityRenderColor(client, 255, 255, 255, 255); } KillAllTimeBombs() @@ -87,6 +85,7 @@ PerformTimeBomb(client, target, toggle) else { KillTimeBomb(target); + SetEntityRenderColor(client, 255, 255, 255, 255); LogAction(client, target, "\"%L\" removed a TimeBomb on \"%L\"", client, target); } } @@ -105,6 +104,7 @@ PerformTimeBomb(client, target, toggle) if (g_TimeBombTimers[target] != INVALID_HANDLE) { KillTimeBomb(target); + SetEntityRenderColor(client, 255, 255, 255, 255); LogAction(client, target, "\"%L\" removed a TimeBomb on \"%L\"", client, target); } } @@ -163,6 +163,7 @@ public Action:Timer_TimeBomb(Handle:timer, any:client) ForcePlayerSuicide(client); KillTimeBomb(client); + SetEntityRenderColor(client, 255, 255, 255, 255); if (GetConVarInt(g_TimeBombMode) > 0) { From d37e02c65cb8768bd16934b5796231585b9fb92c Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Mon, 31 Dec 2007 01:47:33 +0000 Subject: [PATCH 146/263] fixed amb1325 - SetEntityHealth() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401834 --- plugins/include/entity_prop_stocks.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index 20cf2f94..d6690ebb 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -155,8 +155,8 @@ stock SetEntityGravity(index, Float:amount) */ stock SetEntityHealth(index, amount) { - SetEntProp(client, Prop_Send, "m_iHealth", health, 1) - SetEntProp(client, Prop_Data, "m_iHealth", health, 1) + SetEntProp(client, Prop_Send, "m_iHealth", amount, 4) + SetEntProp(client, Prop_Data, "m_iHealth", amount, 4) } /** From 4e1fb49096026238036464b72aee7127eda7bf70 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 3 Jan 2008 06:11:26 +0000 Subject: [PATCH 147/263] added amb1336 - GetTrieSize() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401835 --- core/smn_adt_trie.cpp | 19 +++++++++++++++++++ plugins/include/adt_trie.inc | 12 ++++++++++++ public/sm_trie_tpl.h | 19 +++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/core/smn_adt_trie.cpp b/core/smn_adt_trie.cpp index 79fc6585..2aab9833 100644 --- a/core/smn_adt_trie.cpp +++ b/core/smn_adt_trie.cpp @@ -498,6 +498,24 @@ static cell_t GetTrieString(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t GetTrieSize(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl; + CellTrie *pTrie; + HandleError err; + HandleSecurity sec = HandleSecurity(pContext->GetIdentity(), g_pCoreIdent); + + hndl = params[1]; + + if ((err = g_HandleSys.ReadHandle(hndl, htCellTrie, &sec, (void **)&pTrie)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", hndl, err); + } + + return pTrie->trie.size(); +} + REGISTER_NATIVES(trieNatives) { {"ClearTrie", ClearTrie}, @@ -509,5 +527,6 @@ REGISTER_NATIVES(trieNatives) {"SetTrieArray", SetTrieArray}, {"SetTrieString", SetTrieString}, {"SetTrieValue", SetTrieValue}, + {"GetTrieSize", GetTrieSize}, {NULL, NULL}, }; diff --git a/plugins/include/adt_trie.inc b/plugins/include/adt_trie.inc index 303b1949..b777d41d 100644 --- a/plugins/include/adt_trie.inc +++ b/plugins/include/adt_trie.inc @@ -144,3 +144,15 @@ native RemoveFromTrie(Handle:trie, const String:key[]); * @error Invalid Handle. */ native ClearTrie(Handle:trie); + +/** + * Retrieves the number of elements in a trie. + * + * Note that trie items are not enumerable/iteratable. If you need to + * retrieve the elements in a trie, store its keys in an ADT Array. + * + * @param trie Trie Handle. + * @return Number of elements in the trie. + * @error Invalid Handle. + */ +native GetTrieSize(Handle:trie); diff --git a/public/sm_trie_tpl.h b/public/sm_trie_tpl.h index 5d9b0b59..5018c8a2 100644 --- a/public/sm_trie_tpl.h +++ b/public/sm_trie_tpl.h @@ -83,6 +83,8 @@ public: node->value.~K(); node->valset = false; + m_numElements--; + return true; } @@ -164,6 +166,8 @@ public: m_empty->valset = true; new (&m_empty->value) K(obj); + m_numElements++; + return true; } @@ -204,6 +208,8 @@ public: node->valset = true; new (&node->value) K(obj); + m_numElements++; + return true; } else if (node->parent != lastidx) @@ -403,6 +409,8 @@ public: node->valset = true; new (&node->value) K(obj); + m_numElements++; + return true; } else @@ -421,6 +429,7 @@ public: { node->valset = true; new (&node->value) K(obj); + m_numElements++; return true; } /* Same string. We can't insert. */ @@ -605,6 +614,8 @@ public: } } + m_numElements++; + /* Phew! */ return true; } @@ -631,6 +642,7 @@ public: { node->valset = true; new (&node->value) K(obj); + m_numElements++; return true; } @@ -644,6 +656,7 @@ public: m_baseSize = 256; m_stSize = 256; m_empty = NULL; + m_numElements = 0; internal_clear(); } @@ -775,6 +788,7 @@ private: void internal_clear() { m_tail = 0; + m_numElements = 0; memset(m_base, 0, sizeof(KTrieNode) * (m_baseSize + 1)); memset(m_stringtab, 0, sizeof(char) * m_stSize); @@ -895,6 +909,10 @@ public: + m_stSize + sizeof(KTrieNode); } + size_t size() + { + return m_numElements; + } private: KTrieNode *m_base; /* Base array for the sparse tables */ KTrieNode *m_empty; /* Special case for empty strings */ @@ -902,6 +920,7 @@ private: unsigned int m_baseSize; /* Size of the base array, in members */ unsigned int m_stSize; /* Size of the string table, in bytes */ unsigned int m_tail; /* Current unused offset into the string table */ + size_t m_numElements; /* Number of elements in use */ }; /** From 9b6c6c1fcd447011166e13564f839db131028542 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 3 Jan 2008 18:46:01 +0000 Subject: [PATCH 148/263] added amb1335 - zombie_master sdktools support --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401836 --- gamedata/sdktools.games.txt | 126 ++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 23f15a42..8379aa63 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -44,6 +44,7 @@ "game" "empires" "game" "synergy" "game" "hidden" + "game" "zombie_master" } "Offsets" @@ -156,6 +157,7 @@ "game" "empires" "game" "synergy" "game" "hidden" + "game" "zombie_master" } "Offsets" @@ -1426,5 +1428,129 @@ } } } + + /* Zombie Master 1.1.3 */ + "zombie_master" + { + "Offsets" + { + /* CBasePlayer */ + "GiveNamedItem" + { + "windows" "329" + "linux" "330" + } + "RemovePlayerItem" + { + "windows" "226" + "linux" "227" + } + "Weapon_GetSlot" + { + "windows" "224" + "linux" "225" + } + "Ignite" + { + "windows" "188" + "linux" "189" + } + "Extinguish" + { + "windows" "189" + "linux" "190" + } + "Teleport" + { + "windows" "98" + "linux" "99" + } + "CommitSuicide" + { + "windows" "357" + "linux" "358" + } + "GetVelocity" + { + "windows" "126" + "linux" "127" + } + "EyeAngles" + { + "windows" "118" + "linux" "119" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + "s_pTempEntities" + { + "windows" "30" + } + "g_pGameRules" + { + "windows" "7" + } + } + + "Signatures" + { + "CBaseTempEntity" + { + "library" "server" + "windows" "\x55\x8B\xEC\x51\x89\x4D\xFC\x8B\x45\xFC\xC7\x00\x2A\x2A\x2A\x2A\x8B\x4D\xFC\x8B\x55\x08\x89\x51\x04\x8B\x45\xFC\x8B\x0D\x2A\x2A" + } + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x55\x8B\xEC\x83\xEC\x20\x83\x7D\x08\x00\x0F\x84\x95\x01\x00\x00\xA1\x2A\x2A\x2A\x2A\x50\x8D\x4D\xF0\xE8\x2A\x2A\x2A\x2A\x8D\x4D" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x55\x8B\xEC\x83\xEC\x0C\x83\x7D\x0C\xFF\x74\x39\x8B\x45\x0C\x50\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x11\x8B\x0D\x2A\x2A\x2A\x2A\xFF\x52" + } + "FindEntityByClassname" + { + "library" "server" + "windows" "\x55\x8B\xEC\x83\xEC\x10\x89\x4D\xF4\x83\x7D\x08\x00\x74\x1C\x8B\x45\x08\x8B\x10\x8B\x4D\x08\xFF\x52\x08\x50\x8B\x4D\xF4\xE8\x2A\x2A\x2A\x2A\x8B\x40\x0C\x89\x45\x\xF0\xEB\x0B\x8B\x4D\xF4\xE8\x2A\x2A\x2A\x2A\x89\x45\xF0\x8B\x4D\xF0\x89\x4D\xFC\xEB\x09\x8B\x55\xFC\x8B\x42\x0C\x89\x45\xFC\x83\x7D\xFC\x00\x74\x38\x8B\x4D\xFC\x8B\x11\x89" + "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + "CreateGameRulesObject" + { + "library" "server" + "windows" "\x55\x8B\xEC\x83\xEC\x10\xA1\x2A\x2A\x2A\x2A\x89\x45\xF4\x8B\x4D\xF4\x89\x4D\xF8\x83\x7D\xF8\x00" + } + "g_pGameRules" + { + "library" "server" + "linux" "@g_pGameRules" + } + } + } } From 89ac3a14ba1e0514dee6da89dc7b65a7f6544d5a Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 3 Jan 2008 19:40:55 +0000 Subject: [PATCH 149/263] added amb1341 - OnClientPostAdminFilter --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401837 --- core/PlayerManager.cpp | 6 ++++++ plugins/include/clients.inc | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index dcee273e..302f8603 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -51,6 +51,7 @@ PlayerManager g_Players; bool g_OnMapStarted = false; IForward *PreAdminCheck = NULL; IForward *PostAdminCheck = NULL; +IForward *PostAdminFilter = NULL; const unsigned int *g_NumPlayersToAuth = NULL; int lifestate_offset = -1; List<ICommandTargetProcessor *> target_processors; @@ -130,6 +131,7 @@ void PlayerManager::OnSourceModAllInitialized() PreAdminCheck = g_Forwards.CreateForward("OnClientPreAdminCheck", ET_Event, 1, p1); PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1); + PostAdminFilter = g_Forwards.CreateForward("OnClientPostAdminFilter", ET_Ignore, 1, p1); } void PlayerManager::OnSourceModShutdown() @@ -155,6 +157,7 @@ void PlayerManager::OnSourceModShutdown() g_Forwards.ReleaseForward(PreAdminCheck); g_Forwards.ReleaseForward(PostAdminCheck); + g_Forwards.ReleaseForward(PostAdminFilter); delete [] m_Players; } @@ -1374,6 +1377,9 @@ void CPlayer::NotifyPostAdminChecks() pListener->OnClientPostAdminCheck(m_iIndex); } + PostAdminFilter->PushCell(m_iIndex); + PostAdminFilter->Execute(NULL); + PostAdminCheck->PushCell(m_iIndex); PostAdminCheck->Execute(NULL); } diff --git a/plugins/include/clients.inc b/plugins/include/clients.inc index 69d90587..29d6ac5b 100644 --- a/plugins/include/clients.inc +++ b/plugins/include/clients.inc @@ -136,6 +136,23 @@ forward OnClientAuthorized(client, const String:auth[]); */ forward Action:OnClientPreAdminCheck(client); +/** + * Called directly before OnClientPostAdminCheck() as a method to + * alter administrative permissions before plugins perform final + * post-connect operations. + * + * In general, do not use this function unless you are specifically + * attempting to change access permissions. Use OnClientPostAdminCheck() + * instead if you simply want to perform post-connect authorization + * routines. + * + * See OnClientPostAdminCheck() for more information. + * + * @param client Client index. + * @noreturn + */ +forward OnClientPostAdminFilter(client); + /** * Called once a client is authorized and fully in-game, and * after all post-connection authorizations have been performed. From 4e07200cfb54ace3ce404d7fb6eb88462192bb6c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 4 Jan 2008 16:05:26 +0000 Subject: [PATCH 150/263] - added AddTargetsToMenu2() for using COMMAND_FILTER flags - fixed amb1350 - sm_voteban/menu ban on fake clients would crash - fake clients can no longer be banned and do not appear on ban menus --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401838 --- core/smn_banning.cpp | 5 ++++ plugins/adminmenu.sp | 48 +++++++++++++++++++++++++++--- plugins/basebans/ban.sp | 2 +- plugins/basevotes/voteban.sp | 2 +- plugins/include/adminmenu.inc | 19 +++++++++++- plugins/include/commandfilters.inc | 28 ++++++++--------- 6 files changed, 83 insertions(+), 21 deletions(-) diff --git a/core/smn_banning.cpp b/core/smn_banning.cpp index 2cf5888e..876e31fd 100644 --- a/core/smn_banning.cpp +++ b/core/smn_banning.cpp @@ -256,6 +256,11 @@ static cell_t BanClient(IPluginContext *pContext, const cell_t *params) return pContext->ThrowNativeError("Client index %d is invalid", client); } + if (pPlayer->IsFakeClient()) + { + return pContext->ThrowNativeError("Cannot ban fake client %d", client); + } + pContext->LocalToString(params[4], &ban_reason); pContext->LocalToString(params[5], (char **)&kick_message); pContext->LocalToString(params[6], &ban_cmd); diff --git a/plugins/adminmenu.sp b/plugins/adminmenu.sp index 9d21bc84..8a68b46c 100644 --- a/plugins/adminmenu.sp +++ b/plugins/adminmenu.sp @@ -61,6 +61,7 @@ public bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max) { CreateNative("GetAdminTopMenu", __GetAdminTopMenu); CreateNative("AddTargetsToMenu", __AddTargetsToMenu); + CreateNative("AddTargetsToMenu2", __AddTargetsToMenu2); RegPluginLibrary("adminmenu"); return true; } @@ -181,6 +182,11 @@ public __AddTargetsToMenu(Handle:plugin, numParams) return UTIL_AddTargetsToMenu(GetNativeCell(1), GetNativeCell(2), GetNativeCell(3), alive_only); } +public __AddTargetsToMenu2(Handle:plugin, numParams) +{ + return UTIL_AddTargetsToMenu2(GetNativeCell(1), GetNativeCell(2), GetNativeCell(3)); +} + public Action:Command_DisplayMenu(client, args) { if (client == 0) @@ -194,7 +200,7 @@ public Action:Command_DisplayMenu(client, args) return Plugin_Handled; } -stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool:alive_only) +stock UTIL_AddTargetsToMenu2(Handle:menu, source_client, flags) { new max_clients = GetMaxClients(); decl String:user_id[12]; @@ -210,17 +216,34 @@ stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool: continue; } - if (in_game_only && !IsClientInGame(i)) + PrintToServer("%d, %d, %d", i, flags, IsFakeClient(i)); + + if (((flags & COMMAND_FILTER_NO_BOTS) == COMMAND_FILTER_NO_BOTS) + && IsFakeClient(i)) { continue; } - if (alive_only && !IsPlayerAlive(i)) + if (((flags & COMMAND_FILTER_CONNECTED) != COMMAND_FILTER_CONNECTED) + && !IsClientInGame(i)) { continue; } - if (source_client && !CanUserTarget(source_client, i)) + if (((flags & COMMAND_FILTER_ALIVE) == COMMAND_FILTER_ALIVE) + && !IsPlayerAlive(i)) + { + continue; + } + + if (((flags & COMMAND_FILTER_DEAD) == COMMAND_FILTER_DEAD) + && IsPlayerAlive(i)) + { + continue; + } + + if ((source_client && ((flags & COMMAND_FILTER_NO_IMMUNITY) != COMMAND_FILTER_NO_IMMUNITY)) + && !CanUserTarget(source_client, i)) { continue; } @@ -235,3 +258,20 @@ stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool: return num_clients; } +stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool:alive_only) +{ + new flags = 0; + + if (!in_game_only) + { + flags |= COMMAND_FILTER_CONNECTED; + } + + if (alive_only) + { + flags |= COMMAND_FILTER_ALIVE; + } + + return UTIL_AddTargetsToMenu2(menu, source_client, flags); +} + diff --git a/plugins/basebans/ban.sp b/plugins/basebans/ban.sp index 3ce206be..40c698da 100644 --- a/plugins/basebans/ban.sp +++ b/plugins/basebans/ban.sp @@ -75,7 +75,7 @@ DisplayBanTargetMenu(client) SetMenuTitle(menu, title); SetMenuExitBackButton(menu, true); - AddTargetsToMenu(menu, client, false, false); + AddTargetsToMenu2(menu, client, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED); DisplayMenu(menu, client, MENU_TIME_FOREVER); } diff --git a/plugins/basevotes/voteban.sp b/plugins/basevotes/voteban.sp index fa220f71..1827c0c6 100644 --- a/plugins/basevotes/voteban.sp +++ b/plugins/basevotes/voteban.sp @@ -167,7 +167,7 @@ public Action:Command_Voteban(client, args) client, target_list, MAXPLAYERS, - COMMAND_FILTER_NO_MULTI, + COMMAND_FILTER_NO_MULTI|COMMAND_FILTER_NO_BOTS, target_name, sizeof(target_name), tn_is_ml)) <= 0) diff --git a/plugins/include/adminmenu.inc b/plugins/include/adminmenu.inc index 619165e5..dcac5c4f 100644 --- a/plugins/include/adminmenu.inc +++ b/plugins/include/adminmenu.inc @@ -94,7 +94,23 @@ native Handle:GetAdminTopMenu(); * @param alive_only True to only select alive players. * @return Number of clients added. */ -native AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only=true, bool:alive_only=false); +native AddTargetsToMenu(Handle:menu, + source_client, + bool:in_game_only=true, + bool:alive_only=false); + +/** + * Adds targets to an admin menu. + * + * Each client is displayed as: name (userid) + * Each item contains the userid as a string for its info. + * + * @param menu Menu Handle. + * @param source_client Source client, or 0 to ignore immunity. + * @param flags COMMAND_FILTER flags from commandfilters.inc. + * @return Number of clients added. + */ +native AddTargetsToMenu2(Handle:menu, source_client, flags); /** * Re-displays the admin menu to a client after selecting an item. @@ -132,5 +148,6 @@ public __pl_adminmenu_SetNTVOptional() { MarkNativeAsOptional("GetAdminTopMenu"); MarkNativeAsOptional("AddTargetsToMenu"); + MarkNativeAsOptional("AddTargetsToMenu2"); } #endif diff --git a/plugins/include/commandfilters.inc b/plugins/include/commandfilters.inc index fa8829a9..914982a8 100644 --- a/plugins/include/commandfilters.inc +++ b/plugins/include/commandfilters.inc @@ -37,21 +37,21 @@ #define MAX_TARGET_LENGTH 64 -#define COMMAND_FILTER_ALIVE (1<<0) /* Only allow alive players */ -#define COMMAND_FILTER_DEAD (1<<1) /* Only filter dead players */ -#define COMMAND_FILTER_CONNECTED (1<<2) /* Allow players not fully in-game */ -#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /* Ignore immunity rules */ -#define COMMAND_FILTER_NO_MULTI (1<<4) /* Do not allow multiple target patterns */ -#define COMMAND_FILTER_NO_BOTS (1<<5) /* Do not allow bots to be targetted */ +#define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */ +#define COMMAND_FILTER_DEAD (1<<1) /**< Only filter dead players */ +#define COMMAND_FILTER_CONNECTED (1<<2) /**< Allow players not fully in-game */ +#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Ignore immunity rules */ +#define COMMAND_FILTER_NO_MULTI (1<<4) /**< Do not allow multiple target patterns */ +#define COMMAND_FILTER_NO_BOTS (1<<5) /**< Do not allow bots to be targetted */ -#define COMMAND_TARGET_NONE 0 /* No target was found */ -#define COMMAND_TARGET_NOT_ALIVE -1 /* Single client is not alive */ -#define COMMAND_TARGET_NOT_DEAD -2 /* Single client is not dead */ -#define COMMAND_TARGET_NOT_IN_GAME -3 /* Single client is not in game */ -#define COMMAND_TARGET_IMMUNE -4 /* Single client is immune */ -#define COMMAND_TARGET_EMPTY_FILTER -5 /* A multi-filter (such as @all) had no targets */ -#define COMMAND_TARGET_NOT_HUMAN -6 /* Target was not human */ -#define COMMAND_TARGET_AMBIGUOUS -7 /* Partial name had too many targets */ +#define COMMAND_TARGET_NONE 0 /**< No target was found */ +#define COMMAND_TARGET_NOT_ALIVE -1 /**< Single client is not alive */ +#define COMMAND_TARGET_NOT_DEAD -2 /**< Single client is not dead */ +#define COMMAND_TARGET_NOT_IN_GAME -3 /**< Single client is not in game */ +#define COMMAND_TARGET_IMMUNE -4 /**< Single client is immune */ +#define COMMAND_TARGET_EMPTY_FILTER -5 /**< A multi-filter (such as @all) had no targets */ +#define COMMAND_TARGET_NOT_HUMAN -6 /**< Target was not human */ +#define COMMAND_TARGET_AMBIGUOUS -7 /**< Partial name had too many targets */ /** * Processes a generic command target string, and resolves it to a list From 1ffd1db733abd3f8351417225705e60c965f9d00 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 4 Jan 2008 16:20:25 +0000 Subject: [PATCH 151/263] added amb1348 - SetFailState() formatting --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401839 --- core/smn_core.cpp | 29 ++++++++++++++++++++++++++--- plugins/include/sourcemod.inc | 14 ++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/core/smn_core.cpp b/core/smn_core.cpp index cd8de231..67c413c6 100644 --- a/core/smn_core.cpp +++ b/core/smn_core.cpp @@ -371,12 +371,35 @@ static cell_t GetPluginInfo(IPluginContext *pContext, const cell_t *params) static cell_t SetFailState(IPluginContext *pContext, const cell_t *params) { char *str; + CPlugin *pPlugin; + pContext->LocalToString(params[1], &str); + pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext()); - CPlugin *pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext()); - pPlugin->SetErrorState(Plugin_Error, "%s", str); + if (params[0] == 1) + { + pPlugin->SetErrorState(Plugin_Error, "%s", str); - return pContext->ThrowNativeErrorEx(SP_ERROR_ABORTED, "%s", str); + return pContext->ThrowNativeErrorEx(SP_ERROR_ABORTED, "%s", str); + } + else + { + char buffer[2048]; + + g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 1); + if (pContext->GetContext()->n_err != SP_ERROR_NONE) + { + pPlugin->SetErrorState(Plugin_Error, "%s", str); + return pContext->ThrowNativeErrorEx(SP_ERROR_ABORTED, "Formatting error (%s)", str); + } + else + { + pPlugin->SetErrorState(Plugin_Error, "%s", buffer); + return pContext->ThrowNativeErrorEx(SP_ERROR_ABORTED, "%s", buffer); + } + } + + return 0; } static cell_t GetSysTickCount(IPluginContext *pContext, const cell_t *params) diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index a353b425..0f625607 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -282,11 +282,21 @@ native Handle:FindPluginByNumber(order_num); * Causes the plugin to enter a failed state. An error will be thrown and * the plugin will be paused until it is unloaded or reloaded. * - * @param string Message to print. + * For backwards compatibility, if no extra arguments are passed, no + * formatting is applied. If one or more additional arguments is passed, + * the string is formatted using Format(). If any errors are encountered + * during formatting, both the format specifier string and an additional + * error message are written. + * + * This function does not return, and no further code in the plugin is + * executed. + * + * @param string Format specifier string. + * @param ... Formatting arguments. * @noreturn * @error Always throws SP_ERROR_ABORT. */ -native SetFailState(const String:string[]); +native SetFailState(const String:string[], any:...); /** * Aborts the current callback and throws an error. This function From 934fb9741a1b8808a08413e3c8493c1ef9b2e4b7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 6 Jan 2008 01:35:24 +0000 Subject: [PATCH 152/263] commited a new version of this file. suffice to say the massive inconsistencies and clear compiling bugs in this was disappointing --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401840 --- plugins/include/entity_prop_stocks.inc | 75 ++++++++++++++------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index d6690ebb..0bc4a1fd 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -80,83 +80,86 @@ enum /** * Gets an entity's movetype. * - * @param index Entity index - * @return Movetype, see enum above + * @param entity Entity index. + * @return Movetype, see enum above. + * @error Invalid entity index, or lack of mod compliance. */ -stock GetEntityMovetype(index) +stock GetEntityMovetype(entity) { - new offset = GetEntSendPropOffs(index, "movetype"); - return GetEntData(index, offset, 1); + new offset = GetEntSendPropOffs(entity, "movetype"); + return GetEntData(entity, offset, 1); } /** * Sets an entity's movetype. * - * @param index Entity index - * @param mt Movetype, see enum above + * @param entity Entity index. + * @param mt Movetype, see enum above. * @noreturn + * @error Invalid entity index, or lack of mod compliance. */ -stock SetEntityMovetype(index, mt) +stock SetEntityMovetype(entity, mt) { - new offset = GetEntSendPropOffs(index, "movetype"); - SetEntData(index, offset, mt, 1, true); + new offset = GetEntSendPropOffs(entity, "movetype"); + SetEntData(entity, offset, mt, 1, true); } /** * Sets an entity's color. * - * @param index Entity index + * @param entity Entity index * @param r Amount of red (0-255) * @param g Amount of green (0-255) * @param b Amount of blue (0-255) * @param a Amount of alpha (0-255) * @noreturn + * @error Invalid entity index, or lack of mod compliance. */ -stock SetEntityRenderColor(index, r=255, g=255, b=255, a=255) +stock SetEntityRenderColor(entity, r=255, g=255, b=255, a=255) { - new offset = GetEntSendPropOffs(index, "m_clrRender"); - SetEntData(index, offset, r, 1, true); - SetEntData(index, offset + 1, g, 1, true); - SetEntData(index, offset + 2, b, 1, true); - SetEntData(index, offset + 3, a, 1, true); + new offset = GetEntSendPropOffs(entity, "m_clrRender"); + SetEntData(entity, offset, r, 1, true); + SetEntData(entity, offset + 1, g, 1, true); + SetEntData(entity, offset + 2, b, 1, true); + SetEntData(entity, offset + 3, a, 1, true); } /** * Gets an entity's gravity. * - * @param index Entity index - * @return Entity's m_flGravity value + * @param entity Entity index. + * @return Entity's m_flGravity value. + * @error Invalid entity index, or lack of mod compliance. */ -stock Float:GetEntityGravity(index) +stock Float:GetEntityGravity(entity) { - new offset = FindDataMapOffs(index, "m_flGravity"); - return GetEntDataFloat(index, offset); + return GetEntPropFloat(entity, Prop_Data, "m_flGravity"); } /** * Sets an entity's gravity. * - * @param index Entity index - * @param amount Gravity to set. Default = 800 + * @param entity Entity index. + * @param amount Gravity to set (default = 800). * @noreturn + * @error Invalid entity index, or lack of mod compliance. */ -stock SetEntityGravity(index, Float:amount) +stock SetEntityGravity(entity, Float:amount) { - new offset = FindDataMapOffs(index, "m_flGravity"); - SetEntDataFloat(index, offset, amount, true); + SetEntPropFloat(entity, Prop_Data, "m_flGravity", amount); } /** * Sets an entity's health * - * @param index Entity index - * @param amount Health + * @param entity Entity index. + * @param amount Health amount. * @noreturn + * @error Invalid entity index, or lack of mod compliance. */ -stock SetEntityHealth(index, amount) +stock SetEntityHealth(entity, amount) { - SetEntProp(client, Prop_Send, "m_iHealth", amount, 4) - SetEntProp(client, Prop_Data, "m_iHealth", amount, 4) + SetEntProp(entity, Prop_Send, "m_iHealth", amount); } /** @@ -164,9 +167,11 @@ stock SetEntityHealth(index, amount) * * @param client Client index * @return Bitsum of buttons + * @error Invalid client index, client not in game, + * or lack of mod compliance. */ stock GetClientButtons(client) { - new offset = FindDataMapOffs(client, "m_nButtons"); - return GetEntData(client, offset, 4); -} \ No newline at end of file + return GetEntProp(client, Prop_Data, "m_nButtons"); +} + From 6e09aacd98f8ac8f5d03615a111c80a459fbdaee Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 7 Jan 2008 04:00:47 +0000 Subject: [PATCH 153/263] fixed amb1355 - optional extensions did not work properly --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401841 --- core/systems/PluginSys.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index d26cee0f..8a64c450 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -1326,10 +1326,6 @@ bool CPluginManager::LoadOrRequireExtensions(CPlugin *pPlugin, unsigned int pass if (strncmp(pubvar->name, "__ext_", 6) == 0) { ext = (_ext *)pubvar->offs; - if (!ext->required && !ext->autoload) - { - continue; - } if (pBase->LocalToString(ext->file, &file) != SP_ERROR_NONE) { continue; From e1bc3234b28d5d143884b6672a11daca24c3239c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 7 Jan 2008 06:58:43 +0000 Subject: [PATCH 154/263] added /MP to compilation settings --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401842 --- core/msvc8/sourcemod_mm.vcproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index d7e53673..6007b001 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -40,6 +40,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" @@ -120,6 +121,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" @@ -281,6 +283,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER;ORANGEBOX_BUILD" @@ -361,6 +364,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER;ORANGEBOX_BUILD" @@ -442,6 +446,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" @@ -524,6 +529,7 @@ /> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/MP" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" From c033f5415a2271df243508e636e0ebc85d5b92e8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 7 Jan 2008 06:59:44 +0000 Subject: [PATCH 155/263] - added GuessSDKVersion() - added rendermode and renderfx prop stocks and defines - added MoveType tag to MOVETYPE defines - changed Movetype functions to MoveType to use correct SourceMod casing --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401843 --- core/smn_halflife.cpp | 32 ++++++ plugins/basefuncommands/ice.sp | 6 +- plugins/basefuncommands/noclip.sp | 8 +- plugins/include/entity.inc | 4 +- plugins/include/entity_prop_stocks.inc | 140 ++++++++++++++++++++++--- plugins/include/halflife.inc | 18 +++- 6 files changed, 182 insertions(+), 26 deletions(-) diff --git a/core/smn_halflife.cpp b/core/smn_halflife.cpp index 73091109..2b8adc9c 100644 --- a/core/smn_halflife.cpp +++ b/core/smn_halflife.cpp @@ -436,6 +436,37 @@ static cell_t smn_IsPlayerAlive(IPluginContext *pContext, const cell_t *params) } } +static cell_t GuessSDKVersion(IPluginContext *pContext, const cell_t *params) +{ +#if defined METAMOD_PLAPI_VERSION + int version = g_SMAPI->GetSourceEngineBuild(); + + if (version == SOURCE_ENGINE_ORIGINAL) + { + return 10; + } + else if (version == SOURCE_ENGINE_EPISODEONE) + { + return 20; + } + else if (version == SOURCE_ENGINE_ORANGEBOX) + { + return 30; + } +#else + if (g_HL2.IsOriginalEngine()) + { + return 10; + } + else + { + return 20; + } +#endif + + return 0; +} + REGISTER_NATIVES(halflifeNatives) { {"CreateFakeClient", CreateFakeClient}, @@ -465,5 +496,6 @@ REGISTER_NATIVES(halflifeNatives) {"PrintHintText", PrintHintText}, {"ShowVGUIPanel", ShowVGUIPanel}, {"IsPlayerAlive", smn_IsPlayerAlive}, + {"GuessSDKVersion", GuessSDKVersion}, {NULL, NULL}, }; diff --git a/plugins/basefuncommands/ice.sp b/plugins/basefuncommands/ice.sp index 11afbcbb..fcd06084 100644 --- a/plugins/basefuncommands/ice.sp +++ b/plugins/basefuncommands/ice.sp @@ -59,7 +59,7 @@ FreezeClient(client, time) UnfreezeClient(client); } - SetEntityMovetype(client, MOVETYPE_NONE); + SetEntityMoveType(client, MOVETYPE_NONE); SetEntityRenderColor(client, 0, 128, 255, 192); new Float:vec[3]; @@ -81,7 +81,7 @@ UnfreezeClient(client) GetClientEyePosition(client, vec); EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN); - SetEntityMovetype(client, MOVETYPE_WALK); + SetEntityMoveType(client, MOVETYPE_WALK); SetEntityRenderColor(client, 255, 255, 255, 255); } @@ -191,7 +191,7 @@ public Action:Timer_Freeze(Handle:timer, any:client) g_FreezeTracker[client]--; - SetEntityMovetype(client, MOVETYPE_NONE); + SetEntityMoveType(client, MOVETYPE_NONE); SetEntityRenderColor(client, 0, 128, 255, 135); new Float:vec[3]; diff --git a/plugins/basefuncommands/noclip.sp b/plugins/basefuncommands/noclip.sp index 22a074af..d4732faa 100644 --- a/plugins/basefuncommands/noclip.sp +++ b/plugins/basefuncommands/noclip.sp @@ -38,15 +38,15 @@ SetupNoClip() PerformNoClip(client, target) { - new movetype = GetEntityMovetype(target); - PrintToChatAll("movetype was %d", movetype); + new MoveType:movetype = GetEntityMoveType(target); + if (movetype != MOVETYPE_NOCLIP) { - SetEntityMovetype(target, MOVETYPE_NOCLIP); + SetEntityMoveType(target, MOVETYPE_NOCLIP); } else { - SetEntityMovetype(target, MOVETYPE_WALK); + SetEntityMoveType(target, MOVETYPE_WALK); } LogAction(client, target, "\"%L\" toggled noclip on \"%L\"", client, target); diff --git a/plugins/include/entity.inc b/plugins/include/entity.inc index 90830111..d3f3a33a 100644 --- a/plugins/include/entity.inc +++ b/plugins/include/entity.inc @@ -217,7 +217,7 @@ native GetEntData(entity, offset, size=4); * @error Invalid entity or offset out of reasonable bounds. * @noreturn */ -native SetEntData(entity, offset, value, size=4, bool:changeState=false); +native SetEntData(entity, offset, any:value, size=4, bool:changeState=false); /** * Peeks into an entity's object data and retrieves the float value at @@ -414,7 +414,7 @@ stock GetEntProp(entity, PropType:type, const String:prop[], size=4) * @error Invalid entity or offset out of reasonable bounds. * @noreturn */ -stock SetEntProp(entity, PropType:type, const String:prop[], value, size=4) +stock SetEntProp(entity, PropType:type, const String:prop[], any:value, size=4) { new offs; diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index 0bc4a1fd..ab492494 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -35,20 +35,65 @@ #endif #define _entity_prop_stocks_included -enum +enum MoveType { - MOVETYPE_NONE = 0, /** never moves */ - MOVETYPE_ISOMETRIC, /** For players */ - MOVETYPE_WALK, /** Player only - moving on the ground */ - MOVETYPE_STEP, /** gravity, special edge handling -- monsters use this */ - MOVETYPE_FLY, /** No gravity, but still collides with stuff */ - MOVETYPE_FLYGRAVITY, /** flies through the air + is affected by gravity */ - MOVETYPE_VPHYSICS, /** uses VPHYSICS for simulation */ - MOVETYPE_PUSH, /** no clip to world, push and crush */ - MOVETYPE_NOCLIP, /** No gravity, no collisions, still do velocity/avelocity */ - MOVETYPE_LADDER, /** Used by players only when going onto a ladder */ - MOVETYPE_OBSERVER, /** Observer movement, depends on player's observer mode */ - MOVETYPE_CUSTOM, /** Allows the entity to describe its own physics */ + MOVETYPE_NONE = 0, /**< never moves */ + MOVETYPE_ISOMETRIC, /**< For players */ + MOVETYPE_WALK, /**< Player only - moving on the ground */ + MOVETYPE_STEP, /**< gravity, special edge handling -- monsters use this */ + MOVETYPE_FLY, /**< No gravity, but still collides with stuff */ + MOVETYPE_FLYGRAVITY, /**< flies through the air + is affected by gravity */ + MOVETYPE_VPHYSICS, /**< uses VPHYSICS for simulation */ + MOVETYPE_PUSH, /**< no clip to world, push and crush */ + MOVETYPE_NOCLIP, /**< No gravity, no collisions, still do velocity/avelocity */ + MOVETYPE_LADDER, /**< Used by players only when going onto a ladder */ + MOVETYPE_OBSERVER, /**< Observer movement, depends on player's observer mode */ + MOVETYPE_CUSTOM, /**< Allows the entity to describe its own physics */ +}; + +enum RenderMode +{ + RENDER_NORMAL, /**< src */ + RENDER_TRANSCOLOR, /**< c*a+dest*(1-a) */ + RENDER_TRANSTEXTURE, /**< src*a+dest*(1-a) */ + RENDER_GLOW, /**< src*a+dest -- No Z buffer checks -- Fixed size in screen space */ + RENDER_TRANSALPHA, /**< src*srca+dest*(1-srca) */ + RENDER_TRANSADD, /**< src*a+dest */ + RENDER_ENVIRONMENTAL, /**< not drawn, used for environmental effects */ + RENDER_TRANSADDFRAMEBLEND, /**< use a fractional frame value to blend between animation frames */ + RENDER_TRANSALPHAADD, /**< src + dest*(1-a) */ + RENDER_WORLDGLOW, /**< Same as kRenderGlow but not fixed size in screen space */ + RENDER_NONE, /**< Don't render. */ +}; + +enum RenderFx +{ + RENDERFX_NONE = 0, + RENDERFX_PULSE_SLOW, + RENDERFX_PULSE_FAST, + RENDERFX_PULSE_SLOW_WIDE, + RENDERFX_PULSE_FAST_WIDE, + RENDERFX_FADE_SLOW, + RENDERFX_FADE_FAST, + RENDERFX_SOLID_SLOW, + RENDERFX_SOLID_FAST, + RENDERFX_STROBE_SLOW, + RENDERFX_STROBE_FAST, + RENDERFX_STROBE_FASTER, + RENDERFX_FLICKER_SLOW, + RENDERFX_FLICKER_FAST, + RENDERFX_NO_DISSIPATION, + RENDERFX_DISTORT, /**< Distort/scale/translate flicker */ + RENDERFX_HOLOGRAM, /**< kRenderFxDistort + distance fade */ + RENDERFX_EXPLODE, /**< Scale up really big! */ + RENDERFX_GLOWSHELL, /**< Glowing Shell */ + RENDERFX_CLAMP_MIN_SCALE, /**< Keep this sprite from getting very small (SPRITES only!) */ + RENDERFX_ENV_RAIN, /**< for environmental rendermode, make rain */ + RENDERFX_ENV_SNOW, /**< " " " , make snow */ + RENDERFX_SPOTLIGHT, /**< TEST CODE for experimental spotlight */ + RENDERFX_RAGDOLL, /**< HACKHACK: TEST CODE for signalling death of a ragdoll character */ + RENDERFX_PULSE_FAST_WIDER, + RENDERFX_MAX }; #define IN_ATTACK (1 << 0) @@ -84,10 +129,10 @@ enum * @return Movetype, see enum above. * @error Invalid entity index, or lack of mod compliance. */ -stock GetEntityMovetype(entity) +stock MoveType:GetEntityMoveType(entity) { new offset = GetEntSendPropOffs(entity, "movetype"); - return GetEntData(entity, offset, 1); + return MoveType:GetEntData(entity, offset, 1); } /** @@ -98,12 +143,62 @@ stock GetEntityMovetype(entity) * @noreturn * @error Invalid entity index, or lack of mod compliance. */ -stock SetEntityMovetype(entity, mt) +stock SetEntityMoveType(entity, MoveType:mt) { new offset = GetEntSendPropOffs(entity, "movetype"); SetEntData(entity, offset, mt, 1, true); } +/** + * Gets an entity's render mode. + * + * @param entity Entity index. + * @return RenderMode value. + * @error Invalid entity index, or lack of mod compliance. + */ +stock RenderMode:GetEntityRenderMode(entity) +{ + return RenderMode:GetEntProp(entity, Prop_Send, "m_nRenderMode", 1); +} + +/** + * Sets an entity's render mode. + * + * @param entity Entity index. + * @param mode RenderMode value. + * @noreturn + * @error Invalid entity index, or lack of mod compliance. + */ +stock SetEntityRenderMode(entity, RenderMode:mode) +{ + SetEntProp(entity, Prop_Send, "m_nRenderMode", mode, 1); +} + +/** + * Gets an entity's render Fx. + * + * @param entity Entity index. + * @return RenderFx value. + * @error Invalid entity index, or lack of mod compliance. + */ +stock RenderFx:GetEntityRenderFx(entity) +{ + return RenderFx:GetEntProp(entity, Prop_Send, "m_nRenderFX", 1); +} + +/** + * Sets an entity's render Fx. + * + * @param entity Entity index. + * @param fx RenderFx value. + * @noreturn + * @error Invalid entity index, or lack of mod compliance. + */ +stock SetEntityRenderFx(entity, RenderFx:fx) +{ + SetEntProp(entity, Prop_Send, "m_nRenderFX", fx, 1); +} + /** * Sets an entity's color. * @@ -124,6 +219,8 @@ stock SetEntityRenderColor(entity, r=255, g=255, b=255, a=255) SetEntData(entity, offset + 3, a, 1, true); } +/* GuessSDKVersion */ + /** * Gets an entity's gravity. * @@ -175,3 +272,14 @@ stock GetClientButtons(client) return GetEntProp(client, Prop_Data, "m_nButtons"); } +#pragma deprecated Case change, use MoveType version +stock SetEntityMovetype(entity, any:mt) +{ + SetEntityMoveType(entity, MoveType:mt); +} + +#pragma deprecated Case change, use MoveType version +stock GetEntityMovetype(entity) +{ + return _:GetEntityMoveType(entity); +} diff --git a/plugins/include/halflife.inc b/plugins/include/halflife.inc index 58e3b37a..c9f1fbba 100644 --- a/plugins/include/halflife.inc +++ b/plugins/include/halflife.inc @@ -35,8 +35,13 @@ #endif #define _halflife_included +#define SOURCE_SDK_UNKNOWN 0 /**< Could not determine the engine version */ +#define SOURCE_SDK_ORIGINAL 10 /**< Original Source engine (still used by "The Ship") */ +#define SOURCE_SDK_EPISODE1 20 /**< SDK+Engine released after Episode 1 */ +#define SOURCE_SDK_EPISODE2 30 /**< Engine released after Episode 2 (no SDK yet) */ + #define MOTDPANEL_TYPE_TEXT 0 /**< Treat msg as plain text */ -#define MOTDPANEL_TYPE_INDEX 1 /**< Msg is auto determined by the engine */ +#define MOTDPANEL_TYPE_INDEX 1 /**< Msg is auto determined by the engine */ #define MOTDPANEL_TYPE_URL 2 /**< Treat msg as an URL link */ #define MOTDPANEL_TYPE_FILE 3 /**< Treat msg as a filename to be openned */ @@ -231,6 +236,17 @@ native bool:IsSoundPrecached(const String:sound[]); */ native CreateDialog(client, Handle:kv, DialogType:type); +/** + * Guesses the SDK version a mod was compiled against. If nothing + * specific is known about the game, the engine version is used instead. + * + * The return values are guaranteed to increase chronologically (that is, + * a later release will have a higher value). + * + * @return SOURCE_SDK version code. + */ +native GuessSDKVersion(); + /** * Prints a message to a specific client in the chat area. * From 63592212d526f7ea94734ee9f813390a471b831c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 7 Jan 2008 22:36:39 +0000 Subject: [PATCH 156/263] - fixed amb1302 - GetClientMenu() could return 1 for stale external menus - fixed a debug assertion from StartMessage() + ShowMenu --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401844 --- core/MenuStyle_Radio.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index 5efb3115..20372c59 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -118,6 +118,7 @@ bool CRadioStyle::OnClientCommand(int client, const char *cmdname, const CComman { if (!m_players[client].bInMenu) { + m_players[client].bInExternMenu = false; return false; } @@ -136,7 +137,7 @@ static int g_last_clients[256]; void CRadioStyle::OnUserMessage(int msg_id, bf_write *bf, IRecipientFilter *pFilter) { int count = pFilter->GetRecipientCount(); - bf_read br(bf->GetBasePointer(), 2); + bf_read br(bf->GetBasePointer(), 3); br.ReadWord(); int c = br.ReadChar(); From 42a313486a412101910d91da6965e43a6cf8b4a2 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 8 Jan 2008 03:06:33 +0000 Subject: [PATCH 157/263] - added amb1332, new cvar protection mechanism for rcon_password - removed FCVAR_PROTECTED from Core cvars --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401845 --- core/AdminCache.cpp | 2 +- core/smn_player.cpp | 2 +- plugins/basecommands.sp | 85 +++++++++++++++++++--------- translations/plugin.basecommands.txt | 6 ++ 4 files changed, 66 insertions(+), 29 deletions(-) diff --git a/core/AdminCache.cpp b/core/AdminCache.cpp index f8c880e3..9e447248 100644 --- a/core/AdminCache.cpp +++ b/core/AdminCache.cpp @@ -50,7 +50,7 @@ AdminCache g_Admins; AdminFlag g_FlagLetters[26]; bool g_FlagSet[26]; -ConVar sm_immunity_mode("sm_immunity_mode", "1", FCVAR_SPONLY|FCVAR_PROTECTED, "Mode for deciding immunity protection"); +ConVar sm_immunity_mode("sm_immunity_mode", "1", FCVAR_SPONLY, "Mode for deciding immunity protection"); /* Default flags */ AdminFlag g_DefaultFlags[26] = diff --git a/core/smn_player.cpp b/core/smn_player.cpp index 03f504b0..09c3f4e8 100644 --- a/core/smn_player.cpp +++ b/core/smn_player.cpp @@ -38,7 +38,7 @@ #include <inetchannel.h> #include <iclient.h> -ConVar sm_show_activity("sm_show_activity", "13", FCVAR_SPONLY|FCVAR_PROTECTED, "Activity display setting (see sourcemod.cfg)"); +ConVar sm_show_activity("sm_show_activity", "13", FCVAR_SPONLY, "Activity display setting (see sourcemod.cfg)"); static cell_t sm_GetClientCount(IPluginContext *pCtx, const cell_t *params) { diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index 3471bc5a..a33f2c68 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -49,6 +49,7 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; new Handle:g_MapList; +new Handle:g_ProtectedVars; #include "basecommands/kick.sp" #include "basecommands/reloadadmins.sp" @@ -85,6 +86,11 @@ public OnPluginStart() decl String:mapListPath[PLATFORM_MAX_PATH]; BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); SetMapListCompatBind("sm_map menu", mapListPath); + + g_ProtectedVars = CreateTrie(); + ProtectVar("rcon_password"); + ProtectVar("sm_show_activity"); + ProtectVar("sm_immunity_mode"); } public OnMapStart() @@ -97,6 +103,17 @@ public OnConfigsExecuted() LoadMapList(g_MapList); } +ProtectVar(const String:cvar[]) +{ + SetTrieValue(g_ProtectedVars, cvar, 1); +} + +bool:IsVarProtected(const String:cvar[]) +{ + decl dummy_value; + return GetTrieValue(g_ProtectedVars, cvar, dummy_value); +} + public OnAdminMenuReady(Handle:topmenu) { /* Block us from being called twice */ @@ -244,12 +261,32 @@ public Action:Command_Cvar(client, args) { if (args < 1) { - ReplyToCommand(client, "[SM] Usage: sm_cvar <cvar> [value]"); + if (client == 0) + { + ReplyToCommand(client, "[SM] Usage: sm_cvar <cvar|protect> [value]"); + } + else + { + ReplyToCommand(client, "[SM] Usage: sm_cvar <cvar> [value]"); + } return Plugin_Handled; } decl String:cvarname[64]; GetCmdArg(1, cvarname, sizeof(cvarname)); + + if (client == 0 && StrEqual(cvarname, "protect")) + { + if (args < 2) + { + ReplyToCommand(client, "[SM] Usage: sm_cvar <protect> <cvar>"); + return Plugin_Handled; + } + GetCmdArg(2, cvarname, sizeof(cvarname)); + ProtectVar(cvarname); + ReplyToCommand(client, "[SM] %t", "Cvar is now protected", cvarname); + return Plugin_Handled; + } new Handle:hndl = FindConVar(cvarname); if (hndl == INVALID_HANDLE) @@ -257,36 +294,30 @@ public Action:Command_Cvar(client, args) ReplyToCommand(client, "[SM] %t", "Unable to find cvar", cvarname); return Plugin_Handled; } - + new bool:allowed = false; - if (GetConVarFlags(hndl) & FCVAR_PROTECTED) - { - /* If they're root, allow anything */ - if ((GetUserFlagBits(client) & ADMFLAG_ROOT) == ADMFLAG_ROOT) - { - allowed = true; - } - /* If they're not root, and getting sv_password, see if they have ADMFLAG_PASSWORD */ - else if (StrEqual(cvarname, "sv_password") && (GetUserFlagBits(client) & ADMFLAG_PASSWORD)) - { - allowed = true; - } - } - /* Do a check for the cheat cvar */ - else if (StrEqual(cvarname, "sv_cheats")) - { - if (GetUserFlagBits(client) & ADMFLAG_CHEATS - || GetUserFlagBits(client) & ADMFLAG_ROOT) - { - allowed = true; - } - } - /* If we drop down to here, it was a normal cvar. */ - else + new client_flags = GetUserFlagBits(client); + + if (client_flags & ADMFLAG_ROOT) { allowed = true; } - + else + { + if (GetConVarFlags(hndl) & FCVAR_PROTECTED) + { + allowed = ((client_flags & ADMFLAG_PASSWORD) == ADMFLAG_PASSWORD); + } + else if (StrEqual(cvarname, "sv_cheats")) + { + allowed = ((client_flags & ADMFLAG_CHEATS) == ADMFLAG_CHEATS); + } + else if (!IsVarProtected(cvarname)) + { + allowed = true; + } + } + if (!allowed) { ReplyToCommand(client, "[SM] %t", "No access to cvar"); diff --git a/translations/plugin.basecommands.txt b/translations/plugin.basecommands.txt index 7410b72a..48400328 100644 --- a/translations/plugin.basecommands.txt +++ b/translations/plugin.basecommands.txt @@ -129,4 +129,10 @@ { "en" "Admin access" } + + "Cvar is now protected" + { + "#format" "{1:s}" + "en" "Cvar {1} is now protected." + } } From 9756e7062fa24f67f1d55947105c2fbe7efbce13 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 10 Jan 2008 18:15:45 +0000 Subject: [PATCH 158/263] added extended error messaging to the loader --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401846 --- loader/loader.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/loader/loader.cpp b/loader/loader.cpp index 4ab3699a..d3fd5ea6 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -70,6 +70,29 @@ HINSTANCE g_hCore = NULL; bool load_attempted = false; +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...); + +class FailPlugin : public SourceMM::ISmmFailPlugin +{ +public: + int GetApiVersion() + { + return fail_version; + } + + bool Load(SourceMM::PluginId id, SourceMM::ISmmAPI *ismm, char *error, size_t maxlength, bool late) + { + if (error != NULL && maxlength != 0) + { + UTIL_Format(error, maxlength, "%s", error_buffer); + } + return false; + } + + int fail_version; + char error_buffer[512]; +} s_FailPlugin; + size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) { va_list ap; @@ -87,7 +110,7 @@ size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) return len; } -METAMOD_PLUGIN *_GetPluginPtr(const char *path) +METAMOD_PLUGIN *_GetPluginPtr(const char *path, int fail_api) { METAMOD_FN_ORIG_LOAD fn; METAMOD_PLUGIN *pl; @@ -95,7 +118,34 @@ METAMOD_PLUGIN *_GetPluginPtr(const char *path) if (!(g_hCore=openlib(path))) { - return NULL; +#if defined __linux__ + UTIL_Format(s_FailPlugin.error_buffer, + sizeof(s_FailPlugin.error_buffer), + "%s", + dlerror()); +#else + DWORD err = GetLastError(); + + if (FormatMessageA( + FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + s_FailPlugin.error_buffer, + sizeof(s_FailPlugin.error_buffer), + NULL) + == 0) + { + UTIL_Format(s_FailPlugin.error_buffer, + sizeof(s_FailPlugin.error_buffer), + "unknown error %x", + err); + } +#endif + + s_FailPlugin.fail_version = fail_api; + + return (METAMOD_PLUGIN *)&s_FailPlugin; } if (!(fn=(METAMOD_FN_ORIG_LOAD)findsym(g_hCore, "CreateInterface"))) @@ -171,7 +221,7 @@ DLL_EXPORT METAMOD_PLUGIN *CreateInterface_MMS(const MetamodVersionInfo *mvi, co char abspath[256]; UTIL_Format(abspath, sizeof(abspath), "%s" PATH_SEP_CHAR "%s", mli->pl_path, filename); - return _GetPluginPtr(abspath); + return _GetPluginPtr(abspath, METAMOD_FAIL_API_V2); } DLL_EXPORT void UnloadInterface_MMS() @@ -215,7 +265,7 @@ DLL_EXPORT void *CreateInterface(const char *iface, int *ret) UTIL_Format(targetfile, sizeof(targetfile), "%s" PATH_SEP_CHAR FILENAME_1_4_EP1, thisfile); - return _GetPluginPtr(targetfile); + return _GetPluginPtr(targetfile, METAMOD_FAIL_API_V1); } return NULL; From fd1f271e871c55374c0682e9ffe3bea05c031c5c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 10 Jan 2008 18:27:52 +0000 Subject: [PATCH 159/263] removed SSE requirement for JIT --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401847 --- sourcepawn/jit/x86/msvc8/jit-x86.vcproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sourcepawn/jit/x86/msvc8/jit-x86.vcproj b/sourcepawn/jit/x86/msvc8/jit-x86.vcproj index 4a1136f8..3a51b8fc 100644 --- a/sourcepawn/jit/x86/msvc8/jit-x86.vcproj +++ b/sourcepawn/jit/x86/msvc8/jit-x86.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8,00" + Version="8.00" Name="jit-x86" ProjectGUID="{6EF06E6E-0ED5-4E2D-A8F3-01DD1EC25BA7}" RootNamespace="jitx86" @@ -45,7 +45,7 @@ MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -123,7 +123,7 @@ AdditionalIncludeDirectories="..\..\..\..\public\jit;..\..\..\..\public\jit\x86;..\..\..\..\public\sourcepawn" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JITX86_EXPORTS" RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" From 1efb7cc4dff7ec16b8e003c0d32d231e02a2730f Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 10 Jan 2008 22:51:09 +0000 Subject: [PATCH 160/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401849 --- loader/loader.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/loader/loader.cpp b/loader/loader.cpp index d3fd5ea6..043e7d22 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -33,6 +33,7 @@ #include <stdarg.h> #include <string.h> #include <stdio.h> +#include <malloc.h> #if defined _MSC_VER #define DLL_EXPORT extern "C" __declspec(dllexport) @@ -286,3 +287,32 @@ __attribute__((destructor)) static void gcc_fini() UnloadInterface_MMS(); } #endif + +/* Overload a few things to prevent libstdc++ linking */ +#if defined __linux__ +extern "C" void __cxa_pure_virtual(void) +{ +} + +void *operator new(size_t size) +{ + return malloc(size); +} + +void *operator new[](size_t size) +{ + return malloc(size); +} + +void operator delete(void *ptr) +{ + free(ptr); +} + +void operator delete[](void * ptr) +{ + free(ptr); +} +#endif + + From a2a8634bb215cee51e06bd02c255572fbf001bf4 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 10 Jan 2008 23:03:29 +0000 Subject: [PATCH 161/263] fixed amb1382 - sm_cvar from console rte'd --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401850 --- plugins/basecommands.sp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index a33f2c68..f3222982 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -296,7 +296,7 @@ public Action:Command_Cvar(client, args) } new bool:allowed = false; - new client_flags = GetUserFlagBits(client); + new client_flags = client == 0 ? ADMFLAG_ROOT : GetUserFlagBits(client); if (client_flags & ADMFLAG_ROOT) { From a446121d6e8ab84ecd6a5671ffd6378f2aa6114f Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sat, 12 Jan 2008 19:45:36 +0000 Subject: [PATCH 162/263] New stock to get m_fFlags, and #defines for its bits. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401851 --- plugins/include/entity_prop_stocks.inc | 57 ++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index ab492494..4d4fbfbc 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -96,6 +96,7 @@ enum RenderFx RENDERFX_MAX }; +// These defines are for client button presses. #define IN_ATTACK (1 << 0) #define IN_JUMP (1 << 1) #define IN_DUCK (1 << 2) @@ -106,13 +107,13 @@ enum RenderFx #define IN_LEFT (1 << 7) #define IN_RIGHT (1 << 8) #define IN_MOVELEFT (1 << 9) -#define IN_MOVERIGHT (1 << 10) +#define IN_MOVERIGHT (1 << 10) #define IN_ATTACK2 (1 << 11) #define IN_RUN (1 << 12) #define IN_RELOAD (1 << 13) #define IN_ALT1 (1 << 14) #define IN_ALT2 (1 << 15) -#define IN_SCORE (1 << 16) // Used by client.dll for when scoreboard is held down +#define IN_SCORE (1 << 16) // Used by client.dll for when scoreboard is held down #define IN_SPEED (1 << 17) // Player is holding the speed key #define IN_WALK (1 << 18) // Player holding walk key #define IN_ZOOM (1 << 19) // Zoom key for HUD zoom @@ -122,6 +123,56 @@ enum RenderFx #define IN_GRENADE1 (1 << 23) // grenade 1 #define IN_GRENADE2 (1 << 24) // grenade 2 +// CBaseEntity::m_fFlags +// PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION +#define FL_ONGROUND (1 << 0) // At rest / on the ground +#define FL_DUCKING (1 << 1) // Player flag -- Player is fully crouched +#define FL_WATERJUMP (1 << 2) // player jumping out of water +#define FL_ONTRAIN (1 << 3) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction. +#define FL_INRAIN (1 << 4) // Indicates the entity is standing in rain +#define FL_FROZEN (1 << 5) // Player is frozen for 3rd person camera +#define FL_ATCONTROLS (1 << 6) // Player can't move, but keeps key inputs for controlling another entity +#define FL_CLIENT (1 << 7) // Is a player +#define FL_FAKECLIENT (1 << 8) // Fake client, simulated server side; don't send network messages to them +// NOTE if you move things up, make sure to change this value +#define PLAYER_FLAG_BITS 9 +// NON-PLAYER SPECIFIC (i.e., not used by GameMovement or the client .dll ) -- Can still be applied to players, though +#define FL_INWATER (1 << 9) // In water +#define FL_FLY (1 << 10) // Changes the SV_Movestep() behavior to not need to be on ground +#define FL_SWIM (1 << 11) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) +#define FL_CONVEYOR (1 << 12) +#define FL_NPC (1 << 13) +#define FL_GODMODE (1 << 14) +#define FL_NOTARGET (1 << 15) +#define FL_AIMTARGET (1 << 16) // set if the crosshair needs to aim onto the entity +#define FL_PARTIALGROUND (1 << 17) // not all corners are valid +#define FL_STATICPROP (1 << 18) // Eetsa static prop! +#define FL_GRAPHED (1 << 19) // worldgraph has this ent listed as something that blocks a connection +#define FL_GRENADE (1 << 20) +#define FL_STEPMOVEMENT (1 << 21) // Changes the SV_Movestep() behavior to not do any processing +#define FL_DONTTOUCH (1 << 22) // Doesn't generate touch functions, generates Untouch() for anything it was touching when this flag was set +#define FL_BASEVELOCITY (1 << 23) // Base velocity has been applied this frame (used to convert base velocity into momentum) +#define FL_WORLDBRUSH (1 << 24) // Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something) +#define FL_OBJECT (1 << 25) // Terrible name. This is an object that NPCs should see. Missiles, for example. +#define FL_KILLME (1 << 26) // This entity is marked for death -- will be freed by game DLL +#define FL_ONFIRE (1 << 27) // You know... +#define FL_DISSOLVING (1 << 28) // We're dissolving! +#define FL_TRANSRAGDOLL (1 << 29) // In the process of turning into a client side ragdoll. +#define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) // pusher that can't be blocked by the player +// END m_fFlags #defines + +/** + * Get an entity's flags. + * + * @param entity Entity index. + * @return Entity's flags, see m_fFlag defines above + * @error Invalid entity index, or lack of mod compliance. + */ +stock GetEntityFlags(entity) +{ + return GetEntProp(entity, Prop_Data, "m_fFlags"); +} + /** * Gets an entity's movetype. * @@ -237,7 +288,7 @@ stock Float:GetEntityGravity(entity) * Sets an entity's gravity. * * @param entity Entity index. - * @param amount Gravity to set (default = 800). + * @param amount Gravity to set (default = 1.0, half = 0.5, double = 2.0). * @noreturn * @error Invalid entity index, or lack of mod compliance. */ From a9017a829100517e648aea47d1f979199c9acb95 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 13 Jan 2008 02:08:40 +0000 Subject: [PATCH 163/263] AutoExecConfig() protects against double-call bugs now (amb 1356) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401852 --- core/systems/PluginSys.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 8a64c450..4e022cca 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -799,6 +799,17 @@ AutoConfig *CPlugin::GetConfig(unsigned int i) void CPlugin::AddConfig(bool autoCreate, const char *cfg, const char *folder) { + /* Do a check for duplicates to prevent double-execution */ + for (size_t i = 0; i < m_configs.size(); i++) + { + if (m_configs[i]->autocfg.compare(cfg) == 0 + && m_configs[i]->folder.compare(folder) == 0 + && m_configs[i]->create == autoCreate) + { + return; + } + } + AutoConfig *c = new AutoConfig; c->autocfg = cfg; From 5f61876ab62e61835cc721b681b2b7724396e180 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 13 Jan 2008 08:10:25 +0000 Subject: [PATCH 164/263] fixed amb1379 with sweeping changes to the entity stuff. all prop stocks are now natives so they can properly compute everything quickly, as well as do type checks. Get/SetEntDataEnt are deprecated for being sucky, the new 2 versions do more checking and uses better values. lastly, there are functions/parameters for finding types and sizes of property. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401853 --- core/HalfLife2.cpp | 71 ++- core/HalfLife2.h | 4 +- core/msvc8/sourcemod_mm.vcproj | 12 +- core/smn_entities.cpp | 1032 ++++++++++++++++++++++++++++++-- plugins/include/entity.inc | 447 ++++++-------- public/IGameHelpers.h | 32 +- 6 files changed, 1267 insertions(+), 331 deletions(-) diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 6aec953e..2ea8faf2 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -70,7 +70,6 @@ CHalfLife2::~CHalfLife2() for (iter=m_Tables.begin(); iter!=m_Tables.end(); iter++) { pInfo = (*iter); - sm_trie_destroy(pInfo->lookup); delete pInfo; } @@ -115,6 +114,8 @@ void CHalfLife2::OnSourceModAllInitialized() m_HinTextMsg = g_UserMsgs.GetMessageIndex("HintText"); m_VGUIMenu = g_UserMsgs.GetMessageIndex("VGUIMenu"); g_ShareSys.AddInterface(NULL, this); + + FindInSendTable("CTFPlayer", "m_nDisguiseClass"); } #if !defined METAMOD_PLAPI_VERSION @@ -129,7 +130,10 @@ IChangeInfoAccessor *CBaseEdict::GetChangeAccessor() return engine->GetChangeAccessor( (const edict_t *)this ); } -SendProp *UTIL_FindInSendTable(SendTable *pTable, const char *name) +bool UTIL_FindInSendTable(SendTable *pTable, + const char *name, + sm_sendprop_info_t *info, + unsigned int offset) { const char *pname; int props = pTable->GetNumProps(); @@ -141,13 +145,19 @@ SendProp *UTIL_FindInSendTable(SendTable *pTable, const char *name) pname = prop->GetName(); if (pname && strcmp(name, pname) == 0) { - return prop; + info->prop = prop; + info->actual_offset = offset + info->prop->GetOffset(); + return true; } if (prop->GetDataTable()) { - if ((prop=UTIL_FindInSendTable(prop->GetDataTable(), name)) != NULL) + if (UTIL_FindInSendTable(prop->GetDataTable(), + name, + info, + offset + prop->GetOffset()) + ) { - return prop; + return true; } } } @@ -187,6 +197,7 @@ typedescription_t *UTIL_FindInDataMap(datamap_t *pMap, const char *name) ServerClass *CHalfLife2::FindServerClass(const char *classname) { DataTableInfo *pInfo = _FindServerClass(classname); + if (!pInfo) { return NULL; @@ -207,7 +218,6 @@ DataTableInfo *CHalfLife2::_FindServerClass(const char *classname) if (strcmp(classname, sc->GetName()) == 0) { pInfo = new DataTableInfo; - pInfo->lookup = sm_trie_create(); pInfo->sc = sc; sm_trie_insert(m_pClasses, classname, pInfo); m_Tables.push_back(pInfo); @@ -224,25 +234,46 @@ DataTableInfo *CHalfLife2::_FindServerClass(const char *classname) return pInfo; } +bool CHalfLife2::FindSendPropInfo(const char *classname, const char *offset, sm_sendprop_info_t *info) +{ + DataTableInfo *pInfo; + sm_sendprop_info_t *prop; + + if ((pInfo = _FindServerClass(classname)) == NULL) + { + return false; + } + + if ((prop = pInfo->lookup.retrieve(offset)) == NULL) + { + sm_sendprop_info_t temp_info; + + if (!UTIL_FindInSendTable(pInfo->sc->m_pTable, offset, &temp_info, 0)) + { + return false; + } + + pInfo->lookup.insert(offset, temp_info); + *info = temp_info; + } + else + { + *info = *prop; + } + + return true; +} + SendProp *CHalfLife2::FindInSendTable(const char *classname, const char *offset) { - DataTableInfo *pInfo = _FindServerClass(classname); + sm_sendprop_info_t info; - if (!pInfo) + if (!FindSendPropInfo(classname, offset, &info)) { return NULL; } - SendProp *pProp = NULL; - if (!sm_trie_retrieve(pInfo->lookup, offset, (void **)&pProp)) - { - if ((pProp = UTIL_FindInSendTable(pInfo->sc->m_pTable, offset)) != NULL) - { - sm_trie_insert(pInfo->lookup, offset, pProp); - } - } - - return pProp; + return info.prop; } typedescription_t *CHalfLife2::FindInDataMap(datamap_t *pMap, const char *offset) @@ -272,7 +303,9 @@ void CHalfLife2::SetEdictStateChanged(edict_t *pEdict, unsigned short offset) if (offset) { pEdict->StateChanged(offset); - } else { + } + else + { pEdict->StateChanged(); } } diff --git a/core/HalfLife2.h b/core/HalfLife2.h index ca5fb754..e6bcf05a 100644 --- a/core/HalfLife2.h +++ b/core/HalfLife2.h @@ -35,6 +35,7 @@ #include <sh_list.h> #include <sh_string.h> #include <sh_tinyhash.h> +#include <sm_trie_tpl.h> #include "sm_trie.h" #include "sm_globals.h" #include "sm_queue.h" @@ -52,7 +53,7 @@ using namespace SourceMod; struct DataTableInfo { ServerClass *sc; - Trie *lookup; + KTrie<sm_sendprop_info_t> lookup; }; struct DataMapTrie @@ -89,6 +90,7 @@ public: /*void OnSourceModAllShutdown();*/ public: //IGameHelpers SendProp *FindInSendTable(const char *classname, const char *offset); + bool FindSendPropInfo(const char *classname, const char *offset, sm_sendprop_info_t *info); datamap_t *GetDataMap(CBaseEntity *pEntity); ServerClass *FindServerClass(const char *classname); typedescription_t *FindInDataMap(datamap_t *pMap, const char *offset); diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 6007b001..049ee1d2 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -45,7 +45,7 @@ AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -128,7 +128,7 @@ MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -288,7 +288,7 @@ AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER;ORANGEBOX_BUILD" RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -371,7 +371,7 @@ MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -453,7 +453,7 @@ MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" @@ -534,7 +534,7 @@ AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" + EnableEnhancedInstructionSet="0" RuntimeTypeInfo="false" UsePrecompiledHeader="0" WarningLevel="3" diff --git a/core/smn_entities.cpp b/core/smn_entities.cpp index dd69c267..f8fe5ecf 100644 --- a/core/smn_entities.cpp +++ b/core/smn_entities.cpp @@ -44,6 +44,16 @@ enum PropType Prop_Data }; +enum PropFieldType +{ + PropField_Unsupported, /**< The type is unsupported. */ + PropField_Integer, /**< Valid for SendProp and Data fields */ + PropField_Float, /**< Valid for SendProp and Data fields */ + PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ + PropField_Vector, /**< Valid for SendProp and Data fields */ + PropField_String, /**< Valid for SendProp and Data fields */ +}; + inline edict_t *GetEdict(cell_t num) { edict_t *pEdict = engine->PEntityOfEntIndex(num); @@ -292,7 +302,7 @@ static cell_t GetEntData(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -321,7 +331,7 @@ static cell_t SetEntData(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -366,7 +376,7 @@ static cell_t GetEntDataFloat(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -387,7 +397,7 @@ static cell_t SetEntDataFloat(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -413,7 +423,7 @@ static cell_t GetEntDataVector(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -441,7 +451,7 @@ static cell_t SetEntDataVector(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -463,6 +473,7 @@ static cell_t SetEntDataVector(IPluginContext *pContext, const cell_t *params) return 1; } +/* THIS GUY IS DEPRECATED. */ static cell_t GetEntDataEnt(IPluginContext *pContext, const cell_t *params) { CBaseEntity *pEntity; @@ -474,7 +485,7 @@ static cell_t GetEntDataEnt(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -486,11 +497,65 @@ static cell_t GetEntDataEnt(IPluginContext *pContext, const cell_t *params) return 0; } - /* :TODO: check serial no.? */ - return hndl.GetEntryIndex(); } +int CheckBaseHandle(CBaseHandle &hndl) +{ + if (!hndl.IsValid()) + { + return -1; + } + + int index = hndl.GetEntryIndex(); + + edict_t *pStoredEdict; + CBaseEntity *pStoredEntity; + + pStoredEdict = GetEntity(index, &pStoredEntity); + + if (pStoredEdict == NULL || pStoredEntity == NULL) + { + return -1; + } + + IServerEntity *pSE = pStoredEdict->GetIServerEntity(); + + if (pSE == NULL) + { + return -1; + } + + if (pSE->GetRefEHandle() != hndl) + { + return -1; + } + + return index; +} + +static cell_t GetEntDataEnt2(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + edict_t *pEdict = GetEntity(params[1], &pEntity); + + if (pEdict == NULL || pEntity == NULL) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + int offset = params[2]; + if (offset <= 0 || offset > 32768) + { + return pContext->ThrowNativeError("Offset %d is invalid", offset); + } + + CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset); + + return CheckBaseHandle(hndl); +} + +/* THIS GUY IS DEPRECATED. */ static cell_t SetEntDataEnt(IPluginContext *pContext, const cell_t *params) { CBaseEntity *pEntity; @@ -502,7 +567,7 @@ static cell_t SetEntDataEnt(IPluginContext *pContext, const cell_t *params) } int offset = params[2]; - if (offset < 0 || offset > 32768) + if (offset <= 0 || offset > 32768) { return pContext->ThrowNativeError("Offset %d is invalid", offset); } @@ -530,6 +595,47 @@ static cell_t SetEntDataEnt(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t SetEntDataEnt2(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + edict_t *pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + int offset = params[2]; + if (offset <= 0 || offset > 32768) + { + return pContext->ThrowNativeError("Offset %d is invalid", offset); + } + + CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset); + + if (params[3] == -1) + { + hndl.Set(NULL); + } + else + { + edict_t *pEdict = GetEdict(params[3]); + if (!pEdict) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[3]); + } + IServerEntity *pEntOther = pEdict->GetIServerEntity(); + hndl.Set(pEntOther); + } + + if (params[4]) + { + g_HL2.SetEdictStateChanged(pEdict, offset); + } + + return 1; +} + static cell_t ChangeEdictState(IPluginContext *pContext, const cell_t *params) { edict_t *pEdict = GetEdict(params[1]); @@ -560,6 +666,59 @@ static cell_t FindSendPropOffs(IPluginContext *pContext, const cell_t *params) return pSend->GetOffset(); } +static cell_t FindSendPropInfo(IPluginContext *pContext, const cell_t *params) +{ + char *cls, *prop; + sm_sendprop_info_t info; + cell_t *pType, *pBits, *pLocal; + + pContext->LocalToString(params[1], &cls); + pContext->LocalToString(params[2], &prop); + + if (!g_HL2.FindSendPropInfo(cls, prop, &info)) + { + return -1; + } + + pContext->LocalToPhysAddr(params[3], &pType); + pContext->LocalToPhysAddr(params[4], &pBits); + pContext->LocalToPhysAddr(params[5], &pLocal); + + switch (info.prop->GetType()) + { + case DPT_Int: + { + *pType = PropField_Integer; + break; + } + case DPT_Float: + { + *pType = PropField_Float; + break; + } + case DPT_String: + { + *pType = PropField_String; + break; + } + case DPT_Vector: + { + *pType = PropField_Vector; + break; + } + default: + { + *pType = PropField_Unsupported; + break; + } + } + + *pBits = info.prop->m_nBits; + *pLocal = info.prop->GetOffset(); + + return info.actual_offset; +} + static cell_t FindDataMapOffs(IPluginContext *pContext, const cell_t *params) { CBaseEntity *pEntity; @@ -584,6 +743,79 @@ static cell_t FindDataMapOffs(IPluginContext *pContext, const cell_t *params) return -1; } + if (params[0] == 4) + { + cell_t *pType, *pSize; + + pContext->LocalToPhysAddr(params[3], &pType); + pContext->LocalToPhysAddr(params[4], &pSize); + + switch (td->fieldType) + { + case FIELD_TICK: + case FIELD_MODELINDEX: + case FIELD_MATERIALINDEX: + case FIELD_INTEGER: + case FIELD_COLOR32: + { + *pType = PropField_Integer; + *pSize = 32; + break; + } + case FIELD_VECTOR: + case FIELD_POSITION_VECTOR: + { + *pType = PropField_Vector; + *pSize = 12; + break; + } + case FIELD_SHORT: + { + *pType = PropField_Integer; + *pSize = 16; + break; + } + case FIELD_BOOLEAN: + { + *pType = PropField_Integer; + *pSize = 1; + break; + } + case FIELD_CHARACTER: + { + if (td->fieldSize == 1) + { + *pType = PropField_Integer; + *pSize = 8; + } + else + { + *pType = PropField_String; + *pSize = 8 * td->fieldSize; + } + break; + } + case FIELD_FLOAT: + case FIELD_TIME: + { + *pType = PropField_Float; + *pSize = 32; + break; + } + case FIELD_EHANDLE: + { + *pType = PropField_Entity; + *pSize = 32; + break; + } + default: + { + *pType = PropField_Unsupported; + *pSize = 0; + } + } + } + return td->fieldOffset[TD_OFFSET_NORMAL]; } @@ -640,59 +872,764 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params) return len; } -static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) +#define FIND_PROP_DATA(td) \ + datamap_t *pMap; \ + if ((pMap = CBaseEntity_GetDataDescMap(pEntity)) == NULL) \ + { \ + return pContext->ThrowNativeError("Could not retrieve datamap"); \ + } \ + if ((td = g_HL2.FindInDataMap(pMap, prop)) == NULL) \ + { \ + return pContext->ThrowNativeError("Property \"%s\" not found (entity %d/%s)", \ + prop, \ + params[1], \ + class_name); \ + } + +#define FIND_PROP_SEND(pProp) \ + IServerNetworkable *pNet = pEdict->GetNetworkable(); \ + if (!pNet) \ + { \ + return pContext->ThrowNativeError("Edict %d is not networkable", params[1]); \ + } \ + if (!g_HL2.FindSendPropInfo(pNet->GetServerClass()->GetName(), prop, pProp)) \ + { \ + return pContext->ThrowNativeError("Property \"%s\" not found (entity %d/%s)", \ + prop, \ + params[1], \ + class_name); \ + } + +inline int MatchFieldAsInteger(int field_type) +{ + switch (field_type) + { + case FIELD_TICK: + case FIELD_MODELINDEX: + case FIELD_MATERIALINDEX: + case FIELD_INTEGER: + case FIELD_COLOR32: + return 32; + case FIELD_SHORT: + return 16; + case FIELD_CHARACTER: + return 8; + case FIELD_BOOLEAN: + return 1; + default: + return 0; + } + + return 0; +} + +static cell_t GetEntProp(IPluginContext *pContext, const cell_t *params) { CBaseEntity *pEntity; char *prop; int offset; - edict_t *pEdict = GetEntity(params[1], &pEntity); + const char *class_name; + edict_t *pEdict; + int bit_count; + + pEdict = GetEntity(params[1], &pEntity); if (!pEdict || !pEntity) { return pContext->ThrowNativeError("Entity %d is invalid", params[1]); } + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + switch (params[2]) { case Prop_Data: { - datamap_t *pMap; typedescription_t *td; - if ((pMap=CBaseEntity_GetDataDescMap(pEntity)) == NULL) + + FIND_PROP_DATA(td); + + if ((bit_count = MatchFieldAsInteger(td->fieldType)) == 0) { - return pContext->ThrowNativeError("Unable to retrieve GetDataDescMap offset"); - } - pContext->LocalToString(params[3], &prop); - if ((td=g_HL2.FindInDataMap(pMap, prop)) == NULL) - { - return pContext->ThrowNativeError("Property \"%s\" not found for entity %d", prop, params[1]); - } - if (td->fieldType != FIELD_CHARACTER) - { - return pContext->ThrowNativeError("Property \"%s\" is not a valid string", prop); + return pContext->ThrowNativeError("Data field %s is not an integer (%d)", + prop, + td->fieldType); } + offset = td->fieldOffset[TD_OFFSET_NORMAL]; break; } case Prop_Send: { - char *prop; - IServerNetworkable *pNet = pEdict->GetNetworkable(); - if (!pNet) + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Int) { - return pContext->ThrowNativeError("The edict is not networkable"); + return pContext->ThrowNativeError("SendProp %s is not an integer ([%d,%d] != %d)", + prop, + info.prop->GetType(), + info.prop->m_nBits, + DPT_Int); } - pContext->LocalToString(params[3], &prop); - SendProp *pSend = g_HL2.FindInSendTable(pNet->GetServerClass()->GetName(), prop); - if (!pSend) + + bit_count = info.prop->m_nBits; + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + if (bit_count < 1) + { + bit_count = params[4] * 8; + } + + if (bit_count >= 17) + { + return *(int32_t *)((uint8_t *)pEntity + offset); + } + else if (bit_count >= 9) + { + return *(int16_t *)((uint8_t *)pEntity + offset); + } + else if (bit_count >= 2) + { + return *(int8_t *)((uint8_t *)pEntity + offset); + } + else + { + return *(bool *)((uint8_t *)pEntity + offset) ? 1 : 0; + } + + return 0; +} + +static cell_t SetEntProp(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + int bit_count; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if ((bit_count = MatchFieldAsInteger(td->fieldType)) == 0) { - return pContext->ThrowNativeError("Property \"%s\" not found for entity %d", prop, params[1]); + return pContext->ThrowNativeError("Data field %s is not an integer (%d)", + prop, + td->fieldType); } - if (pSend->GetType() != DPT_String) + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Int) { - return pContext->ThrowNativeError("Property \"%s\" is not a valid string", prop); + return pContext->ThrowNativeError("SendProp %s is not an integer ([%d,%d] != %d)", + prop, + info.prop->GetType(), + info.prop->m_nBits, + DPT_Int); } - offset = pSend->GetOffset(); + + bit_count = info.prop->m_nBits; + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + if (bit_count < 1) + { + bit_count = params[5] * 8; + } + + if (bit_count >= 17) + { + *(int32_t *)((uint8_t *)pEntity + offset) = params[4]; + } + else if (bit_count >= 9) + { + *(int16_t *)((uint8_t *)pEntity + offset) = (int16_t)params[4]; + } + else if (bit_count >= 2) + { + *(int8_t *)((uint8_t *)pEntity + offset) = (int8_t)params[4]; + } + else + { + *(bool *)((uint8_t *)pEntity + offset) = params[4] ? true : false; + } + + return 0; +} + +static cell_t GetEntPropFloat(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_FLOAT + && td->fieldType != FIELD_TIME) + { + return pContext->ThrowNativeError("Data field %s is not a float (%d != [%d,%d])", + prop, + td->fieldType, + FIELD_FLOAT, + FIELD_TIME); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Float) + { + return pContext->ThrowNativeError("SendProp %s is not a float (%d != %d)", + prop, + info.prop->GetType(), + DPT_Float); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + float val = *(float *)((uint8_t *)pEntity + offset); + + return sp_ftoc(val); +} + +static cell_t SetEntPropFloat(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_FLOAT + && td->fieldType != FIELD_TIME) + { + return pContext->ThrowNativeError("Data field %s is not a float (%d != [%d,%d])", + prop, + td->fieldType, + FIELD_FLOAT, + FIELD_TIME); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Float) + { + return pContext->ThrowNativeError("SendProp %s is not a float (%d != %d)", + prop, + info.prop->GetType(), + DPT_Float); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + *(float *)((uint8_t *)pEntity + offset) = sp_ctof(params[4]); + + if (params[2] == Prop_Send) + { + g_HL2.SetEdictStateChanged(pEdict, offset); + } + + return 1; +} + +static cell_t GetEntPropEnt(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_EHANDLE) + { + return pContext->ThrowNativeError("Data field %s is not an entity (%d != %d)", + prop, + td->fieldType, + FIELD_EHANDLE); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Int) + { + return pContext->ThrowNativeError("SendProp %s is not an integer (%d != %d)", + prop, + info.prop->GetType(), + DPT_Int); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset); + + return CheckBaseHandle(hndl); +} + +static cell_t SetEntPropEnt(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_EHANDLE) + { + return pContext->ThrowNativeError("Data field %s is not an entity (%d != %d)", + prop, + td->fieldType, + FIELD_EHANDLE); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Int) + { + return pContext->ThrowNativeError("SendProp %s is not an integer (%d != %d)", + prop, + info.prop->GetType(), + DPT_Int); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset); + + if (params[4] == -1) + { + hndl.Set(NULL); + } + else + { + edict_t *pOther; + CBaseEntity *pOtherEnt; + + if ((pOther = GetEntity(params[4], &pOtherEnt)) == NULL) + { + return pContext->ThrowNativeError("Invalid entity %d", params[4]); + } + + hndl.Set(pOther->GetIServerEntity()); + } + + if (params[2] == Prop_Send) + { + g_HL2.SetEdictStateChanged(pEdict, offset); + } + + return 1; +} + +static cell_t GetEntPropVector(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_VECTOR + && td->fieldType != FIELD_POSITION_VECTOR) + { + return pContext->ThrowNativeError("Data field %s is not a vector (%d != [%d,%d])", + prop, + td->fieldType, + FIELD_VECTOR, + FIELD_POSITION_VECTOR); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Vector) + { + return pContext->ThrowNativeError("SendProp %s is not a vector (%d != %d)", + prop, + info.prop->GetType(), + DPT_Vector); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + Vector *v = (Vector *)((uint8_t *)pEntity + offset); + + cell_t *vec; + pContext->LocalToPhysAddr(params[4], &vec); + + vec[0] = sp_ftoc(v->x); + vec[1] = sp_ftoc(v->y); + vec[2] = sp_ftoc(v->z); + + return 1; +} + +static cell_t SetEntPropVector(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_VECTOR + && td->fieldType != FIELD_POSITION_VECTOR) + { + return pContext->ThrowNativeError("Data field %s is not a vector (%d != [%d,%d])", + prop, + td->fieldType, + FIELD_VECTOR, + FIELD_POSITION_VECTOR); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_Vector) + { + return pContext->ThrowNativeError("SendProp %s is not a vector (%d != %d)", + prop, + info.prop->GetType(), + DPT_Vector); + } + + offset = info.actual_offset; + break; + } + default: + { + return pContext->ThrowNativeError("Invalid Property type %d", params[2]); + } + } + + Vector *v = (Vector *)((uint8_t *)pEntity + offset); + + cell_t *vec; + pContext->LocalToPhysAddr(params[4], &vec); + + v->x = sp_ctof(vec[0]); + v->y = sp_ctof(vec[1]); + v->z = sp_ctof(vec[2]); + + if (params[2] == Prop_Send) + { + g_HL2.SetEdictStateChanged(pEdict, offset); + } + + return 1; +} + +static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) +{ + CBaseEntity *pEntity; + char *prop; + int offset; + const char *class_name; + edict_t *pEdict; + + pEdict = GetEntity(params[1], &pEntity); + + if (!pEdict || !pEntity) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + if ((class_name = pEdict->GetClassName()) == NULL) + { + class_name = ""; + } + + pContext->LocalToString(params[3], &prop); + + switch (params[2]) + { + case Prop_Data: + { + typedescription_t *td; + + FIND_PROP_DATA(td); + + if (td->fieldType != FIELD_CHARACTER) + { + return pContext->ThrowNativeError("Data field %s is not a string (%d != %d)", + prop, + td->fieldType, + FIELD_CHARACTER); + } + + offset = td->fieldOffset[TD_OFFSET_NORMAL]; + break; + } + case Prop_Send: + { + sm_sendprop_info_t info; + + FIND_PROP_SEND(&info); + + if (info.prop->GetType() != DPT_String) + { + return pContext->ThrowNativeError("SendProp %s is not a string (%d != %d)", + prop, + info.prop->GetType(), + DPT_String); + } + + offset = info.actual_offset; + break; break; } default: @@ -714,7 +1651,6 @@ static cell_t SetEntPropString(IPluginContext *pContext, const cell_t *params) char *prop; int offset; int maxlen; - bool is_sendprop = false; edict_t *pEdict = GetEntity(params[1], &pEntity); if (!pEdict || !pEntity) @@ -765,7 +1701,6 @@ static cell_t SetEntPropString(IPluginContext *pContext, const cell_t *params) } offset = pSend->GetOffset(); maxlen = DT_MAX_STRING_BUFFERSIZE; - is_sendprop = true; break; } default: @@ -780,7 +1715,7 @@ static cell_t SetEntPropString(IPluginContext *pContext, const cell_t *params) pContext->LocalToString(params[4], &src); size_t len = strncopy(dest, src, maxlen); - if (is_sendprop) + if (params[2] == Prop_Send) { g_HL2.SetEdictStateChanged(pEdict, offset); } @@ -792,13 +1727,22 @@ REGISTER_NATIVES(entityNatives) { {"ChangeEdictState", ChangeEdictState}, {"CreateEdict", CreateEdict}, + {"FindDataMapOffs", FindDataMapOffs}, + {"FindSendPropInfo", FindSendPropInfo}, {"FindSendPropOffs", FindSendPropOffs}, {"GetEdictClassname", GetEdictClassname}, {"GetEdictFlags", GetEdictFlags}, {"GetEntData", GetEntData}, - {"GetEntDataEnt", GetEntDataEnt}, + {"GetEntDataEnt", GetEntDataEnt}, /** DEPRECATED */ + {"GetEntDataEnt2", GetEntDataEnt2}, {"GetEntDataFloat", GetEntDataFloat}, + {"GetEntDataString", GetEntDataString}, {"GetEntDataVector", GetEntDataVector}, + {"GetEntProp", GetEntProp}, + {"GetEntPropEnt", GetEntPropEnt}, + {"GetEntPropFloat", GetEntPropFloat}, + {"GetEntPropString", GetEntPropString}, + {"GetEntPropVector", GetEntPropVector}, {"GetEntityCount", GetEntityCount}, {"GetEntityNetClass", GetEntityNetClass}, {"GetMaxEntities", GetMaxEntities}, @@ -808,13 +1752,15 @@ REGISTER_NATIVES(entityNatives) {"RemoveEdict", RemoveEdict}, {"SetEdictFlags", SetEdictFlags}, {"SetEntData", SetEntData}, - {"SetEntDataEnt", SetEntDataEnt}, + {"SetEntDataEnt", SetEntDataEnt}, /** DEPRECATED */ + {"SetEntDataEnt2", SetEntDataEnt2}, {"SetEntDataFloat", SetEntDataFloat}, {"SetEntDataVector", SetEntDataVector}, - {"FindDataMapOffs", FindDataMapOffs}, - {"GetEntDataString", GetEntDataString}, {"SetEntDataString", SetEntDataString}, - {"GetEntPropString", GetEntPropString}, + {"SetEntProp", SetEntProp}, + {"SetEntPropEnt", SetEntPropEnt}, + {"SetEntPropFloat", SetEntPropFloat}, {"SetEntPropString", SetEntPropString}, + {"SetEntPropVector", SetEntPropVector}, {NULL, NULL} }; diff --git a/plugins/include/entity.inc b/plugins/include/entity.inc index d3f3a33a..79d90fc4 100644 --- a/plugins/include/entity.inc +++ b/plugins/include/entity.inc @@ -41,7 +41,7 @@ enum PropType { Prop_Send = 0, /**< This property is networked. */ - Prop_Data = 1, /**< This property is for saved game files. */ + Prop_Data = 1, /**< This property is for save game data fields. */ }; /** @@ -59,6 +59,16 @@ enum PropType #define FL_EDICT_DIRTY_PVS_INFORMATION (1<<7) #define FL_FULL_EDICT_CHANGED (1<<8) +enum PropFieldType +{ + PropField_Unsupported, /**< The type is unsupported. */ + PropField_Integer, /**< Valid for SendProp and Data fields */ + PropField_Float, /**< Valid for SendProp and Data fields */ + PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ + PropField_Vector, /**< Valid for SendProp and Data fields */ + PropField_String, /**< Valid for SendProp and Data fields */ +}; + /** * @endsection */ @@ -244,8 +254,14 @@ native Float:GetEntDataFloat(entity, offset); native SetEntDataFloat(entity, offset, Float:value, bool:changeState=false); /** - * Peeks into an entity's object data and retrieves the entity handle - * info at the given offset. + * This function is deprecated. Use GetEntDataEnt2 instead, for + * reasons explained in the notes. + * + * Note: This function returns 0 on failure, which may be misleading, + * as the number 0 is also used for the world entity index. + * + * Note: This function makes no attempt to validate the returned + * entity, and in fact, it could be garbage or completely unexpected. * * @param entity Edict index. * @param offset Offset to use. @@ -255,8 +271,12 @@ native SetEntDataFloat(entity, offset, Float:value, bool:changeState=false); native GetEntDataEnt(entity, offset); /** - * Peeks into an entity's object data and sets the entity handle info - * at the given offset. + * This function is deprecated. Use GetEntDataEnt2 instead, for + * reasons explained in the notes. + * + * Note: This function uses 0 as an indicator to unset data, but + * 0 is also the world entity index. Thus, the a property cannot + * be set to the world entity using this native. * * @param entity Edict index. * @param offset Offset to use. @@ -267,6 +287,39 @@ native GetEntDataEnt(entity, offset); */ native SetEntDataEnt(entity, offset, other, bool:changeState=false); +/** + * Peeks into an entity's object data and retrieves the entity index + * at the given offset. + * + * Note: This will only work on offsets that are stored as "entity + * handles" (which usually looks like m_h* in properties). These + * are not SourceMod Handles, but internal Source structures. + * + * @param entity Edict index. + * @param offset Offset to use. + * @return Entity index at the given location. If there is no entity, + * or the stored entity is invalid, then -1 is returned. + * @error Invalid input entity, or offset out of reasonable bounds. + */ +native GetEntDataEnt2(entity, offset); + +/** + * Peeks into an entity's object data and sets the entity index at the + * given offset. + * + * Note: This will only work on offsets that are stored as "entity + * handles" (which usually looks like m_h* in properties). These + * are not SourceMod Handles, but internal Source structures. + * + * @param entity Edict index. + * @param offset Offset to use. + * @param other Entity index to set, or -1 to clear. + * @param changeState If true, change will be sent over the network. + * @noreturn + * @error Invalid input entity, or offset out of reasonable bounds. + */ +native SetEntDataEnt2(entity, offset, other, bool:changeState=false); + /** * Peeks into an entity's object data and retrieves the vector at the * given offset. @@ -331,30 +384,74 @@ native SetEntDataString(entity, offset, const String:buffer[], maxlen, bool:chan * Given a ServerClass name, finds a networkable send property offset. * This information is cached for future calls. * + * Note, this function may return offsets that do not work! + * If a property is nested beneath a parent object, the resulting offset + * will be invalid for direct use with data functions. Therefore, you + * should use FindSendPropInfo() instead. An example of such a property is + * CTFPlayer::DT_LocalPlayer.m_nDisguiseClass on Team Fortress. + * * @param cls Classname. * @param prop Property name. * @return An offset, or -1 on failure. */ native FindSendPropOffs(const String:cls[], const String:prop[]); +/** + * Given a ServerClass name, finds a networkable send property offset. + * This information is cached for future calls. + * + * Note: This function will correctly compute nested offsets, unlike + * FindSendPropOffs(). YOU SHOULD NOT use this function to self-compute + * nested offsets. For example, it is okay to add indexes for arrays, + * but not to add DT_LocalPlayer to m_nDisguiseClass. + * + * @param cls Classname. + * @param prop Property name. + * @param type Optional parameter to store the type. + * @param num_bits Optional parameter to store the number of bits the field + * uses, if applicable (otherwise 0 is stored). The number + * of bits varies for integers and floats, and is always 0 + * for strings. + * @param local_offset Optional parameter to store the local offset, as + * FindSendPropOffs() would return. + * @return On success, returns an absolutely computed offset. + * If no offset is available, 0 is returned. + * If the property is not found, -1 is returned. + */ +native FindSendPropInfo(const String:cls[], + const String:prop[], + &PropFieldType:type=PropFieldType:0, + &num_bits=0, + &local_offset=0); + /** * Given an entity, finds a datamap property offset. * This information is cached for future calls. * * @param entity Entity index. * @param prop Property name. + * @param type Optional parameter to store the type. + * @param num_bits Optional parameter to store the number of bits the field + * uses. The bit count will either be 1 (for boolean) or + * divisible by 8 (including 0 if unknown). * @return An offset, or -1 on failure. */ -native FindDataMapOffs(entity, const String:prop[]); +native FindDataMapOffs(entity, + const String:prop[], + &PropFieldType:type=PropFieldType:0, + &num_bits=0); /** * Wrapper function for finding a send property for a particular entity. * * @param ent Entity index. * @param prop Property name. + * @param actual Defaults to false for backwards compatibility. + * If true, the newer FindSendPropInfo() function + * is used instead. * @return An offset, or -1 on failure. */ -stock GetEntSendPropOffs(ent, const String:prop[]) +stock GetEntSendPropOffs(ent, const String:prop[], bool:actual=false) { decl String:cls[64]; @@ -363,314 +460,149 @@ stock GetEntSendPropOffs(ent, const String:prop[]) return -1; } - return FindSendPropOffs(cls, prop); + if (actual) + { + return FindSendPropInfo(cls, prop); + } + else + { + return FindSendPropOffs(cls, prop); + } } /** - * Gets a network property as an integer; wrapper around GetEntData(). + * Retrieves an integer value from an entity's property. + * + * This function is considered safer and more robust over GetEntData, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. - * @param size Number of bytes to read (valid values are 1, 2, or 4). + * @param prop Property name. + * @param size Number of bytes to write (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. * @return Value at the given property offset. * @error Invalid entity or property not found. */ -stock GetEntProp(entity, PropType:type, const String:prop[], size=4) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return GetEntData(entity, offs, size); -} +native GetEntProp(entity, PropType:type, const String:prop[], size=4); /** - * Sets a network property as an integer; wrapper around GetEntData(). + * Sets an integer value in an entity's property. * - * @param entity Edict index. + * This function is considered safer and more robust over SetEntData, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. + * + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. + * @param prop Property name. * @param size Number of bytes to write (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. * @error Invalid entity or offset out of reasonable bounds. * @noreturn */ -stock SetEntProp(entity, PropType:type, const String:prop[], any:value, size=4) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return SetEntData(entity, offs, value, size, true); -} +native SetEntProp(entity, PropType:type, const String:prop[], any:value, size=4); /** - * Gets a network property as a float; wrapper around GetEntDataFloat(). + * Retrieves a float value from an entity's property. + * + * This function is considered safer and more robust over GetEntDataFloat, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. + * @param prop Property name. * @return Value at the given property offset. * @error Invalid entity or offset out of reasonable bounds. */ -stock Float:GetEntPropFloat(entity, PropType:type, const String:prop[]) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return GetEntDataFloat(entity, offs); -} +native Float:GetEntPropFloat(entity, PropType:type, const String:prop[]); /** - * Sets a network property as a float; wrapper around SetEntDataFloat(). + * Sets a float value in an entity's property. + * + * This function is considered safer and more robust over SetEntDataFloat, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. + * @param prop Property name. * @param value Value to set. * @noreturn * @error Invalid entity or offset out of reasonable bounds. */ -stock SetEntPropFloat(entity, PropType:type, const String:prop[], Float:value) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return SetEntDataFloat(entity, offs, value, true); -} +native SetEntPropFloat(entity, PropType:type, const String:prop[], Float:value); /** - * Gets a network property as a handle entity; wrapper around GetEntDataEnt(). + * Retrieves an entity index from an entity's property. + * + * This function is considered safer and more robust over GetEntDataEnt*, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. - * @return Entity index at the given property, or 0 if none. + * @param prop Property name. + * @return Entity index at the given property. + * If there is no entity, or the entity is not valid, + * then -1 is returned. * @error Invalid entity or offset out of reasonable bounds. */ -stock GetEntPropEnt(entity, PropType:type, const String:prop[]) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return GetEntDataEnt(entity, offs); -} +native GetEntPropEnt(entity, PropType:type, const String:prop[]); /** - * Sets a network property as a handle entity; wrapper around SetEntDataEnt(). + * Sets an entity index in an entity's property. + * + * This function is considered safer and more robust over SetEntDataEnt*, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. - * @param other Entity index to set, or 0 to unset. + * @param prop Property name. + * @param other Entity index to set, or -1 to unset. * @noreturn * @error Invalid entity or offset out of reasonable bounds. */ -stock SetEntPropEnt(entity, PropType:type, const String:prop[], other) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return SetEntDataEnt(entity, offs, other, true); -} +native SetEntPropEnt(entity, PropType:type, const String:prop[], other); /** - * Gets a network property as a vector; wrapper around GetEntDataVector(). - * @note Both a Vector and a QAngle are three floats. This is a - * convenience function and will work with both types. + * Retrieves a vector of floats from an entity, given a named network property. + * + * This function is considered safer and more robust over GetEntDataVector, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. + * @param prop Property name. * @param vec Vector buffer to store data in. * @noreturn - * @error Invalid entity or offset out of reasonable bounds. + * @error Invalid entity, property not found, or property not + * actually a vector data type. */ -stock GetEntPropVector(entity, PropType:type, const String:prop[], Float:vec[3]) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return GetEntDataVector(entity, offs, vec); -} +native GetEntPropVector(entity, PropType:type, const String:prop[], Float:vec[3]); /** - * Sets a network property as a vector; wrapper around SetEntDataVector(). - * @note Both a Vector and a QAngle are three floats. This is a - * convenience function and will work with both types. + * Sets a vector of floats in an entity, given a named network property. + * + * This function is considered safer and more robust over SetEntDataVector, + * because it performs strict offset checking and typing rules. There is a + * very minor performance hit from this. * - * @param entity Edict index. + * @param entity Entity/edict index. * @param type Property type. - * @param prop Property to use. + * @param prop Property name. * @param vec Vector to set. * @noreturn - * @error Invalid entity or offset out of reasonable bounds. + * @error Invalid entity, property not found, or property not + * actually a vector data type. */ -stock SetEntPropVector(entity, PropType:type, const String:prop[], const Float:vec[3]) -{ - new offs; - - switch (type) - { - case Prop_Send: - { - offs = GetEntSendPropOffs(entity, prop); - } - case Prop_Data: - { - offs = FindDataMapOffs(entity, prop); - } - default: - { - ThrowError("Invalid Property type %d", type); - } - } - - if (offs == -1) - { - ThrowError("Property \"%s\" not found for entity %d", prop, entity); - } - - return SetEntDataVector(entity, offs, vec, true); -} +native SetEntPropVector(entity, PropType:type, const String:prop[], const Float:vec[3]); /** * Gets a network property as a string. @@ -716,7 +648,6 @@ stock GetEntDataArray(entity, offset, array[], arraySize, dataSize=4) } } - /** * Copies an array of cells to an entity at a given offset. * diff --git a/public/IGameHelpers.h b/public/IGameHelpers.h index 25d1d5c6..1467ed6c 100644 --- a/public/IGameHelpers.h +++ b/public/IGameHelpers.h @@ -48,6 +48,15 @@ namespace SourceMod { + /** + * @brief Maps the heirarchy of a SendProp. + */ + struct sm_sendprop_info_t + { + SendProp *prop; /**< Property instance. */ + unsigned int actual_offset; /**< Actual computed offset. */ + }; + class IGameHelpers : public SMInterface { public: @@ -61,11 +70,11 @@ namespace SourceMod } public: /** - * @brief Finds a send property in a named send table. + * @brief Deprecated; use FindSendPropInfo() instead. * - * @param classname Top-level sendtable name. - * @param offset Property name. - * @return SendProp pointer on success, NULL on failure. + * @param classname Do not use. + * @param offset Do not use. + * @return Do not use. */ virtual SendProp *FindInSendTable(const char *classname, const char *offset) =0; @@ -118,6 +127,21 @@ namespace SourceMod * @return True if LAN server, false otherwise. */ virtual bool IsLANServer() =0; + + /** + * @brief Finds a send property in a named ServerClass. + * + * This version, unlike FindInSendTable(), correctly deduces the + * offsets of nested tables. + * + * @param classname ServerClass name (such as CBasePlayer). + * @param offset Offset name (such as m_iAmmo). + * @param info Buffer to store sm_sendprop_info_t data. + * @return True on success, false on failure. + */ + virtual bool FindSendPropInfo(const char *classname, + const char *offset, + sm_sendprop_info_t *info) =0; }; } From 59b5a6f879a26b1b765df6987f717fdeb25486a4 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 13 Jan 2008 08:17:47 +0000 Subject: [PATCH 165/263] fixed linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401854 --- core/HalfLife2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 2ea8faf2..3e642283 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -162,7 +162,7 @@ bool UTIL_FindInSendTable(SendTable *pTable, } } - return NULL; + return false; } typedescription_t *UTIL_FindInDataMap(datamap_t *pMap, const char *name) From 97062c4de8b1efd18f7f4cf46e37588cfb3dd59e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 19 Jan 2008 16:47:31 +0000 Subject: [PATCH 166/263] removed -msse from JIT --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401856 --- sourcepawn/jit/x86/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sourcepawn/jit/x86/Makefile b/sourcepawn/jit/x86/Makefile index 55148aac..cbb31238 100644 --- a/sourcepawn/jit/x86/Makefile +++ b/sourcepawn/jit/x86/Makefile @@ -32,7 +32,7 @@ endif GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-non-virtual-dtor -Werror -fPIC -fno-exceptions -fno-rtti -msse -DHAVE_STDINT_H +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -fno-rtti -DHAVE_STDINT_H ifeq "$(GCC_VERSION)" "4" CFLAGS += $(GCC4_FLAGS) From f939f472183ceebc3328ea9e80e73bc4f240a1c3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 19 Jan 2008 20:58:10 +0000 Subject: [PATCH 167/263] added some more doc to events --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401857 --- plugins/include/events.inc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/include/events.inc b/plugins/include/events.inc index fc189830..300703bd 100644 --- a/plugins/include/events.inc +++ b/plugins/include/events.inc @@ -108,6 +108,9 @@ native UnhookEvent(const String:name[], EventHook:callback, EventHookMode:mode=E /** * Creates a game event to be fired later. * + * The Handle should not be closed via CloseHandle(). It must be closed via + * FireEvent() or CancelCreatedEvent(). + * * @param name Name of event. * @param force If set to true, this forces the event to be created even if it's not being hooked. * Note that this will not force it if the event doesn't exist at all. @@ -119,6 +122,8 @@ native Handle:CreateEvent(const String:name[], bool:force=false); /** * Fires a game event. * + * This function closes the event Handle after completing. + * * @param event Handle to the event. * @param dontBroadcast Optional boolean that determines if event should be broadcast to clients. * @noreturn @@ -169,6 +174,11 @@ native GetEventInt(Handle:event, const String:key[]); /** * Sets the integer value of a game event's key. * + * Integer value refers to anything that can be reduced to an integer. + * The various size specifiers, such as "byte" and "short" are still + * integers, and only refer to how much data will actually be sent + * over the network (if applicable). + * * @param event Handle to the event. * @param key Name of event key. * @param value New integer value. From e30f612a2194df22dd6cae482607b19d8b306597 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Mon, 21 Jan 2008 02:01:22 +0000 Subject: [PATCH 168/263] Added new native SendConVarValue for networking fake convar values to individual clients --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401858 --- core/smn_console.cpp | 47 +++++++++++++++++++++++++++++++++++++ plugins/include/console.inc | 11 +++++++++ 2 files changed, 58 insertions(+) diff --git a/core/smn_console.cpp b/core/smn_console.cpp index fe4ace2b..e2be7a50 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -1196,6 +1196,52 @@ static cell_t FindNextConCommand(IPluginContext *pContext, const cell_t *params) return 1; } +static cell_t SendConVarValue(IPluginContext *pContext, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[2]); + HandleError err; + ConVar *pConVar; + + char *value; + pContext->LocalToString(params[3], &value); + + if ((err=g_ConVarManager.ReadConVarHandle(hndl, &pConVar)) + != HandleError_None) + { + return pContext->ThrowNativeError("Invalid convar handle %x (error %d)", hndl, err); + } + + char data[256]; + bf_write buffer(data, sizeof(data)); + + buffer.WriteUBitLong(NET_SETCONVAR, 5); + buffer.WriteByte(1); + buffer.WriteString(pConVar->GetName()); + buffer.WriteString(value); + + CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]); + + if (!pPlayer) + { + return pContext->ThrowNativeError("Client index %d is invalid", params[1]); + } + + if (!pPlayer->IsConnected()) + { + return pContext->ThrowNativeError("Client %d is not connected", params[1]); + } + + if (pPlayer->IsFakeClient()) + { + return pContext->ThrowNativeError("Client %d is fake and cannot be targeted", params[1]); + } + + INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(params[1])); + netchan->SendData(buffer); + + return 1; +} + REGISTER_NATIVES(consoleNatives) { {"CreateConVar", sm_CreateConVar}, @@ -1242,5 +1288,6 @@ REGISTER_NATIVES(consoleNatives) {"GetCommandFlags", GetCommandFlags}, {"FindFirstConCommand", FindFirstConCommand}, {"FindNextConCommand", FindNextConCommand}, + {"SendConVarValue", SendConVarValue}, {NULL, NULL} }; diff --git a/plugins/include/console.inc b/plugins/include/console.inc index 6869bdbd..d866d5bd 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -754,3 +754,14 @@ native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &f * contents of outputs is undefined. */ native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0); + +/** + * Replicates a convar value to a specific client. This does not change the actual convar value. + * + * @param client Client index + * @param convar ConVar handle + * @param value String value to send + * @return True on success, false on failure + * @error Invalid client index, client not in game, or client is fake + */ +native bool:SendConVarValue(client, Handle:convar, const String:value[]); From 89b6252f8e5c13554f9e0b5b22c7f7ac9e70b80e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 22 Jan 2008 16:47:10 +0000 Subject: [PATCH 169/263] fire requires timebomb --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401859 --- plugins/basefuncommands.sp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 519a6408..7505cf03 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -64,6 +64,13 @@ public Plugin:myinfo = #define CASH 1 // ------------------------------------------------------------------------------- +/** + * Fire requires timebomb + */ +#if TIMEBOMB == 0 && FIRE == 1 +#error "TimeBomb requires Fire" +#endif + new Handle:hTopMenu = INVALID_HANDLE; // Sounds From f50509abf0ce94155e99634ca318d0f12ca43f92 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 22 Jan 2008 17:04:59 +0000 Subject: [PATCH 170/263] added amb1378 - FileExists() for valve fs --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401860 --- core/smn_filesystem.cpp | 5 +++++ plugins/include/files.inc | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index eeec4886..124371a4 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -288,6 +288,11 @@ static cell_t sm_FileExists(IPluginContext *pContext, const cell_t *params) return 0; } + if (params[0] >= 2 && params[2] == 1) + { + return basefilesystem->FileExists(name) ? 1 : 0; + } + char realpath[PLATFORM_MAX_PATH]; g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name); #ifdef PLATFORM_WINDOWS diff --git a/plugins/include/files.inc b/plugins/include/files.inc index e8767e66..20f3424c 100644 --- a/plugins/include/files.inc +++ b/plugins/include/files.inc @@ -302,9 +302,13 @@ native FilePosition(Handle:file); * Checks if a file exists. * * @param path Path to the file. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to check for the existance of files + * inside GCFs or the game cache, rather than solely files + * that are on disk. * @return True if the file exists, false otherwise. */ -native bool:FileExists(const String:path[]); +native bool:FileExists(const String:path[], bool:use_valve_fs=false); /** * Renames a file. From 38012bf3e64d16bc9551d25be92512468ee42e02 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 22 Jan 2008 17:18:15 +0000 Subject: [PATCH 171/263] added amb1383 - data value to filter functions --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401861 --- extensions/sdktools/trnatives.cpp | 30 +++++++- plugins/include/sdktools_trace.inc | 115 ++++++++++++++++++----------- 2 files changed, 99 insertions(+), 46 deletions(-) diff --git a/extensions/sdktools/trnatives.cpp b/extensions/sdktools/trnatives.cpp index 9ac7921d..4fb07d93 100644 --- a/extensions/sdktools/trnatives.cpp +++ b/extensions/sdktools/trnatives.cpp @@ -41,16 +41,19 @@ public: edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(pEntity)); m_pFunc->PushCell(engine->IndexOfEdict(pEdict)); m_pFunc->PushCell(contentsMask); + m_pFunc->PushCell(m_Data); m_pFunc->Execute(&res); return (res) ? true : false; } - void SetFunctionPtr(IPluginFunction *pFunc) + void SetFunctionPtr(IPluginFunction *pFunc, cell_t data) { m_pFunc = pFunc; + m_Data = data; } private: IPluginFunction *m_pFunc; + cell_t m_Data; }; /* Used for the global trace version */ @@ -105,13 +108,24 @@ static cell_t smn_TRTraceRayFilter(IPluginContext *pContext, const cell_t *param { cell_t *startaddr, *endaddr; IPluginFunction *pFunc; + cell_t data; pFunc = pContext->GetFunctionById(params[5]); if (!pFunc) { return pContext->ThrowNativeError("Invalid function id (%X)", params[5]); } - g_SMTraceFilter.SetFunctionPtr(pFunc); + + if (params[0] >= 6) + { + data = params[6]; + } + else + { + data = 0; + } + + g_SMTraceFilter.SetFunctionPtr(pFunc, data); pContext->LocalToPhysAddr(params[1], &startaddr); pContext->LocalToPhysAddr(params[2], &endaddr); @@ -192,6 +206,7 @@ static cell_t smn_TRTraceRayFilterEx(IPluginContext *pContext, const cell_t *par { IPluginFunction *pFunc; cell_t *startaddr, *endaddr; + cell_t data; pFunc = pContext->GetFunctionById(params[5]); if (!pFunc) @@ -205,7 +220,16 @@ static cell_t smn_TRTraceRayFilterEx(IPluginContext *pContext, const cell_t *par CSMTraceFilter smfilter; Ray_t ray; - smfilter.SetFunctionPtr(pFunc); + if (params[0] >= 6) + { + data = params[6]; + } + else + { + data = 0; + } + + smfilter.SetFunctionPtr(pFunc, data); StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); switch (params[4]) diff --git a/plugins/include/sdktools_trace.inc b/plugins/include/sdktools_trace.inc index 7fa47f0d..df651afb 100644 --- a/plugins/include/sdktools_trace.inc +++ b/plugins/include/sdktools_trace.inc @@ -44,9 +44,9 @@ #define CONTENTS_WATER 0x20 #define CONTENTS_MIST 0x40 #define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ -#define LAST_VISIBLE_CONTENTS 0x80 -#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) -#define CONTENTS_TESTFOGVOLUME 0x100 +#define LAST_VISIBLE_CONTENTS 0x80 +#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) +#define CONTENTS_TESTFOGVOLUME 0x100 #define CONTENTS_UNUSED5 0x200 #define CONTENTS_UNUSED6 0x4000 #define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ @@ -55,17 +55,17 @@ #define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ #define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ #define CONTENTS_PLAYERCLIP 0x10000 -#define CONTENTS_MONSTERCLIP 0x20000 +#define CONTENTS_MONSTERCLIP 0x20000 /** * @section currents can be added to any other contents, and may be mixed */ #define CONTENTS_CURRENT_0 0x40000 #define CONTENTS_CURRENT_90 0x80000 -#define CONTENTS_CURRENT_180 0x100000 -#define CONTENTS_CURRENT_270 0x200000 +#define CONTENTS_CURRENT_180 0x100000 +#define CONTENTS_CURRENT_270 0x200000 #define CONTENTS_CURRENT_UP 0x400000 -#define CONTENTS_CURRENT_DOWN 0x800000 +#define CONTENTS_CURRENT_DOWN 0x800000 /** * @endsection @@ -75,30 +75,30 @@ #define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ #define CONTENTS_DEBRIS 0x4000000 #define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ -#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ +#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ #define CONTENTS_LADDER 0x20000000 #define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ /** * @section Trace masks. */ -#define MASK_ALL (0xFFFFFFFF) -#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ +#define MASK_ALL (0xFFFFFFFF) +#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ #define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ #define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ -#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ -#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ -#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ +#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ +#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ +#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ #define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ -#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ -#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ +#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ +#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ #define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ #define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ -#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ +#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ #define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ -#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ +#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ #define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ -#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ +#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ /** * @endsection @@ -110,21 +110,34 @@ enum RayType RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ }; -/** - * Called on entity filtering. - * - * @param entity Entity index. - * @param contentsMask Contents Mask. - * @return True to allow the current entity to be hit, otherwise false. - */ -functag TraceEntityFilter bool:public(entity, contentsMask); +funcenum TraceEntityFilter +{ + /** + * Called on entity filtering. + * + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @return True to allow the current entity to be hit, otherwise false. + */ + bool:public(entity, contentsMask), + + /** + * Called on entity filtering. + * + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @param data Data value, if used. + * @return True to allow the current entity to be hit, otherwise false. + */ + bool:public(entity, contentsMask, any:data), +}; /** * Get the contents mask and the entity index at the given position. * * @param pos World position to test. * @param entindex Entity index found at the given position (by reference). - * @return Contents mask. + * @return Contents mask. */ native TR_GetPointContents(const Float:pos[3], &entindex=-1); @@ -133,7 +146,7 @@ native TR_GetPointContents(const Float:pos[3], &entindex=-1); * * @param entindex Entity index to test. * @param pos World position. - * @return Contents mask. + * @return Contents mask. */ native TR_GetPointContentsEnt(entindex, const Float:pos[3]); @@ -151,14 +164,23 @@ native TR_TraceRay(const Float:pos[3], const Float:vec[3], flags, RayType:rtype) /** * Starts up a new trace ray using a global trace result and a customized trace ray filter. * + * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is + * currently not allowed and may not work. + * * @param pos Starting position of the ray. * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. * @param flags Trace flags. * @param rtype Method to calculate the ray direction. * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter function. * @noreturn */ -native TR_TraceRayFilter(const Float:pos[3], const Float:vec[3], flags, RayType:rtype, TraceEntityFilter:filter); +native TR_TraceRayFilter(const Float:pos[3], + const Float:vec[3], + flags, + RayType:rtype, + TraceEntityFilter:filter, + any:data=0); /** * Starts up a new trace ray using a new trace result. @@ -167,30 +189,37 @@ native TR_TraceRayFilter(const Float:pos[3], const Float:vec[3], flags, RayType: * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. * @param flags Trace flags. * @param rtype Method to calculate the ray direction. - * @return Ray trace handle. - * @note Traces are closed with CloseHandle(). + * @return Ray trace handle, which must be closed via CloseHandle(). */ native Handle:TR_TraceRayEx(const Float:pos[3], const Float:vec[3], flags, RayType:rtype); /** * Starts up a new trace ray using a new trace result and a customized trace ray filter. * + * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is + * currently not allowed and may not work. + * * @param pos Starting position of the ray. * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. * @param flags Trace flags. * @param rtype Method to calculate the ray direction. * @param filter Function to use as a filter. - * @return Ray trace handle. - * @note Traces are closed with CloseHandle(). + * @param data Arbitrary data value to pass through to the filter function. + * @return Ray trace handle, which must be closed via CloseHandle(). */ -native Handle:TR_TraceRayFilterEx(const Float:pos[3], const Float:vec[3], flags, RayType:rtype, TraceEntityFilter:filter); +native Handle:TR_TraceRayFilterEx(const Float:pos[3], + const Float:vec[3], + flags, + RayType:rtype, + TraceEntityFilter:filter, + any:data=0); /** * Returns the time fraction from a trace result (1.0 means no collision). * * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Time fraction value of the trace. - * @error Invalid Handle. + * @return Time fraction value of the trace. + * @error Invalid Handle. */ native Float:TR_GetFraction(Handle:hndl=INVALID_HANDLE); @@ -200,7 +229,7 @@ native Float:TR_GetFraction(Handle:hndl=INVALID_HANDLE); * @param pos Vector buffer to store data in. * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. * @noreturn - * @error Invalid Handle. + * @error Invalid Handle. */ native TR_GetEndPosition(Float:pos[3], Handle:hndl=INVALID_HANDLE); @@ -208,8 +237,8 @@ native TR_GetEndPosition(Float:pos[3], Handle:hndl=INVALID_HANDLE); * Returns the entity index that collided with the trace. * * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Entity index or -1 for no collision. - * @error Invalid Handle. + * @return Entity index or -1 for no collision. + * @error Invalid Handle. */ native TR_GetEntityIndex(Handle:hndl=INVALID_HANDLE); @@ -217,8 +246,8 @@ native TR_GetEntityIndex(Handle:hndl=INVALID_HANDLE); * Returns if there was any kind of collision along the trace ray. * * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return True if any collision found, otherwise false. - * @error Invalid Handle. + * @return True if any collision found, otherwise false. + * @error Invalid Handle. */ native bool:TR_DidHit(Handle:hndl=INVALID_HANDLE); @@ -226,7 +255,7 @@ native bool:TR_DidHit(Handle:hndl=INVALID_HANDLE); * Returns in which body hit group the trace collided if any. * * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Body hit group. - * @error Invalid Handle. + * @return Body hit group. + * @error Invalid Handle. */ native TR_GetHitGroup(Handle:hndl=INVALID_HANDLE); From 85eaa3137449bcb106d70cac2095aa1296cbe894 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 22 Jan 2008 17:30:58 +0000 Subject: [PATCH 172/263] fixed amb1400 - invalid dereference caused crash in ternary operators --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401862 --- sourcepawn/compiler/sc3.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sourcepawn/compiler/sc3.c b/sourcepawn/compiler/sc3.c index 19332800..2ef2be5c 100644 --- a/sourcepawn/compiler/sc3.c +++ b/sourcepawn/compiler/sc3.c @@ -1329,7 +1329,9 @@ static int hier13(value *lval) array1= (lval->ident==iARRAY || lval->ident==iREFARRAY); array2= (lval2.ident==iARRAY || lval2.ident==iREFARRAY); if (array1 && !array2) { - char *ptr=(lval->sym->name!=NULL) ? lval->sym->name : "-unknown-"; + const char *ptr = "-unknown-"; + if (lval->sym != NULL && lval->sym->name != NULL) + ptr = lval->sym->name; error(33,ptr); /* array must be indexed */ } else if (!array1 && array2) { char *ptr=(lval2.sym->name!=NULL) ? lval2.sym->name : "-unknown-"; @@ -1570,7 +1572,7 @@ static int hier2(value *lval) if (level>sym->dim.array.level+1) { error(28,sym->name); /* invalid subscript */ } else if (level==sym->dim.array.level+1) { - lval->constval= (idxsym!=NULL && idxsym->dim.array.length>0) ? idxsym->dim.array.length : 1; + lval->constval=(idxsym!=NULL && idxsym->dim.array.length>0) ? idxsym->dim.array.length : 1; } else { lval->constval=array_levelsize(sym,level); } From aba5378f95da9f4a1fefef4ed9611e19ec0b9e7a Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Tue, 22 Jan 2008 22:53:41 +0000 Subject: [PATCH 173/263] fixed amb1373 - off-by-one error a helper routine prevented CS natives from using the last client --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401863 --- extensions/cstrike/natives.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/cstrike/natives.cpp b/extensions/cstrike/natives.cpp index ce711e68..b97f070e 100644 --- a/extensions/cstrike/natives.cpp +++ b/extensions/cstrike/natives.cpp @@ -49,14 +49,16 @@ inline CBaseEntity *GetCBaseEntity(int num, bool isplayer) return NULL; } - if (num > 0 && num < playerhelpers->GetMaxClients()) + if (num > 0 && num <= playerhelpers->GetMaxClients()) { IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(pEdict); if (!pPlayer || !pPlayer->IsConnected()) { return NULL; } - } else if (isplayer) { + } + else if (isplayer) + { return NULL; } From e5539962816e5f1048851bf54d362042600609dc Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 23 Jan 2008 03:18:36 +0000 Subject: [PATCH 174/263] fixed amb1408 - compiler did not warn about invalid public usage --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401864 --- sourcepawn/compiler/sc1.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sourcepawn/compiler/sc1.c b/sourcepawn/compiler/sc1.c index fc304674..75828758 100644 --- a/sourcepawn/compiler/sc1.c +++ b/sourcepawn/compiler/sc1.c @@ -4136,6 +4136,8 @@ static int newfunc(char *firstname,int firsttag,int fpublic,int fstatic,int stoc /* "declargs()" found the ")"; if a ";" appears after this, it was a * prototype */ if (matchtoken(';')) { + if (sym->usage & uPUBLIC) + error(10); sym->usage|=uFORWARD; if (!sc_needsemicolon) error(10); /* old style prototypes used with optional semicolumns */ From 4ade0dbdc26c84ee6614ce4b7ed710c5fb4ebff6 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 23 Jan 2008 17:05:50 +0000 Subject: [PATCH 175/263] added amb1403 - CBaseTrace.plane from pRED --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401865 --- extensions/sdktools/trnatives.cpp | 862 +++++++++++++++-------------- plugins/include/sdktools_trace.inc | 532 +++++++++--------- 2 files changed, 715 insertions(+), 679 deletions(-) diff --git a/extensions/sdktools/trnatives.cpp b/extensions/sdktools/trnatives.cpp index 4fb07d93..5f19a72a 100644 --- a/extensions/sdktools/trnatives.cpp +++ b/extensions/sdktools/trnatives.cpp @@ -1,418 +1,444 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#include "extension.h" -#include <worldsize.h> - -class CSMTraceFilter : public CTraceFilter -{ -public: - bool ShouldHitEntity(IHandleEntity *pEntity, int contentsMask) - { - cell_t res = 1; - edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(pEntity)); - m_pFunc->PushCell(engine->IndexOfEdict(pEdict)); - m_pFunc->PushCell(contentsMask); - m_pFunc->PushCell(m_Data); - m_pFunc->Execute(&res); - - return (res) ? true : false; - } - void SetFunctionPtr(IPluginFunction *pFunc, cell_t data) - { - m_pFunc = pFunc; - m_Data = data; - } -private: - IPluginFunction *m_pFunc; - cell_t m_Data; -}; - -/* Used for the global trace version */ -Ray_t g_Ray; -trace_t g_Trace; -Vector g_StartVec; -Vector g_EndVec; -QAngle g_DirAngles; -CTraceFilterHitAll g_HitAllFilter; -CSMTraceFilter g_SMTraceFilter; - -enum -{ - RayType_EndPoint, - RayType_Infinite -}; - -static cell_t smn_TRTraceRay(IPluginContext *pContext, const cell_t *params) -{ - cell_t *startaddr, *endaddr; - pContext->LocalToPhysAddr(params[1], &startaddr); - pContext->LocalToPhysAddr(params[2], &endaddr); - - g_StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); - - switch (params[4]) - { - case RayType_EndPoint: - { - g_EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - break; - } - case RayType_Infinite: - { - g_DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - AngleVectors(g_DirAngles, &g_EndVec); - - /* Make it unitary and get the ending point */ - g_EndVec.NormalizeInPlace(); - g_EndVec = g_StartVec + g_EndVec * MAX_TRACE_LENGTH; - break; - } - } - - g_Ray.Init(g_StartVec, g_EndVec); - enginetrace->TraceRay(g_Ray, params[3], &g_HitAllFilter, &g_Trace); - - return 1; -} - -static cell_t smn_TRTraceRayFilter(IPluginContext *pContext, const cell_t *params) -{ - cell_t *startaddr, *endaddr; - IPluginFunction *pFunc; - cell_t data; - - pFunc = pContext->GetFunctionById(params[5]); - if (!pFunc) - { - return pContext->ThrowNativeError("Invalid function id (%X)", params[5]); - } - - if (params[0] >= 6) - { - data = params[6]; - } - else - { - data = 0; - } - - g_SMTraceFilter.SetFunctionPtr(pFunc, data); - pContext->LocalToPhysAddr(params[1], &startaddr); - pContext->LocalToPhysAddr(params[2], &endaddr); - - g_StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); - - switch (params[4]) - { - case RayType_EndPoint: - { - g_EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - break; - } - case RayType_Infinite: - { - g_DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - AngleVectors(g_DirAngles, &g_EndVec); - - /* Make it unitary and get the ending point */ - g_EndVec.NormalizeInPlace(); - g_EndVec = g_StartVec + g_EndVec * MAX_TRACE_LENGTH; - break; - } - } - - g_Ray.Init(g_StartVec, g_EndVec); - enginetrace->TraceRay(g_Ray, params[3], &g_SMTraceFilter, &g_Trace); - - return 1; -} - -static cell_t smn_TRTraceRayEx(IPluginContext *pContext, const cell_t *params) -{ - cell_t *startaddr, *endaddr; - pContext->LocalToPhysAddr(params[1], &startaddr); - pContext->LocalToPhysAddr(params[2], &endaddr); - - Vector StartVec, EndVec; - Ray_t ray; - - StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); - - switch (params[4]) - { - case RayType_EndPoint: - { - EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - break; - } - case RayType_Infinite: - { - QAngle DirAngles; - DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - AngleVectors(DirAngles, &EndVec); - - /* Make it unitary and get the ending point */ - EndVec.NormalizeInPlace(); - EndVec = StartVec + EndVec * MAX_TRACE_LENGTH; - break; - } - } - - trace_t *tr = new trace_t; - ray.Init(StartVec, EndVec); - enginetrace->TraceRay(ray, params[3], &g_HitAllFilter, tr); - - HandleError herr; - Handle_t hndl; - if (!(hndl=handlesys->CreateHandle(g_TraceHandle, tr, pContext->GetIdentity(), myself->GetIdentity(), &herr))) - { - delete tr; - return pContext->ThrowNativeError("Unable to create a new trace handle (error %d)", herr); - } - - return hndl; -} - -static cell_t smn_TRTraceRayFilterEx(IPluginContext *pContext, const cell_t *params) -{ - IPluginFunction *pFunc; - cell_t *startaddr, *endaddr; - cell_t data; - - pFunc = pContext->GetFunctionById(params[5]); - if (!pFunc) - { - return pContext->ThrowNativeError("Invalid function id (%X)", params[5]); - } - pContext->LocalToPhysAddr(params[1], &startaddr); - pContext->LocalToPhysAddr(params[2], &endaddr); - - Vector StartVec, EndVec; - CSMTraceFilter smfilter; - Ray_t ray; - - if (params[0] >= 6) - { - data = params[6]; - } - else - { - data = 0; - } - - smfilter.SetFunctionPtr(pFunc, data); - StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); - - switch (params[4]) - { - case RayType_EndPoint: - { - EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - break; - } - case RayType_Infinite: - { - QAngle DirAngles; - DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); - AngleVectors(DirAngles, &EndVec); - - /* Make it unitary and get the ending point */ - EndVec.NormalizeInPlace(); - EndVec = StartVec + EndVec * MAX_TRACE_LENGTH; - break; - } - } - - trace_t *tr = new trace_t; - ray.Init(StartVec, EndVec); - enginetrace->TraceRay(ray, params[3], &smfilter, tr); - - HandleError herr; - Handle_t hndl; - if (!(hndl=handlesys->CreateHandle(g_TraceHandle, tr, pContext->GetIdentity(), myself->GetIdentity(), &herr))) - { - delete tr; - return pContext->ThrowNativeError("Unable to create a new trace handle (error %d)", herr); - } - - return hndl; -} - -static cell_t smn_TRGetFraction(IPluginContext *pContext, const cell_t *params) -{ - trace_t *tr; - HandleError err; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if (params[1] == BAD_HANDLE) - { - tr = &g_Trace; - } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { - return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); - } - - return sp_ftoc(tr->fraction); -} - -static cell_t smn_TRGetEndPosition(IPluginContext *pContext, const cell_t *params) -{ - trace_t *tr; - HandleError err; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if (params[2] == BAD_HANDLE) - { - tr = &g_Trace; - } else if ((err = handlesys->ReadHandle(params[2], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { - return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[2], err); - } - - cell_t *addr; - pContext->LocalToPhysAddr(params[1], &addr); - - addr[0] = sp_ftoc(tr->endpos.x); - addr[1] = sp_ftoc(tr->endpos.y); - addr[2] = sp_ftoc(tr->endpos.z); - - return 1; -} - -static cell_t smn_TRDidHit(IPluginContext *pContext, const cell_t *params) -{ - trace_t *tr; - HandleError err; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if (params[1] == BAD_HANDLE) - { - tr = &g_Trace; - } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { - return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); - } - - return tr->DidHit() ? 1 : 0; -} - -static cell_t smn_TRGetHitGroup(IPluginContext *pContext, const cell_t *params) -{ - trace_t *tr; - HandleError err; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if (params[1] == BAD_HANDLE) - { - tr = &g_Trace; - } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { - return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); - } - - return tr->hitgroup; -} - -static cell_t smn_TRGetEntityIndex(IPluginContext *pContext, const cell_t *params) -{ - trace_t *tr; - HandleError err; - HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); - - if (params[1] == BAD_HANDLE) - { - tr = &g_Trace; - } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { - return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); - } - - edict_t *pEdict = gameents->BaseEntityToEdict(tr->m_pEnt); - return engine->IndexOfEdict(pEdict); -} - -static cell_t smn_TRGetPointContents(IPluginContext *pContext, const cell_t *params) -{ - cell_t *vec, *ent; - IHandleEntity *hentity; - Vector pos; - int mask; - - pContext->LocalToPhysAddr(params[1], &vec); - pContext->LocalToPhysAddr(params[2], &ent); - - pos.x = sp_ctof(vec[0]); - pos.y = sp_ctof(vec[1]); - pos.z = sp_ctof(vec[2]); - - if (*ent == -1) - { - mask = enginetrace->GetPointContents(pos); - } else { - mask = enginetrace->GetPointContents(pos, &hentity); - edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(hentity)); - *ent = engine->IndexOfEdict(pEdict); - } - - return mask; -} - -static cell_t smn_TRGetPointContentsEnt(IPluginContext *pContext, const cell_t *params) -{ - edict_t *pEdict = engine->PEntityOfEntIndex(params[1]); - if (!pEdict || pEdict->IsFree()) - { - return pContext->ThrowNativeError("Entity %d is invalid", params[1]); - } - - cell_t *addr; - Vector pos; - - pContext->LocalToPhysAddr(params[2], &addr); - - pos.x = sp_ctof(addr[0]); - pos.y = sp_ctof(addr[1]); - pos.z = sp_ctof(addr[2]); - - return enginetrace->GetPointContents_Collideable(pEdict->GetCollideable(), pos); -} - -sp_nativeinfo_t g_TRNatives[] = -{ - {"TR_TraceRay", smn_TRTraceRay}, - {"TR_TraceRayEx", smn_TRTraceRayEx}, - {"TR_GetFraction", smn_TRGetFraction}, - {"TR_GetEndPosition", smn_TRGetEndPosition}, - {"TR_GetEntityIndex", smn_TRGetEntityIndex}, - {"TR_DidHit", smn_TRDidHit}, - {"TR_GetHitGroup", smn_TRGetHitGroup}, - {"TR_GetPointContents", smn_TRGetPointContents}, - {"TR_GetPointContentsEnt", smn_TRGetPointContentsEnt}, - {"TR_TraceRayFilter", smn_TRTraceRayFilter}, - {"TR_TraceRayFilterEx", smn_TRTraceRayFilterEx}, - {NULL, NULL} -}; +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SDKTools Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" +#include <worldsize.h> + +class CSMTraceFilter : public CTraceFilter +{ +public: + bool ShouldHitEntity(IHandleEntity *pEntity, int contentsMask) + { + cell_t res = 1; + edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(pEntity)); + m_pFunc->PushCell(engine->IndexOfEdict(pEdict)); + m_pFunc->PushCell(contentsMask); + m_pFunc->PushCell(m_Data); + m_pFunc->Execute(&res); + + return (res) ? true : false; + } + void SetFunctionPtr(IPluginFunction *pFunc, cell_t data) + { + m_pFunc = pFunc; + m_Data = data; + } +private: + IPluginFunction *m_pFunc; + cell_t m_Data; +}; + +/* Used for the global trace version */ +Ray_t g_Ray; +trace_t g_Trace; +Vector g_StartVec; +Vector g_EndVec; +QAngle g_DirAngles; +CTraceFilterHitAll g_HitAllFilter; +CSMTraceFilter g_SMTraceFilter; + +enum +{ + RayType_EndPoint, + RayType_Infinite +}; + +static cell_t smn_TRTraceRay(IPluginContext *pContext, const cell_t *params) +{ + cell_t *startaddr, *endaddr; + pContext->LocalToPhysAddr(params[1], &startaddr); + pContext->LocalToPhysAddr(params[2], &endaddr); + + g_StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); + + switch (params[4]) + { + case RayType_EndPoint: + { + g_EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + break; + } + case RayType_Infinite: + { + g_DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + AngleVectors(g_DirAngles, &g_EndVec); + + /* Make it unitary and get the ending point */ + g_EndVec.NormalizeInPlace(); + g_EndVec = g_StartVec + g_EndVec * MAX_TRACE_LENGTH; + break; + } + } + + g_Ray.Init(g_StartVec, g_EndVec); + enginetrace->TraceRay(g_Ray, params[3], &g_HitAllFilter, &g_Trace); + + return 1; +} + +static cell_t smn_TRTraceRayFilter(IPluginContext *pContext, const cell_t *params) +{ + cell_t *startaddr, *endaddr; + IPluginFunction *pFunc; + cell_t data; + + pFunc = pContext->GetFunctionById(params[5]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[5]); + } + + if (params[0] >= 6) + { + data = params[6]; + } + else + { + data = 0; + } + + g_SMTraceFilter.SetFunctionPtr(pFunc, data); + pContext->LocalToPhysAddr(params[1], &startaddr); + pContext->LocalToPhysAddr(params[2], &endaddr); + + g_StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); + + switch (params[4]) + { + case RayType_EndPoint: + { + g_EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + break; + } + case RayType_Infinite: + { + g_DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + AngleVectors(g_DirAngles, &g_EndVec); + + /* Make it unitary and get the ending point */ + g_EndVec.NormalizeInPlace(); + g_EndVec = g_StartVec + g_EndVec * MAX_TRACE_LENGTH; + break; + } + } + + g_Ray.Init(g_StartVec, g_EndVec); + enginetrace->TraceRay(g_Ray, params[3], &g_SMTraceFilter, &g_Trace); + + return 1; +} + +static cell_t smn_TRTraceRayEx(IPluginContext *pContext, const cell_t *params) +{ + cell_t *startaddr, *endaddr; + pContext->LocalToPhysAddr(params[1], &startaddr); + pContext->LocalToPhysAddr(params[2], &endaddr); + + Vector StartVec, EndVec; + Ray_t ray; + + StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); + + switch (params[4]) + { + case RayType_EndPoint: + { + EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + break; + } + case RayType_Infinite: + { + QAngle DirAngles; + DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + AngleVectors(DirAngles, &EndVec); + + /* Make it unitary and get the ending point */ + EndVec.NormalizeInPlace(); + EndVec = StartVec + EndVec * MAX_TRACE_LENGTH; + break; + } + } + + trace_t *tr = new trace_t; + ray.Init(StartVec, EndVec); + enginetrace->TraceRay(ray, params[3], &g_HitAllFilter, tr); + + HandleError herr; + Handle_t hndl; + if (!(hndl=handlesys->CreateHandle(g_TraceHandle, tr, pContext->GetIdentity(), myself->GetIdentity(), &herr))) + { + delete tr; + return pContext->ThrowNativeError("Unable to create a new trace handle (error %d)", herr); + } + + return hndl; +} + +static cell_t smn_TRTraceRayFilterEx(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunc; + cell_t *startaddr, *endaddr; + cell_t data; + + pFunc = pContext->GetFunctionById(params[5]); + if (!pFunc) + { + return pContext->ThrowNativeError("Invalid function id (%X)", params[5]); + } + pContext->LocalToPhysAddr(params[1], &startaddr); + pContext->LocalToPhysAddr(params[2], &endaddr); + + Vector StartVec, EndVec; + CSMTraceFilter smfilter; + Ray_t ray; + + if (params[0] >= 6) + { + data = params[6]; + } + else + { + data = 0; + } + + smfilter.SetFunctionPtr(pFunc, data); + StartVec.Init(sp_ctof(startaddr[0]), sp_ctof(startaddr[1]), sp_ctof(startaddr[2])); + + switch (params[4]) + { + case RayType_EndPoint: + { + EndVec.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + break; + } + case RayType_Infinite: + { + QAngle DirAngles; + DirAngles.Init(sp_ctof(endaddr[0]), sp_ctof(endaddr[1]), sp_ctof(endaddr[2])); + AngleVectors(DirAngles, &EndVec); + + /* Make it unitary and get the ending point */ + EndVec.NormalizeInPlace(); + EndVec = StartVec + EndVec * MAX_TRACE_LENGTH; + break; + } + } + + trace_t *tr = new trace_t; + ray.Init(StartVec, EndVec); + enginetrace->TraceRay(ray, params[3], &smfilter, tr); + + HandleError herr; + Handle_t hndl; + if (!(hndl=handlesys->CreateHandle(g_TraceHandle, tr, pContext->GetIdentity(), myself->GetIdentity(), &herr))) + { + delete tr; + return pContext->ThrowNativeError("Unable to create a new trace handle (error %d)", herr); + } + + return hndl; +} + +static cell_t smn_TRGetFraction(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[1] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + return sp_ftoc(tr->fraction); +} + +static cell_t smn_TRGetPlaneNormal(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[1] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + Vector *normal = &tr->plane.normal; + + cell_t *r; + pContext->LocalToPhysAddr(params[2], &r); + r[0] = sp_ftoc(normal->x); + r[1] = sp_ftoc(normal->y); + r[2] = sp_ftoc(normal->z); + + return 1; +} + + +static cell_t smn_TRGetEndPosition(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[2] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[2], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[2], err); + } + + cell_t *addr; + pContext->LocalToPhysAddr(params[1], &addr); + + addr[0] = sp_ftoc(tr->endpos.x); + addr[1] = sp_ftoc(tr->endpos.y); + addr[2] = sp_ftoc(tr->endpos.z); + + return 1; +} + +static cell_t smn_TRDidHit(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[1] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + return tr->DidHit() ? 1 : 0; +} + +static cell_t smn_TRGetHitGroup(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[1] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + return tr->hitgroup; +} + +static cell_t smn_TRGetEntityIndex(IPluginContext *pContext, const cell_t *params) +{ + trace_t *tr; + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + if (params[1] == BAD_HANDLE) + { + tr = &g_Trace; + } else if ((err = handlesys->ReadHandle(params[1], g_TraceHandle, &sec, (void **)&tr)) != HandleError_None) { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err); + } + + edict_t *pEdict = gameents->BaseEntityToEdict(tr->m_pEnt); + return engine->IndexOfEdict(pEdict); +} + +static cell_t smn_TRGetPointContents(IPluginContext *pContext, const cell_t *params) +{ + cell_t *vec, *ent; + IHandleEntity *hentity; + Vector pos; + int mask; + + pContext->LocalToPhysAddr(params[1], &vec); + pContext->LocalToPhysAddr(params[2], &ent); + + pos.x = sp_ctof(vec[0]); + pos.y = sp_ctof(vec[1]); + pos.z = sp_ctof(vec[2]); + + if (*ent == -1) + { + mask = enginetrace->GetPointContents(pos); + } else { + mask = enginetrace->GetPointContents(pos, &hentity); + edict_t *pEdict = gameents->BaseEntityToEdict(reinterpret_cast<CBaseEntity *>(hentity)); + *ent = engine->IndexOfEdict(pEdict); + } + + return mask; +} + +static cell_t smn_TRGetPointContentsEnt(IPluginContext *pContext, const cell_t *params) +{ + edict_t *pEdict = engine->PEntityOfEntIndex(params[1]); + if (!pEdict || pEdict->IsFree()) + { + return pContext->ThrowNativeError("Entity %d is invalid", params[1]); + } + + cell_t *addr; + Vector pos; + + pContext->LocalToPhysAddr(params[2], &addr); + + pos.x = sp_ctof(addr[0]); + pos.y = sp_ctof(addr[1]); + pos.z = sp_ctof(addr[2]); + + return enginetrace->GetPointContents_Collideable(pEdict->GetCollideable(), pos); +} + +sp_nativeinfo_t g_TRNatives[] = +{ + {"TR_TraceRay", smn_TRTraceRay}, + {"TR_TraceRayEx", smn_TRTraceRayEx}, + {"TR_GetFraction", smn_TRGetFraction}, + {"TR_GetEndPosition", smn_TRGetEndPosition}, + {"TR_GetEntityIndex", smn_TRGetEntityIndex}, + {"TR_DidHit", smn_TRDidHit}, + {"TR_GetHitGroup", smn_TRGetHitGroup}, + {"TR_GetPointContents", smn_TRGetPointContents}, + {"TR_GetPointContentsEnt", smn_TRGetPointContentsEnt}, + {"TR_TraceRayFilter", smn_TRTraceRayFilter}, + {"TR_TraceRayFilterEx", smn_TRTraceRayFilterEx}, + {"TR_GetPlaneNormal", smn_TRGetPlaneNormal}, + {NULL, NULL} +}; diff --git a/plugins/include/sdktools_trace.inc b/plugins/include/sdktools_trace.inc index df651afb..b9a0b82b 100644 --- a/plugins/include/sdktools_trace.inc +++ b/plugins/include/sdktools_trace.inc @@ -1,261 +1,271 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This file is part of the SourceMod/SourcePawn SDK. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#if defined _sdktools_trace_included - #endinput -#endif -#define _sdktools_trace_included - -#define CONTENTS_EMPTY 0 /**< No contents. */ -#define CONTENTS_SOLID 0x1 /**< an eye is never valid in a solid . */ -#define CONTENTS_WINDOW 0x2 /**< translucent, but not watery (glass). */ -#define CONTENTS_AUX 0x4 -#define CONTENTS_GRATE 0x8 /**< alpha-tested "grate" textures. Bullets/sight pass through, but solids don't. */ -#define CONTENTS_SLIME 0x10 -#define CONTENTS_WATER 0x20 -#define CONTENTS_MIST 0x40 -#define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ -#define LAST_VISIBLE_CONTENTS 0x80 -#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) -#define CONTENTS_TESTFOGVOLUME 0x100 -#define CONTENTS_UNUSED5 0x200 -#define CONTENTS_UNUSED6 0x4000 -#define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ -#define CONTENTS_TEAM2 0x1000 /**< between players and objects on different teams. */ -#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 /**< ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW. */ -#define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ -#define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ -#define CONTENTS_PLAYERCLIP 0x10000 -#define CONTENTS_MONSTERCLIP 0x20000 - -/** - * @section currents can be added to any other contents, and may be mixed - */ -#define CONTENTS_CURRENT_0 0x40000 -#define CONTENTS_CURRENT_90 0x80000 -#define CONTENTS_CURRENT_180 0x100000 -#define CONTENTS_CURRENT_270 0x200000 -#define CONTENTS_CURRENT_UP 0x400000 -#define CONTENTS_CURRENT_DOWN 0x800000 - -/** - * @endsection - */ - -#define CONTENTS_ORIGIN 0x1000000 /**< removed before bsping an entity. */ -#define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ -#define CONTENTS_DEBRIS 0x4000000 -#define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ -#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ -#define CONTENTS_LADDER 0x20000000 -#define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ - -/** - * @section Trace masks. - */ -#define MASK_ALL (0xFFFFFFFF) -#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ -#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ -#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ -#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ -#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ -#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ -#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ -#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ -#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ -#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ -#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ -#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ -#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ -#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ -#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ -#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ - -/** - * @endsection - */ - -enum RayType -{ - RayType_EndPoint, /**< The trace ray will go from the start position to the end position. */ - RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ -}; - -funcenum TraceEntityFilter -{ - /** - * Called on entity filtering. - * - * @param entity Entity index. - * @param contentsMask Contents Mask. - * @return True to allow the current entity to be hit, otherwise false. - */ - bool:public(entity, contentsMask), - - /** - * Called on entity filtering. - * - * @param entity Entity index. - * @param contentsMask Contents Mask. - * @param data Data value, if used. - * @return True to allow the current entity to be hit, otherwise false. - */ - bool:public(entity, contentsMask, any:data), -}; - -/** - * Get the contents mask and the entity index at the given position. - * - * @param pos World position to test. - * @param entindex Entity index found at the given position (by reference). - * @return Contents mask. - */ -native TR_GetPointContents(const Float:pos[3], &entindex=-1); - -/** - * Get the point contents testing only the given entity index. - * - * @param entindex Entity index to test. - * @param pos World position. - * @return Contents mask. - */ -native TR_GetPointContentsEnt(entindex, const Float:pos[3]); - -/** - * Starts up a new trace ray using a global trace result. - * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @noreturn - */ -native TR_TraceRay(const Float:pos[3], const Float:vec[3], flags, RayType:rtype); - -/** - * Starts up a new trace ray using a global trace result and a customized trace ray filter. - * - * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is - * currently not allowed and may not work. - * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter function. - * @noreturn - */ -native TR_TraceRayFilter(const Float:pos[3], - const Float:vec[3], - flags, - RayType:rtype, - TraceEntityFilter:filter, - any:data=0); - -/** - * Starts up a new trace ray using a new trace result. - * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @return Ray trace handle, which must be closed via CloseHandle(). - */ -native Handle:TR_TraceRayEx(const Float:pos[3], const Float:vec[3], flags, RayType:rtype); - -/** - * Starts up a new trace ray using a new trace result and a customized trace ray filter. - * - * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is - * currently not allowed and may not work. - * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter function. - * @return Ray trace handle, which must be closed via CloseHandle(). - */ -native Handle:TR_TraceRayFilterEx(const Float:pos[3], - const Float:vec[3], - flags, - RayType:rtype, - TraceEntityFilter:filter, - any:data=0); - -/** - * Returns the time fraction from a trace result (1.0 means no collision). - * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Time fraction value of the trace. - * @error Invalid Handle. - */ -native Float:TR_GetFraction(Handle:hndl=INVALID_HANDLE); - -/** - * Returns the collision position of a trace result. - * - * @param pos Vector buffer to store data in. - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @noreturn - * @error Invalid Handle. - */ -native TR_GetEndPosition(Float:pos[3], Handle:hndl=INVALID_HANDLE); - -/** - * Returns the entity index that collided with the trace. - * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Entity index or -1 for no collision. - * @error Invalid Handle. - */ -native TR_GetEntityIndex(Handle:hndl=INVALID_HANDLE); - -/** - * Returns if there was any kind of collision along the trace ray. - * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return True if any collision found, otherwise false. - * @error Invalid Handle. - */ -native bool:TR_DidHit(Handle:hndl=INVALID_HANDLE); - -/** - * Returns in which body hit group the trace collided if any. - * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Body hit group. - * @error Invalid Handle. - */ -native TR_GetHitGroup(Handle:hndl=INVALID_HANDLE); +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _sdktools_trace_included + #endinput +#endif +#define _sdktools_trace_included + +#define CONTENTS_EMPTY 0 /**< No contents. */ +#define CONTENTS_SOLID 0x1 /**< an eye is never valid in a solid . */ +#define CONTENTS_WINDOW 0x2 /**< translucent, but not watery (glass). */ +#define CONTENTS_AUX 0x4 +#define CONTENTS_GRATE 0x8 /**< alpha-tested "grate" textures. Bullets/sight pass through, but solids don't. */ +#define CONTENTS_SLIME 0x10 +#define CONTENTS_WATER 0x20 +#define CONTENTS_MIST 0x40 +#define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ +#define LAST_VISIBLE_CONTENTS 0x80 +#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) +#define CONTENTS_TESTFOGVOLUME 0x100 +#define CONTENTS_UNUSED5 0x200 +#define CONTENTS_UNUSED6 0x4000 +#define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ +#define CONTENTS_TEAM2 0x1000 /**< between players and objects on different teams. */ +#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 /**< ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW. */ +#define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ +#define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ +#define CONTENTS_PLAYERCLIP 0x10000 +#define CONTENTS_MONSTERCLIP 0x20000 + +/** + * @section currents can be added to any other contents, and may be mixed + */ +#define CONTENTS_CURRENT_0 0x40000 +#define CONTENTS_CURRENT_90 0x80000 +#define CONTENTS_CURRENT_180 0x100000 +#define CONTENTS_CURRENT_270 0x200000 +#define CONTENTS_CURRENT_UP 0x400000 +#define CONTENTS_CURRENT_DOWN 0x800000 + +/** + * @endsection + */ + +#define CONTENTS_ORIGIN 0x1000000 /**< removed before bsping an entity. */ +#define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ +#define CONTENTS_DEBRIS 0x4000000 +#define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ +#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ +#define CONTENTS_LADDER 0x20000000 +#define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ + +/** + * @section Trace masks. + */ +#define MASK_ALL (0xFFFFFFFF) +#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ +#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ +#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ +#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ +#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ +#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ +#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ +#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ +#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ +#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ +#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ +#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ +#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ +#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ +#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ +#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ + +/** + * @endsection + */ + +enum RayType +{ + RayType_EndPoint, /**< The trace ray will go from the start position to the end position. */ + RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ +}; + +funcenum TraceEntityFilter +{ + /** + * Called on entity filtering. + * + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @return True to allow the current entity to be hit, otherwise false. + */ + bool:public(entity, contentsMask), + + /** + * Called on entity filtering. + * + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @param data Data value, if used. + * @return True to allow the current entity to be hit, otherwise false. + */ + bool:public(entity, contentsMask, any:data), +}; + +/** + * Get the contents mask and the entity index at the given position. + * + * @param pos World position to test. + * @param entindex Entity index found at the given position (by reference). + * @return Contents mask. + */ +native TR_GetPointContents(const Float:pos[3], &entindex=-1); + +/** + * Get the point contents testing only the given entity index. + * + * @param entindex Entity index to test. + * @param pos World position. + * @return Contents mask. + */ +native TR_GetPointContentsEnt(entindex, const Float:pos[3]); + +/** + * Starts up a new trace ray using a global trace result. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @noreturn + */ +native TR_TraceRay(const Float:pos[3], const Float:vec[3], flags, RayType:rtype); + +/** + * Starts up a new trace ray using a global trace result and a customized trace ray filter. + * + * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is + * currently not allowed and may not work. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter function. + * @noreturn + */ +native TR_TraceRayFilter(const Float:pos[3], + const Float:vec[3], + flags, + RayType:rtype, + TraceEntityFilter:filter, + any:data=0); + +/** + * Starts up a new trace ray using a new trace result. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @return Ray trace handle, which must be closed via CloseHandle(). + */ +native Handle:TR_TraceRayEx(const Float:pos[3], const Float:vec[3], flags, RayType:rtype); + +/** + * Starts up a new trace ray using a new trace result and a customized trace ray filter. + * + * Calling TR_TraceRayFilter or TR_TraceRayFilterEx from inside a filter function is + * currently not allowed and may not work. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter function. + * @return Ray trace handle, which must be closed via CloseHandle(). + */ +native Handle:TR_TraceRayFilterEx(const Float:pos[3], + const Float:vec[3], + flags, + RayType:rtype, + TraceEntityFilter:filter, + any:data=0); + +/** + * Returns the time fraction from a trace result (1.0 means no collision). + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Time fraction value of the trace. + * @error Invalid Handle. + */ +native Float:TR_GetFraction(Handle:hndl=INVALID_HANDLE); + +/** + * Returns the collision position of a trace result. + * + * @param pos Vector buffer to store data in. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @noreturn + * @error Invalid Handle. + */ +native TR_GetEndPosition(Float:pos[3], Handle:hndl=INVALID_HANDLE); + +/** + * Returns the entity index that collided with the trace. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Entity index or -1 for no collision. + * @error Invalid Handle. + */ +native TR_GetEntityIndex(Handle:hndl=INVALID_HANDLE); + +/** + * Returns if there was any kind of collision along the trace ray. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return True if any collision found, otherwise false. + * @error Invalid Handle. + */ +native bool:TR_DidHit(Handle:hndl=INVALID_HANDLE); + +/** + * Returns in which body hit group the trace collided if any. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Body hit group. + * @error Invalid Handle. + */ +native TR_GetHitGroup(Handle:hndl=INVALID_HANDLE); + +/** + * Find the normal vector to the collison plane of a trace. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @param normal Vector buffer to store the vector normal to the collision plane + * @noreturn + * @error Invalid Handle + */ +native TR_GetPlaneNormal(Handle:hndl=INVALID_HANDLE, Float:normal[3]); From a86d6821e319c448d2bae32b5d771c9410bde784 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 23 Jan 2008 17:06:33 +0000 Subject: [PATCH 176/263] fixed improper default parameter --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401866 --- plugins/include/sdktools_trace.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/include/sdktools_trace.inc b/plugins/include/sdktools_trace.inc index b9a0b82b..32d9face 100644 --- a/plugins/include/sdktools_trace.inc +++ b/plugins/include/sdktools_trace.inc @@ -268,4 +268,5 @@ native TR_GetHitGroup(Handle:hndl=INVALID_HANDLE); * @noreturn * @error Invalid Handle */ -native TR_GetPlaneNormal(Handle:hndl=INVALID_HANDLE, Float:normal[3]); +native TR_GetPlaneNormal(Handle:hndl, Float:normal[3]); + From a0a916de6efd0eb8b86cf6216a056a02419b7a2d Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sat, 26 Jan 2008 19:54:15 +0000 Subject: [PATCH 177/263] MapChooser extensions simplied. "maxtime/maxround/maxfrag" cvars removed. sm_mapvote_extend now controls the number of extensions that will occur. If set to 0, no extensions occur. If set to 1, then 1, and set to 2, then 2. The "step" cvars are still used to determine how big the extension is. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401867 --- plugins/mapchooser.sp | 41 ++++++++--------------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index 55cea42c..715f01ad 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -53,11 +53,8 @@ new Handle:g_Cvar_Nextmap = INVALID_HANDLE; new Handle:g_Cvar_StartTime = INVALID_HANDLE; new Handle:g_Cvar_StartRounds = INVALID_HANDLE; new Handle:g_Cvar_StartFrags = INVALID_HANDLE; -new Handle:g_Cvar_ExtendTimeMax = INVALID_HANDLE; new Handle:g_Cvar_ExtendTimeStep = INVALID_HANDLE; -new Handle:g_Cvar_ExtendRoundMax = INVALID_HANDLE; new Handle:g_Cvar_ExtendRoundStep = INVALID_HANDLE; -new Handle:g_Cvar_ExtendFragMax = INVALID_HANDLE; new Handle:g_Cvar_ExtendFragStep = INVALID_HANDLE; new Handle:g_Cvar_Mapfile = INVALID_HANDLE; new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; @@ -74,6 +71,7 @@ new Handle:g_NextMapList = INVALID_HANDLE; new Handle:g_TeamScores = INVALID_HANDLE; new Handle:g_VoteMenu = INVALID_HANDLE; +new g_Extends; new g_TotalRounds; new bool:g_HasVoteStarted; new g_mapFileTime; @@ -92,17 +90,14 @@ public OnPluginStart() g_Cvar_StartTime = CreateConVar("sm_mapvote_start", "3.0", "Specifies when to start the vote based on time remaining.", _, true, 1.0); g_Cvar_StartRounds = CreateConVar("sm_mapvote_startround", "2.0", "Specifies when to start the vote based on rounds remaining.", _, true, 1.0); g_Cvar_StartFrags = CreateConVar("sm_mapvote_startfrags", "5.0", "Specifies when to start the vote base on frags remaining.", _, true, 1.0); - g_Cvar_ExtendTimeMax = CreateConVar("sm_extendmap_maxtime", "90", "Specifies the maximum amount of time a map can be extended", _, true, 0.0); g_Cvar_ExtendTimeStep = CreateConVar("sm_extendmap_timestep", "15", "Specifies how much many more minutes each extension makes", _, true, 5.0); - g_Cvar_ExtendRoundMax = CreateConVar("sm_extendmap_maxrounds", "30", "Specfies the maximum amount of rounds a map can be extended", _, true, 0.0); g_Cvar_ExtendRoundStep = CreateConVar("sm_extendmap_roundstep", "5", "Specifies how many more rounds each extension makes", _, true, 5.0); - g_Cvar_ExtendFragMax = CreateConVar("sm_extendmap_maxfrags", "150", "Specfies the maximum frags allowed that a map can be extended.", _, true, 0.0); g_Cvar_ExtendFragStep = CreateConVar("sm_extendmap_fragstep", "10", "Specifies how many more frags are allowed when map is extended.", _, true, 5.0); g_Cvar_Mapfile = CreateConVar("sm_mapvote_file", "configs/maps.ini", "Map file to use. (Def sourcemod/configs/maps.ini)"); g_Cvar_ExcludeMaps = CreateConVar("sm_mapvote_exclude", "5", "Specifies how many past maps to exclude from the vote.", _, true, 0.0); g_Cvar_IncludeMaps = CreateConVar("sm_mapvote_include", "5", "Specifies how many maps to include in the vote.", _, true, 2.0, true, 6.0); g_Cvar_NoVoteMode = CreateConVar("sm_mapvote_novote", "1", "Specifies whether or not MapChooser should pick a map if no votes are received.", _, true, 0.0, true, 1.0); - g_Cvar_Extend = CreateConVar("sm_mapvote_extend", "1", "Specifies whether or not MapChooser will allow the map to be extended.", _, true, 0.0, true, 1.0); + g_Cvar_Extend = CreateConVar("sm_mapvote_extend", "0", "Number of extensions allowed each map.", _, true, 0.0); RegAdminCmd("sm_mapvote", Command_Mapvote, ADMFLAG_CHANGEMAP, "sm_mapvote - Forces MapChooser to attempt to run a map vote now."); @@ -147,6 +142,8 @@ public OnConfigsExecuted() g_TeamScores = CreateArray(2); g_TotalRounds = 0; + + g_Extends = 0; } public OnMapEnd() @@ -334,33 +331,9 @@ InitiateVote() AddMenuItem(g_VoteMenu, map, map); } - if (GetConVarBool(g_Cvar_Extend)) + if (GetConVarBool(g_Cvar_Extend) && g_Extends < GetConVarInt(g_Cvar_Extend)) { - new bool:allowExtend, time; - if (GetMapTimeLimit(time) && time > 0 && time < GetConVarInt(g_Cvar_ExtendTimeMax)) - { - allowExtend = true; - } - - if (g_Cvar_Winlimit != INVALID_HANDLE && GetConVarInt(g_Cvar_Winlimit) < GetConVarInt(g_Cvar_ExtendRoundMax)) - { - allowExtend = true; - } - - if (g_Cvar_Maxrounds != INVALID_HANDLE && GetConVarInt(g_Cvar_Maxrounds) < GetConVarInt(g_Cvar_ExtendRoundMax)) - { - allowExtend = true; - } - - if (g_Cvar_Fraglimit != INVALID_HANDLE && GetConVarInt(g_Cvar_Fraglimit) < GetConVarInt(g_Cvar_ExtendFragMax)) - { - allowExtend = true; - } - - if (allowExtend) - { - AddMenuItem(g_VoteMenu, VOTE_EXTEND, "Extend Map"); - } + AddMenuItem(g_VoteMenu, VOTE_EXTEND, "Extend Map"); } SetMenuExitButton(g_VoteMenu, false); @@ -445,6 +418,8 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) if (strcmp(map, VOTE_EXTEND, false) == 0) { + g_Extends++; + new time; if (GetMapTimeLimit(time)) { From 363c7821e51a32b38664421f69d0b58e4ac3f73b Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sun, 27 Jan 2008 16:04:36 +0000 Subject: [PATCH 178/263] File saved wrong? Fixed... --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401868 --- plugins/mapchooser.sp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index 715f01ad..df4817ce 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -423,7 +423,7 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) new time; if (GetMapTimeLimit(time)) { - if (time > 0 && time < GetConVarInt(g_Cvar_ExtendTimeMax)) + if (time > 0) { ExtendMapTimeLimit(GetConVarInt(g_Cvar_ExtendTimeStep)*60); } @@ -432,7 +432,7 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) if (g_Cvar_Winlimit != INVALID_HANDLE) { new winlimit = GetConVarInt(g_Cvar_Winlimit); - if (winlimit && winlimit < GetConVarInt(g_Cvar_ExtendRoundMax)) + if (winlimit) { SetConVarInt(g_Cvar_Winlimit, winlimit + GetConVarInt(g_Cvar_ExtendRoundStep)); } @@ -441,7 +441,7 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) if (g_Cvar_Maxrounds != INVALID_HANDLE) { new maxrounds = GetConVarInt(g_Cvar_Maxrounds); - if (maxrounds && maxrounds < GetConVarInt(g_Cvar_ExtendRoundMax)) + if (maxrounds) { SetConVarInt(g_Cvar_Maxrounds, maxrounds + GetConVarInt(g_Cvar_ExtendRoundStep)); } @@ -450,7 +450,7 @@ public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) if (g_Cvar_Fraglimit != INVALID_HANDLE) { new fraglimit = GetConVarInt(g_Cvar_Fraglimit); - if (fraglimit && fraglimit < GetConVarInt(g_Cvar_ExtendFragMax)) + if (fraglimit) { SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep)); } From a6af8e771869532ab8cfcb5978a608675d7a0da8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 27 Jan 2008 16:24:32 +0000 Subject: [PATCH 179/263] reversed timebomb/fire #error --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401869 --- plugins/basefuncommands.sp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 7505cf03..376a1c8d 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -51,7 +51,7 @@ public Plugin:myinfo = // Set any of these to 0 and recompile to completely disable those commands // ------------------------------------------------------------------------------- #define BEACON 1 -#define TIMEBOMB 1 +#define TIMEBOMB 0 #define FIRE 1 #define ICE 1 #define GRAVITY 1 @@ -68,7 +68,7 @@ public Plugin:myinfo = * Fire requires timebomb */ #if TIMEBOMB == 0 && FIRE == 1 -#error "TimeBomb requires Fire" +#error "FIRE requires TIMEBOMB" #endif new Handle:hTopMenu = INVALID_HANDLE; From 4ebcb623b40b02515d4cc853806a4e7c33ba1d5e Mon Sep 17 00:00:00 2001 From: Michael McKoy <ferret99gt@gmail.com> Date: Sun, 27 Jan 2008 16:32:47 +0000 Subject: [PATCH 180/263] Fixed fire.sp cvars that were using timebomb stuff. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401870 --- plugins/basefuncommands.sp | 11 ++--------- plugins/basefuncommands/fire.sp | 4 ++-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/plugins/basefuncommands.sp b/plugins/basefuncommands.sp index 376a1c8d..303e6bb4 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/basefuncommands.sp @@ -51,9 +51,9 @@ public Plugin:myinfo = // Set any of these to 0 and recompile to completely disable those commands // ------------------------------------------------------------------------------- #define BEACON 1 -#define TIMEBOMB 0 +#define TIMEBOMB 1 #define FIRE 1 -#define ICE 1 +#define ICE 1 #define GRAVITY 1 #define BLIND 1 #define NOCLIP 1 @@ -64,13 +64,6 @@ public Plugin:myinfo = #define CASH 1 // ------------------------------------------------------------------------------- -/** - * Fire requires timebomb - */ -#if TIMEBOMB == 0 && FIRE == 1 -#error "FIRE requires TIMEBOMB" -#endif - new Handle:hTopMenu = INVALID_HANDLE; // Sounds diff --git a/plugins/basefuncommands/fire.sp b/plugins/basefuncommands/fire.sp index 90e96c3c..9f0b4c31 100644 --- a/plugins/basefuncommands/fire.sp +++ b/plugins/basefuncommands/fire.sp @@ -190,7 +190,7 @@ public Action:Timer_FireBomb(Handle:timer, any:client) if (GetConVarInt(g_FireBombMode) > 0) { - new teamOnly = ((GetConVarInt(g_TimeBombMode) == 1) ? true : false); + new teamOnly = ((GetConVarInt(g_FireBombMode) == 1) ? true : false); new maxClients = GetMaxClients(); for (new i = 1; i < maxClients; i++) @@ -216,7 +216,7 @@ public Action:Timer_FireBomb(Handle:timer, any:client) } new Float:duration = GetConVarFloat(g_BurnDuration); - duration *= (GetConVarFloat(g_TimeBombRadius) - distance) / GetConVarFloat(g_TimeBombRadius); + duration *= (GetConVarFloat(g_FireBombRadius) - distance) / GetConVarFloat(g_FireBombRadius); IgniteEntity(i, duration); } From e2bfd15ae1a673a96e411c70b698c06cba11ae88 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 30 Jan 2008 19:48:51 +0000 Subject: [PATCH 181/263] removed hardcoded path --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401871 --- tools/builder/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/builder/Makefile b/tools/builder/Makefile index 08090e8c..0e888927 100644 --- a/tools/builder/Makefile +++ b/tools/builder/Makefile @@ -1,4 +1,4 @@ -CS = /usr/mono/bin/mcs +CS = mcs NAME = builder BINARY = $(NAME).exe From 98720129b3a134bdc3b6fb0da0b253c54def39c4 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 30 Jan 2008 20:50:28 +0000 Subject: [PATCH 182/263] Makefiles now cross-compile on 64-bit systems --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401872 --- core/Makefile.ep1 | 2 +- core/Makefile.ep2 | 9 ++++++--- core/Makefile.orig | 9 ++++++--- extensions/cstrike/Makefile.orig | 8 ++++---- extensions/geoip/Makefile | 9 ++++++--- extensions/mysql/Makefile | 9 ++++++--- extensions/sdktools/Makefile.ep2 | 6 +++--- extensions/sdktools/Makefile.orig | 6 +++--- extensions/sqlite/Makefile | 9 ++++++--- extensions/topmenus/Makefile | 9 ++++++--- loader/Makefile | 9 ++++++--- 11 files changed, 53 insertions(+), 32 deletions(-) diff --git a/core/Makefile.ep1 b/core/Makefile.ep1 index c14f55d9..01002949 100644 --- a/core/Makefile.ep1 +++ b/core/Makefile.ep1 @@ -1,7 +1,7 @@ #(C)2004-2006 SourceMM Development Team # Makefile written by David "BAILOPAN" Anderson -SMM_BASE = ../../sourcemm +SMM_BASE = ../../sourcemm-1.6 HL2SDK = ../../hl2sdk SMSDK = .. SRCDS = ~/srcds diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 index 99f9dbbf..e5376eb8 100644 --- a/core/Makefile.ep2 +++ b/core/Makefile.ep2 @@ -1,7 +1,7 @@ #(C)2004-2006 SourceMM Development Team # Makefile written by David "BAILOPAN" Anderson -SMM_BASE = ../../sourcemm +SMM_BASE = ../../sourcemm-1.6 HL2SDK = ../../hl2sdk-ob SMSDK = .. SRCDS = ~/srcds @@ -58,7 +58,10 @@ endif GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER -DORANGEBOX_BUILD +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ + -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER \ + -DORANGEBOX_BUILD -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ifeq "$(GCC_VERSION)" "4" @@ -86,7 +89,7 @@ all: $(MAKE) -f Makefile.ep2 sourcemod sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) -f Makefile.ep2 all DEBUG=true diff --git a/core/Makefile.orig b/core/Makefile.orig index fe895f49..278ca7e8 100644 --- a/core/Makefile.orig +++ b/core/Makefile.orig @@ -1,7 +1,7 @@ #(C)2004-2006 SourceMM Development Team # Makefile written by David "BAILOPAN" Anderson -SMM_BASE = ../../sourcemm-1.4.2 +SMM_BASE = ../../sourcemm-1.4 HL2SDK = ../../hl2sdk SMSDK = .. SRCDS = ~/srcds @@ -58,7 +58,10 @@ endif GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse \ + -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ifeq "$(GCC_VERSION)" "4" @@ -85,7 +88,7 @@ all: $(MAKE) -f Makefile.orig sourcemod sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) -f Makefile.orig all DEBUG=true diff --git a/extensions/cstrike/Makefile.orig b/extensions/cstrike/Makefile.orig index 4ae96fd1..51504fca 100644 --- a/extensions/cstrike/Makefile.orig +++ b/extensions/cstrike/Makefile.orig @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm-1.4.2 +SOURCEMM = ../../../sourcemm-1.4 HL2SDK = ../../../hl2sdk ##################################### @@ -37,8 +37,8 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ - -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ ### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### @@ -72,7 +72,7 @@ all: $(MAKE) -f Makefile.orig extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) -f Makefile.orig all DEBUG=true diff --git a/extensions/geoip/Makefile b/extensions/geoip/Makefile index 14f9df77..fce544d6 100644 --- a/extensions/geoip/Makefile +++ b/extensions/geoip/Makefile @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm +SOURCEMM = ../../../sourcemm-1.6 ##################################### ### EDIT BELOW FOR OTHER PROJECTS ### @@ -36,7 +36,10 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_TRUNK) -I$(SMM_TRUNK)/sourcehook -I$(SMM_TRUNK)/sourcemm \ -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD \ + -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ @@ -75,7 +78,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true diff --git a/extensions/mysql/Makefile b/extensions/mysql/Makefile index 46a8e18b..5af33974 100644 --- a/extensions/mysql/Makefile +++ b/extensions/mysql/Makefile @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm +SOURCEMM = ../../../sourcemm-1.6 MYSQL = ../../../mysql-5.0 ##################################### @@ -41,7 +41,10 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine \ -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ -I$(MYSQL)/include -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-switch +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ + -Wno-switch -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ @@ -77,7 +80,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true diff --git a/extensions/sdktools/Makefile.ep2 b/extensions/sdktools/Makefile.ep2 index 19875fd8..b82a0b6d 100644 --- a/extensions/sdktools/Makefile.ep2 +++ b/extensions/sdktools/Makefile.ep2 @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm +SOURCEMM = ../../../sourcemm-1.6 HL2SDK = ../../../hl2sdk-ob ##################################### @@ -39,7 +39,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \ - -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DORANGEBOX_BUILD + -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DORANGEBOX_BUILD -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics ################################################ @@ -74,7 +74,7 @@ all: $(MAKE) -f Makefile.ep2 extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) -f Makefile.ep2 all DEBUG=true diff --git a/extensions/sdktools/Makefile.orig b/extensions/sdktools/Makefile.orig index a509365a..b34a3e4a 100644 --- a/extensions/sdktools/Makefile.orig +++ b/extensions/sdktools/Makefile.orig @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm-1.4.2 +SOURCEMM = ../../../sourcemm-1.4 HL2SDK = ../../../hl2sdk ##################################### @@ -39,7 +39,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \ - -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H + -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics ################################################ @@ -74,7 +74,7 @@ all: $(MAKE) -f Makefile.orig extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) -f Makefile.orig all DEBUG=true diff --git a/extensions/sqlite/Makefile b/extensions/sqlite/Makefile index 602af760..2839482d 100644 --- a/extensions/sqlite/Makefile +++ b/extensions/sqlite/Makefile @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm +SOURCEMM = ../../../sourcemm-1.6 ##################################### ### EDIT BELOW FOR OTHER PROJECTS ### @@ -55,7 +55,10 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -Wno-uninitialized -DSQLITE_THREADSAFE -DSQLITE_OMIT_LOAD_EXTENSION +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -Wno-uninitialized \ + -DSQLITE_THREADSAFE -DSQLITE_OMIT_LOAD_EXTENSION -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ @@ -96,7 +99,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true diff --git a/extensions/topmenus/Makefile b/extensions/topmenus/Makefile index 1aa654e0..769d133a 100644 --- a/extensions/topmenus/Makefile +++ b/extensions/topmenus/Makefile @@ -3,7 +3,7 @@ SMSDK = ../.. SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm +SOURCEMM = ../../../sourcemm-1.6 HL2SDK = ../../../hl2sdk ##################################### @@ -36,7 +36,10 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch -Wno-unused -fPIC -mfpmath=sse -msse \ + -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ @@ -71,7 +74,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true diff --git a/loader/Makefile b/loader/Makefile index 889dca2c..a1fe7f02 100644 --- a/loader/Makefile +++ b/loader/Makefile @@ -5,7 +5,7 @@ # running against Metamod:Source. SMSDK = .. -SOURCEMM = ../../sourcemm +SOURCEMM = ../../sourcemm-1.6 ##################################### ### EDIT BELOW FOR OTHER PROJECTS ### @@ -29,7 +29,10 @@ LINK = -static-libgcc INCLUDE = -I. -I.. -Isdk -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ + -Wno-uninitialized -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ @@ -62,7 +65,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true From 22bc72c0d43e38f10fbbfc33b13c2deb6791f53b Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 30 Jan 2008 20:50:45 +0000 Subject: [PATCH 183/263] cross-compiles --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401873 --- extensions/bintools/Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/extensions/bintools/Makefile b/extensions/bintools/Makefile index 842fb7be..66a2976e 100644 --- a/extensions/bintools/Makefile +++ b/extensions/bintools/Makefile @@ -37,8 +37,11 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions -I$(SMSDK)/public/jit \ -I$(SMSDK)/public/jit/x86 -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ + -m32 +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -m32 ################################################ ### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### @@ -72,7 +75,7 @@ all: $(MAKE) extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true From 512ec748191578322f8def06e6412c453c76a725 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 30 Jan 2008 20:51:07 +0000 Subject: [PATCH 184/263] cross-compiling --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401874 --- sourcepawn/compiler/Makefile | 4 ++-- sourcepawn/jit/x86/Makefile | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sourcepawn/compiler/Makefile b/sourcepawn/compiler/Makefile index b7007401..c7b7c1dd 100644 --- a/sourcepawn/compiler/Makefile +++ b/sourcepawn/compiler/Makefile @@ -36,7 +36,7 @@ else CPPFLAGS += $(OPT_CPP_FLAGS) endif -CFLAGS += -DLINUX -DNDEBUG -DHAVE_STDINT_H -DAMX_ANSIONLY -DENABLE_BINRELOC +CFLAGS += -DLINUX -DNDEBUG -DHAVE_STDINT_H -DAMX_ANSIONLY -DENABLE_BINRELOC -m32 CPPFLAGS += -Wno-deprecated -fno-exceptions -fno-rtti OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) @@ -53,7 +53,7 @@ all: $(MAKE) spcomp spcomp: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true diff --git a/sourcepawn/jit/x86/Makefile b/sourcepawn/jit/x86/Makefile index cbb31238..d6bd4873 100644 --- a/sourcepawn/jit/x86/Makefile +++ b/sourcepawn/jit/x86/Makefile @@ -32,7 +32,10 @@ endif GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -fno-rtti -DHAVE_STDINT_H +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ + -Dstrcmpi=strcasecmp -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -fno-rtti \ + -DHAVE_STDINT_H -m32 ifeq "$(GCC_VERSION)" "4" CFLAGS += $(GCC4_FLAGS) @@ -52,7 +55,7 @@ all: ln -sf $(BIN_DIR)/$(BINARY) $(BINARY) binary: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: $(MAKE) all DEBUG=true From 9e9f74aab08e29a0456fce17d1841da22dde97e9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Thu, 31 Jan 2008 02:37:34 +0000 Subject: [PATCH 185/263] added some more doc --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401875 --- plugins/include/sourcemod.inc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index 0f625607..afc93521 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -85,9 +85,12 @@ struct Plugin public Plugin:myinfo; /** - * Called when the plugin is fully initialized and all known external references are resolved. - * This is called even if the plugin type is "private." - * @note Errors in this function will cause the plugin to stop running. + * Called when the plugin is fully initialized and all known external references + * are resolved. This is only called once in the lifetime of the plugin, and is + * paired with OnPluginEnd(). + * + * If any run-time error is thrown during this callback, the plugin will be marked + * as failed. * * @noreturn */ @@ -101,6 +104,9 @@ forward OnPluginStart(); * * @note It is not safe to call externally resolved natives until OnPluginStart(). * @note Any sort of RTE in this function will cause the plugin to fail loading. + * @note You MUST remember to return SOMETHING here. The act of not returning is + * equivalent to returning 0 (false). If you forgot to return, it will + * cause your plugin to not load with a very strange error message. * * @param myself Handle to the plugin. * @param late Whether or not the plugin was loaded "late" (after map load). From 4bbad7450607a84a1a159a7790095ef50d072951 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Sun, 10 Feb 2008 01:19:34 +0000 Subject: [PATCH 186/263] Fixed amb1446 : Updated pvkii showmenu and sdktools support. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401876 --- gamedata/core.games.txt | 1 + gamedata/sdktools.games.txt | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index 146edf1a..f598813a 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -55,6 +55,7 @@ "game" "insurgency" "game" "Insurgency" "game" "tf" + "game" "pvkii" } "Keys" diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 8379aa63..ea233126 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -37,7 +37,7 @@ "game" "ship" "game" "!Dystopia" "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" + "game" "pvkii" "game" "!SourceForts v1.9.2" "game" "$SourceForts v1.9.3" "game" "FortressForever" @@ -98,7 +98,7 @@ "game" "ship" "game" "!Dystopia" "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" + "game" "pvkii" "game" "!SourceForts v1.9.2" "game" "$SourceForts v1.9.3" "game" "FortressForever" @@ -150,7 +150,7 @@ "game" "hl2mp" "game" "ship" "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" + "game" "pvkii" "game" "!SourceForts v1.9.2" "game" "$SourceForts v1.9.3" "game" "FortressForever" @@ -201,7 +201,7 @@ "game" "dod" "game" "hl2mp" "game" "!Insurgency" - "game" "!Pirates, Vikings and Knights II" + "game" "pvkii" "game" "$SourceForts v1.9.3" "game" "FortressForever" "game" "empires" @@ -766,7 +766,7 @@ } /* Pirates, Vikings and Knights II */ - "!Pirates, Vikings and Knights II" + "pvkii" { "Offsets" { From 9a49bf2f083501dc46e618e77df5144208f11d7e Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 20 Feb 2008 07:56:33 +0000 Subject: [PATCH 187/263] Update of project file to match latest hl2sdk --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401877 --- core/Makefile.ep2 | 3 +- core/bitbuf.cpp | 961 ---------------------- core/msvc8/sourcemod_mm.vcproj | 28 +- core/smn_usermsgs.cpp | 4 +- core/smn_vector.cpp | 16 +- extensions/cstrike/msvc8/cstrike.vcproj | 26 +- extensions/sdktools/msvc8/sdktools.vcproj | 26 +- 7 files changed, 45 insertions(+), 1019 deletions(-) delete mode 100644 core/bitbuf.cpp diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 index e5376eb8..b5638966 100644 --- a/core/Makefile.ep2 +++ b/core/Makefile.ep2 @@ -24,7 +24,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC sm_autonatives.cpp sm_memtable.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \ sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \ MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \ - frame_hooks.cpp bitbuf.cpp concmd_cleaner.cpp + frame_hooks.cpp concmd_cleaner.cpp OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ @@ -85,7 +85,6 @@ all: mkdir -p $(BIN_DIR)/thread ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - ln -sf $(HL2SDK)/tier1/bitbuf.cpp bitbuf.cpp $(MAKE) -f Makefile.ep2 sourcemod sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) diff --git a/core/bitbuf.cpp b/core/bitbuf.cpp deleted file mode 100644 index 23c0040e..00000000 --- a/core/bitbuf.cpp +++ /dev/null @@ -1,961 +0,0 @@ -//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============// -// -// Purpose: -// -// $NoKeywords: $ -// -//=============================================================================// - -#include "bitbuf.h" -#include "coordsize.h" -#include "vector.h" -#include "mathlib/math_base.h" -#include "vstdlib/strtools.h" - - -// FIXME: Can't use this until we get multithreaded allocations in tier0 working for tools -// This is used by VVIS and fails to link -// NOTE: This must be the last file included!!! -//#include "tier0/memdbgon.h" - -#ifdef _XBOX -// mandatory ... wary of above comment and isolating, tier0 is built as MT though -#include "tier0/memdbgon.h" -#endif - -static BitBufErrorHandler g_BitBufErrorHandler = 0; - - -void InternalBitBufErrorHandler( BitBufErrorType errorType, const char *pDebugName ) -{ - if ( g_BitBufErrorHandler ) - g_BitBufErrorHandler( errorType, pDebugName ); -} - - -void SetBitBufErrorHandler( BitBufErrorHandler fn ) -{ - g_BitBufErrorHandler = fn; -} - - -// #define BB_PROFILING - - -// Precalculated bit masks for WriteUBitLong. Using these tables instead of -// doing the calculations gives a 33% speedup in WriteUBitLong. -unsigned long g_BitWriteMasks[32][33]; - -// (1 << i) - 1 -unsigned long g_ExtraMasks[32]; - -class CBitWriteMasksInit -{ -public: - CBitWriteMasksInit() - { - for( unsigned int startbit=0; startbit < 32; startbit++ ) - { - for( unsigned int nBitsLeft=0; nBitsLeft < 33; nBitsLeft++ ) - { - unsigned int endbit = startbit + nBitsLeft; - g_BitWriteMasks[startbit][nBitsLeft] = (1 << startbit) - 1; - if(endbit < 32) - g_BitWriteMasks[startbit][nBitsLeft] |= ~((1 << endbit) - 1); - } - } - - for ( unsigned int maskBit=0; maskBit < 32; maskBit++ ) - g_ExtraMasks[maskBit] = (1 << maskBit) - 1; - } -}; -CBitWriteMasksInit g_BitWriteMasksInit; - - -// ---------------------------------------------------------------------------------------- // -// bf_write -// ---------------------------------------------------------------------------------------- // - -bf_write::bf_write() -{ - m_pData = NULL; - m_nDataBytes = 0; - m_nDataBits = -1; // set to -1 so we generate overflow on any operation - m_iCurBit = 0; - m_bOverflow = false; - m_bAssertOnOverflow = true; - m_pDebugName = NULL; -} - -bf_write::bf_write( const char *pDebugName, void *pData, int nBytes, int nBits ) -{ - m_bAssertOnOverflow = true; - m_pDebugName = pDebugName; - StartWriting( pData, nBytes, 0, nBits ); -} - -bf_write::bf_write( void *pData, int nBytes, int nBits ) -{ - m_bAssertOnOverflow = true; - StartWriting( pData, nBytes, 0, nBits ); -} - -void bf_write::StartWriting( void *pData, int nBytes, int iStartBit, int nBits ) -{ - // Make sure it's dword aligned and padded. - Assert( (nBytes % 4) == 0 ); - Assert(((unsigned long)pData & 3) == 0); - - m_pData = (unsigned char*)pData; - m_nDataBytes = nBytes; - - if ( nBits == -1 ) - { - m_nDataBits = nBytes << 3; - } - else - { - Assert( nBits <= nBytes*8 ); - m_nDataBits = nBits; - } - - m_iCurBit = iStartBit; - m_bOverflow = false; -} - -void bf_write::Reset() -{ - m_iCurBit = 0; - m_bOverflow = false; -} - - -void bf_write::SetAssertOnOverflow( bool bAssert ) -{ - m_bAssertOnOverflow = bAssert; -} - - -const char* bf_write::GetDebugName() -{ - return m_pDebugName; -} - - -void bf_write::SetDebugName( const char *pDebugName ) -{ - m_pDebugName = pDebugName; -} - - -void bf_write::SeekToBit( int bitPos ) -{ - m_iCurBit = bitPos; -} - - -// Sign bit comes first -void bf_write::WriteSBitLong( int data, int numbits ) -{ - // Do we have a valid # of bits to encode with? - Assert( numbits >= 1 ); - - // Note: it does this wierdness here so it's bit-compatible with regular integer data in the buffer. - // (Some old code writes direct integers right into the buffer). - if(data < 0) - { -#ifdef _DEBUG - if( numbits < 32 ) - { - // Make sure it doesn't overflow. - - if( data < 0 ) - { - Assert( data >= -(1 << (numbits-1)) ); - } - else - { - Assert( data < (1 << (numbits-1)) ); - } - } -#endif - - WriteUBitLong( (unsigned int)(0x80000000 + data), numbits - 1, false ); - WriteOneBit( 1 ); - } - else - { - WriteUBitLong((unsigned int)data, numbits - 1); - WriteOneBit( 0 ); - } -} - -// writes an unsigned integer with variable bit length -void bf_write::WriteUBitVar( unsigned int data ) -{ - unsigned int bits = 0; - unsigned int base = 0; - - while (data > (base<<1)) - { - bits++; - base = (1<<bits)-1; - } - - // how many bits do we use - if ( bits > 0) - WriteUBitLong( 0, bits ); - - // end marker - WriteOneBit( 1 ); - - // write the value - if ( bits > 0) - WriteUBitLong( data - base , bits ); -} - -void bf_write::WriteBitLong(unsigned int data, int numbits, bool bSigned) -{ - if(bSigned) - WriteSBitLong((int)data, numbits); - else - WriteUBitLong(data, numbits); -} - -bool bf_write::WriteBits(const void *pInData, int nBits) -{ -#if defined( BB_PROFILING ) - VPROF( "bf_write::WriteBits" ); -#endif - - unsigned char *pOut = (unsigned char*)pInData; - int nBitsLeft = nBits; - - if((m_iCurBit+nBits) > m_nDataBits) - { - SetOverflowFlag(); - CallErrorHandler( BITBUFERROR_BUFFER_OVERRUN, GetDebugName() ); - return false; - } - - // Get output dword-aligned. - while(((unsigned long)pOut & 3) != 0 && nBitsLeft >= 8) - { - - WriteUBitLong( *pOut, 8, false ); - ++pOut; - nBitsLeft -= 8; - } - - // check if we can use fast memcpy if m_iCurBit is byte aligned - if ( (nBitsLeft >= 32) && (m_iCurBit & 7) == 0 ) - { - int numbytes = (nBitsLeft >> 3); - int numbits = numbytes << 3; - - // Bounds checking.. - // TODO: May not need this check anymore - if((m_iCurBit+numbits) > m_nDataBits) - { - m_iCurBit = m_nDataBits; - SetOverflowFlag(); - CallErrorHandler( BITBUFERROR_BUFFER_OVERRUN, GetDebugName() ); - return false; - } - - Q_memcpy( m_pData+(m_iCurBit>>3), pOut, numbytes ); - pOut += numbytes; - nBitsLeft -= numbits; - m_iCurBit += numbits; - } - - // Read dwords. - while(nBitsLeft >= 32) - { - WriteUBitLong( *((unsigned long*)pOut), 32, false ); - pOut += sizeof(unsigned long); - nBitsLeft -= 32; - } - - // Read the remaining bytes. - while(nBitsLeft >= 8) - { - WriteUBitLong( *pOut, 8, false ); - ++pOut; - nBitsLeft -= 8; - } - - // Read the remaining bits. - if(nBitsLeft) - { - WriteUBitLong( *pOut, nBitsLeft, false ); - } - - return !IsOverflowed(); -} - - -bool bf_write::WriteBitsFromBuffer( bf_read *pIn, int nBits ) -{ - // This could be optimized a little by - while ( nBits > 32 ) - { - WriteUBitLong( pIn->ReadUBitLong( 32 ), 32 ); - nBits -= 32; - } - - WriteUBitLong( pIn->ReadUBitLong( nBits ), nBits ); - return !IsOverflowed() && !pIn->IsOverflowed(); -} - - -void bf_write::WriteBitAngle( float fAngle, int numbits ) -{ - int d; - unsigned int mask; - unsigned int shift; - - shift = (1<<numbits); - mask = shift - 1; - - d = (int)( (fAngle / 360.0) * shift ); - d &= mask; - - WriteUBitLong((unsigned int)d, numbits); -} - -void bf_write::WriteBitCoord (const float f) -{ -#if defined( BB_PROFILING ) - VPROF( "bf_write::WriteBitCoord" ); -#endif - int signbit = (f <= -COORD_RESOLUTION); - int intval = abs(static_cast<int>(f)); - int fractval = abs((int)(f*COORD_DENOMINATOR)) & (COORD_DENOMINATOR-1); - - - // Send the bit flags that indicate whether we have an integer part and/or a fraction part. - WriteOneBit( intval ); - WriteOneBit( fractval ); - - if ( intval || fractval ) - { - // Send the sign bit - WriteOneBit( signbit ); - - // Send the integer if we have one. - if ( intval ) - { - // Adjust the integers from [1..MAX_COORD_VALUE] to [0..MAX_COORD_VALUE-1] - intval--; - WriteUBitLong( (unsigned int)intval, COORD_INTEGER_BITS ); - } - - // Send the fraction if we have one - if ( fractval ) - { - WriteUBitLong( (unsigned int)fractval, COORD_FRACTIONAL_BITS ); - } - } -} - -void bf_write::WriteBitFloat(float val) -{ - long intVal; - - Assert(sizeof(long) == sizeof(float)); - Assert(sizeof(float) == 4); - - void *v = &val; - intVal = *reinterpret_cast<long *>(v); - WriteUBitLong( intVal, 32 ); -} - -void bf_write::WriteBitVec3Coord( const Vector& fa ) -{ - int xflag, yflag, zflag; - - xflag = (fa[0] >= COORD_RESOLUTION) || (fa[0] <= -COORD_RESOLUTION); - yflag = (fa[1] >= COORD_RESOLUTION) || (fa[1] <= -COORD_RESOLUTION); - zflag = (fa[2] >= COORD_RESOLUTION) || (fa[2] <= -COORD_RESOLUTION); - - WriteOneBit( xflag ); - WriteOneBit( yflag ); - WriteOneBit( zflag ); - - if ( xflag ) - WriteBitCoord( fa[0] ); - if ( yflag ) - WriteBitCoord( fa[1] ); - if ( zflag ) - WriteBitCoord( fa[2] ); -} - -void bf_write::WriteBitNormal( float f ) -{ - int signbit = (f <= -NORMAL_RESOLUTION); - - // NOTE: Since +/-1 are valid values for a normal, I'm going to encode that as all ones - unsigned int fractval = abs( (int)(f*NORMAL_DENOMINATOR) ); - - // clamp.. - if (fractval > NORMAL_DENOMINATOR) - fractval = NORMAL_DENOMINATOR; - - // Send the sign bit - WriteOneBit( signbit ); - - // Send the fractional component - WriteUBitLong( fractval, NORMAL_FRACTIONAL_BITS ); -} - -void bf_write::WriteBitVec3Normal( const Vector& fa ) -{ - int xflag, yflag; - - xflag = (fa[0] >= NORMAL_RESOLUTION) || (fa[0] <= -NORMAL_RESOLUTION); - yflag = (fa[1] >= NORMAL_RESOLUTION) || (fa[1] <= -NORMAL_RESOLUTION); - - WriteOneBit( xflag ); - WriteOneBit( yflag ); - - if ( xflag ) - WriteBitNormal( fa[0] ); - if ( yflag ) - WriteBitNormal( fa[1] ); - - // Write z sign bit - int signbit = (fa[2] <= -NORMAL_RESOLUTION); - WriteOneBit( signbit ); -} - -void bf_write::WriteBitAngles( const QAngle& fa ) -{ - // FIXME: - Vector tmp( fa.x, fa.y, fa.z ); - WriteBitVec3Coord( tmp ); -} - -void bf_write::WriteChar(int val) -{ - WriteSBitLong(val, sizeof(char) << 3); -} - -void bf_write::WriteByte(int val) -{ - WriteUBitLong(val, sizeof(unsigned char) << 3); -} - -void bf_write::WriteShort(int val) -{ - WriteSBitLong(val, sizeof(short) << 3); -} - -void bf_write::WriteWord(int val) -{ - WriteUBitLong(val, sizeof(unsigned short) << 3); -} - -void bf_write::WriteLong(long val) -{ - WriteSBitLong(val, sizeof(long) << 3); -} - -void bf_write::WriteFloat(float val) -{ - WriteBits(&val, sizeof(val) << 3); -} - -bool bf_write::WriteBytes( const void *pBuf, int nBytes ) -{ - return WriteBits(pBuf, nBytes << 3); -} - -bool bf_write::WriteString(const char *pStr) -{ - if(pStr) - { - do - { - WriteChar( *pStr ); - ++pStr; - } while( *(pStr-1) != 0 ); - } - else - { - WriteChar( 0 ); - } - - return !IsOverflowed(); -} - -// ---------------------------------------------------------------------------------------- // -// bf_read -// ---------------------------------------------------------------------------------------- // - -bf_read::bf_read() -{ - m_pData = NULL; - m_nDataBytes = 0; - m_nDataBits = -1; // set to -1 so we overflow on any operation - m_iCurBit = 0; - m_bOverflow = false; - m_bAssertOnOverflow = true; - m_pDebugName = NULL; -} - -bf_read::bf_read( const void *pData, int nBytes, int nBits ) -{ - m_bAssertOnOverflow = true; - StartReading( pData, nBytes, 0, nBits ); -} - -bf_read::bf_read( const char *pDebugName, const void *pData, int nBytes, int nBits ) -{ - m_bAssertOnOverflow = true; - m_pDebugName = pDebugName; - StartReading( pData, nBytes, 0, nBits ); -} - -void bf_read::StartReading( const void *pData, int nBytes, int iStartBit, int nBits ) -{ - // Make sure we're dword aligned. - Assert(((unsigned long)pData & 3) == 0); - - m_pData = (unsigned char*)pData; - m_nDataBytes = nBytes; - - if ( nBits == -1 ) - { - m_nDataBits = m_nDataBytes << 3; - } - else - { - Assert( nBits <= nBytes*8 ); - m_nDataBits = nBits; - } - - m_iCurBit = iStartBit; - m_bOverflow = false; -} - -void bf_read::Reset() -{ - m_iCurBit = 0; - m_bOverflow = false; -} - -void bf_read::SetAssertOnOverflow( bool bAssert ) -{ - m_bAssertOnOverflow = bAssert; -} - -const char* bf_read::GetDebugName() -{ - return m_pDebugName; -} - -void bf_read::SetDebugName( const char *pName ) -{ - m_pDebugName = pName; -} - -unsigned int bf_read::CheckReadUBitLong(int numbits) -{ - // Ok, just read bits out. - int i, nBitValue; - unsigned int r = 0; - - for(i=0; i < numbits; i++) - { - nBitValue = ReadOneBitNoCheck(); - r |= nBitValue << i; - } - m_iCurBit -= numbits; - - return r; -} - -bool bf_read::ReadBits(void *pOutData, int nBits) -{ -#if defined( BB_PROFILING ) - VPROF( "bf_write::ReadBits" ); -#endif - - unsigned char *pOut = (unsigned char*)pOutData; - int nBitsLeft = nBits; - - - // Get output dword-aligned. - while(((unsigned long)pOut & 3) != 0 && nBitsLeft >= 8) - { - *pOut = (unsigned char)ReadUBitLong(8); - ++pOut; - nBitsLeft -= 8; - } - - // Read dwords. - while(nBitsLeft >= 32) - { - *((unsigned long*)pOut) = ReadUBitLong(32); - pOut += sizeof(unsigned long); - nBitsLeft -= 32; - } - - // Read the remaining bytes. - while(nBitsLeft >= 8) - { - *pOut = ReadUBitLong(8); - ++pOut; - nBitsLeft -= 8; - } - - // Read the remaining bits. - if(nBitsLeft) - { - *pOut = ReadUBitLong(nBitsLeft); - } - - return !IsOverflowed(); -} - -float bf_read::ReadBitAngle( int numbits ) -{ - float fReturn; - int i; - float shift; - - shift = (float)( 1 << numbits ); - - i = ReadUBitLong( numbits ); - fReturn = (float)i * (360.0 / shift); - - return fReturn; -} - -unsigned int bf_read::PeekUBitLong( int numbits ) -{ - unsigned int r; - int i, nBitValue; -#ifdef BIT_VERBOSE - int nShifts = numbits; -#endif - - bf_read savebf; - - savebf = *this; // Save current state info - - r = 0; - for(i=0; i < numbits; i++) - { - nBitValue = ReadOneBit(); - - // Append to current stream - if ( nBitValue ) - { - r |= 1 << i; - } - } - - *this = savebf; - -#ifdef BIT_VERBOSE - Con_Printf( "PeekBitLong: %i %i\n", nShifts, (unsigned int)r ); -#endif - - return r; -} - -// Append numbits least significant bits from data to the current bit stream -int bf_read::ReadSBitLong( int numbits ) -{ - int r, sign; - - r = ReadUBitLong(numbits - 1); - - // Note: it does this wierdness here so it's bit-compatible with regular integer data in the buffer. - // (Some old code writes direct integers right into the buffer). - sign = ReadOneBit(); - if(sign) - r = -((1 << (numbits-1)) - r); - - return r; -} - -unsigned int bf_read::ReadUBitVar() -{ - int bits = 0; // how many bits are used to encode delta offset - - // how many bits do we use - while ( ReadOneBit() == 0 ) - bits++; - - unsigned int data = (1<<bits)-1; - - // read the value - if ( bits > 0) - data += ReadUBitLong( bits ); - - return data; -} - - -unsigned int bf_read::ReadBitLong(int numbits, bool bSigned) -{ - if(bSigned) - return (unsigned int)ReadSBitLong(numbits); - else - return ReadUBitLong(numbits); -} - - -// Basic Coordinate Routines (these contain bit-field size AND fixed point scaling constants) -float bf_read::ReadBitCoord (void) -{ -#if defined( BB_PROFILING ) - VPROF( "bf_write::ReadBitCoord" ); -#endif - int intval=0,fractval=0,signbit=0; - float value = 0.0; - - - // Read the required integer and fraction flags - intval = ReadOneBit(); - fractval = ReadOneBit(); - - // If we got either parse them, otherwise it's a zero. - if ( intval || fractval ) - { - // Read the sign bit - signbit = ReadOneBit(); - - // If there's an integer, read it in - if ( intval ) - { - // Adjust the integers from [0..MAX_COORD_VALUE-1] to [1..MAX_COORD_VALUE] - intval = ReadUBitLong( COORD_INTEGER_BITS ) + 1; - } - - // If there's a fraction, read it in - if ( fractval ) - { - fractval = ReadUBitLong( COORD_FRACTIONAL_BITS ); - } - - // Calculate the correct floating point value - value = intval + ((float)fractval * COORD_RESOLUTION); - - // Fixup the sign if negative. - if ( signbit ) - value = -value; - } - - return value; -} - -void bf_read::ReadBitVec3Coord( Vector& fa ) -{ - int xflag, yflag, zflag; - - // This vector must be initialized! Otherwise, If any of the flags aren't set, - // the corresponding component will not be read and will be stack garbage. - fa.Init( 0, 0, 0 ); - - xflag = ReadOneBit(); - yflag = ReadOneBit(); - zflag = ReadOneBit(); - - if ( xflag ) - fa[0] = ReadBitCoord(); - if ( yflag ) - fa[1] = ReadBitCoord(); - if ( zflag ) - fa[2] = ReadBitCoord(); -} - -float bf_read::ReadBitNormal (void) -{ - // Read the sign bit - int signbit = ReadOneBit(); - - // Read the fractional part - unsigned int fractval = ReadUBitLong( NORMAL_FRACTIONAL_BITS ); - - // Calculate the correct floating point value - float value = (float)fractval * NORMAL_RESOLUTION; - - // Fixup the sign if negative. - if ( signbit ) - value = -value; - - return value; -} - -void bf_read::ReadBitVec3Normal( Vector& fa ) -{ - int xflag = ReadOneBit(); - int yflag = ReadOneBit(); - - if (xflag) - fa[0] = ReadBitNormal(); - else - fa[0] = 0.0f; - - if (yflag) - fa[1] = ReadBitNormal(); - else - fa[1] = 0.0f; - - // The first two imply the third (but not its sign) - int znegative = ReadOneBit(); - - float fafafbfb = fa[0] * fa[0] + fa[1] * fa[1]; - if (fafafbfb < 1.0f) - fa[2] = sqrt( 1.0f - fafafbfb ); - else - fa[2] = 0.0f; - - if (znegative) - fa[2] = -fa[2]; -} - -void bf_read::ReadBitAngles( QAngle& fa ) -{ - Vector tmp; - ReadBitVec3Coord( tmp ); - fa.Init( tmp.x, tmp.y, tmp.z ); -} - -int bf_read::ReadChar() -{ - return ReadSBitLong(sizeof(char) << 3); -} - -int bf_read::ReadByte() -{ - return ReadUBitLong(sizeof(unsigned char) << 3); -} - -int bf_read::ReadShort() -{ - return ReadSBitLong(sizeof(short) << 3); -} - -int bf_read::ReadWord() -{ - return ReadUBitLong(sizeof(unsigned short) << 3); -} - -long bf_read::ReadLong() -{ - return ReadSBitLong(sizeof(long) << 3); -} - -float bf_read::ReadFloat() -{ - float ret; - Assert( sizeof(ret) == 4 ); - ReadBits(&ret, 32); - return ret; -} - -bool bf_read::ReadBytes(void *pOut, int nBytes) -{ - return ReadBits(pOut, nBytes << 3); -} - -bool bf_read::ReadString( char *pStr, int maxLen, bool bLine, int *pOutNumChars ) -{ - Assert( maxLen != 0 ); - - bool bTooSmall = false; - int iChar = 0; - while(1) - { - char val = ReadChar(); - if ( val == 0 ) - break; - else if ( bLine && val == '\n' ) - break; - - if ( iChar < (maxLen-1) ) - { - pStr[iChar] = val; - ++iChar; - } - else - { - bTooSmall = true; - } - } - - // Make sure it's null-terminated. - Assert( iChar < maxLen ); - pStr[iChar] = 0; - - if ( pOutNumChars ) - *pOutNumChars = iChar; - - return !IsOverflowed() && !bTooSmall; -} - - -char* bf_read::ReadAndAllocateString( bool *pOverflow ) -{ - char str[2048]; - - int nChars; - bool bOverflow = !ReadString( str, sizeof( str ), false, &nChars ); - if ( pOverflow ) - *pOverflow = bOverflow; - - // Now copy into the output and return it; - char *pRet = new char[ nChars + 1 ]; - for ( int i=0; i <= nChars; i++ ) - pRet[i] = str[i]; - - return pRet; -} - - -bool bf_read::Seek(int iBit) -{ - if(iBit < 0) - { - SetOverflowFlag(); - m_iCurBit = m_nDataBits; - return false; - } - else if(iBit > m_nDataBits) - { - SetOverflowFlag(); - m_iCurBit = m_nDataBits; - return false; - } - else - { - m_iCurBit = iBit; - return true; - } -} - -void bf_read::ExciseBits( int startbit, int bitstoremove ) -{ - int endbit = startbit + bitstoremove; - int remaining_to_end = m_nDataBits - endbit; - - bf_write temp; - temp.StartWriting( (void *)m_pData, m_nDataBits << 3, startbit ); - - Seek( endbit ); - - for ( int i = 0; i < remaining_to_end; i++ ) - { - temp.WriteOneBit( ReadOneBit() ); - } - - Seek( startbit ); - - m_nDataBits -= bitstoremove; - m_nDataBytes = m_nDataBits >> 3; -} diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 049ee1d2..43282ece 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -42,7 +42,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" RuntimeLibrary="0" EnableEnhancedInstructionSet="0" @@ -63,7 +63,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.2.ep1.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -123,7 +123,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" Optimization="0" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -146,7 +146,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.2.ep1.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -285,7 +285,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER;ORANGEBOX_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="0" @@ -306,7 +306,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.2.ep2.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -366,7 +366,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" Optimization="0" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER;ORANGEBOX_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -389,7 +389,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.2.ep2.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -448,7 +448,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" Optimization="0" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -471,7 +471,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.1.ep1.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -531,7 +531,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..\;..\systems;..\..\public;..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMOD_MM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;SOURCEMOD_BUILD;SM_DEFAULT_THREADER" RuntimeLibrary="0" EnableEnhancedInstructionSet="0" @@ -552,7 +552,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sourcemod.1.ep1.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -603,10 +603,6 @@ RelativePath="..\ADTFactory.cpp" > </File> - <File - RelativePath="..\bitbuf.cpp" - > - </File> <File RelativePath="..\CDataPack.cpp" > diff --git a/core/smn_usermsgs.cpp b/core/smn_usermsgs.cpp index 083d333c..0e68d395 100644 --- a/core/smn_usermsgs.cpp +++ b/core/smn_usermsgs.cpp @@ -112,9 +112,7 @@ void UsrMessageNatives::OnHandleDestroy(HandleType_t type, void *object) bool UsrMessageNatives::GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) { - bf_read *pRead = (bf_read *)object; - - *pSize = sizeof(bf_read) + pRead->GetNumBytesRead() + pRead->GetNumBytesLeft(); + *pSize = sizeof(bf_read); return true; } diff --git a/core/smn_vector.cpp b/core/smn_vector.cpp index 705740ee..96bf57b9 100644 --- a/core/smn_vector.cpp +++ b/core/smn_vector.cpp @@ -31,7 +31,11 @@ #include "sm_globals.h" #include <vector.h> -#include <mathlib/math_base.h> +#if defined ORANGEBOX_BUILD +#include <mathlib.h> +#else +#include <math_base.h> +#endif #define SET_VECTOR(addr, vec) \ addr[0] = sp_ftoc(vec.x); \ @@ -181,16 +185,6 @@ static cell_t NormalizeVector(IPluginContext *pContext, const cell_t *params) return sp_ftoc(length); } -//:TODO: OMG remove this when we get the OB SDK!!1 -// as well as bitbuf.cpp (i write it here just to remind it) -#if defined ORANGEBOX_BUILD && !defined __linux__ -float ham(float _X) -{ - return sqrt(_X); -} -float (*pfSqrt)(float x) = ham; -#endif - REGISTER_NATIVES(vectorNatives) { {"GetAngleVectors", GetAngleVectors}, diff --git a/extensions/cstrike/msvc8/cstrike.vcproj b/extensions/cstrike/msvc8/cstrike.vcproj index bdf9c936..8821c1ee 100644 --- a/extensions/cstrike/msvc8/cstrike.vcproj +++ b/extensions/cstrike/msvc8/cstrike.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8,00" + Version="8.00" Name="cstrike" ProjectGUID="{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" RootNamespace="cstrike" @@ -200,7 +200,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -223,7 +223,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="2" GenerateDebugInformation="true" @@ -280,7 +280,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -303,7 +303,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="2" GenerateDebugInformation="true" @@ -360,7 +360,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM14);$(SOURCEMM14)\sourcemm;$(SOURCEMM14)\sourcehook" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -383,7 +383,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="2" GenerateDebugInformation="true" @@ -441,7 +441,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM14);$(SOURCEMM14)\sourcemm;$(SOURCEMM14)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -462,7 +462,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -522,7 +522,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -543,7 +543,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -603,7 +603,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -624,7 +624,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.cstrike.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" diff --git a/extensions/sdktools/msvc8/sdktools.vcproj b/extensions/sdktools/msvc8/sdktools.vcproj index d5c6e484..4cdb9edb 100644 --- a/extensions/sdktools/msvc8/sdktools.vcproj +++ b/extensions/sdktools/msvc8/sdktools.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8,00" + Version="8.00" Name="sdktools" ProjectGUID="{7A740927-C751-4312-BF9D-6367F8C508F8}" RootNamespace="sdk" @@ -202,7 +202,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"'$(HL2SDKOB)\public\tier1"";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -225,7 +225,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -283,7 +283,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -306,7 +306,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -364,7 +364,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -387,7 +387,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="2" IgnoreDefaultLibraryNames="LIBCMT" @@ -446,7 +446,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"'$(HL2SDKOB)\public\tier1"";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -467,7 +467,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -527,7 +527,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -548,7 +548,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" @@ -608,7 +608,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -629,7 +629,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sdktools.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" From 7a5b8caa16a06c3efafc5bc445fc39342985e7e6 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Thu, 21 Feb 2008 01:03:35 +0000 Subject: [PATCH 188/263] Added amb1460 - BfGetNumBytesLeft --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401878 --- core/smn_bitbuffer.cpp | 20 ++++++++++++++++++++ plugins/include/bitbuffer.inc | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/core/smn_bitbuffer.cpp b/core/smn_bitbuffer.cpp index 7db96957..949717e2 100644 --- a/core/smn_bitbuffer.cpp +++ b/core/smn_bitbuffer.cpp @@ -651,6 +651,25 @@ static cell_t smn_BfReadAngles(IPluginContext *pCtx, const cell_t *params) return 1; } +static cell_t smn_BfGetNumBytesLeft(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError herr; + HandleSecurity sec; + bf_read *pBitBuf; + + sec.pOwner = NULL; + sec.pIdentity = g_pCoreIdent; + + if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) + != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); + } + + return pBitBuf->GetNumBitsLeft() >> 3; +} + REGISTER_NATIVES(bitbufnatives) { {"BfWriteBool", smn_BfWriteBool}, @@ -681,5 +700,6 @@ REGISTER_NATIVES(bitbufnatives) {"BfReadVecCoord", smn_BfReadVecCoord}, {"BfReadVecNormal", smn_BfReadVecNormal}, {"BfReadAngles", smn_BfReadAngles}, + {"BfGetNumBytesLeft", smn_BfGetNumBytesLeft}, {NULL, NULL} }; diff --git a/plugins/include/bitbuffer.inc b/plugins/include/bitbuffer.inc index ddf0790d..87de566c 100644 --- a/plugins/include/bitbuffer.inc +++ b/plugins/include/bitbuffer.inc @@ -314,3 +314,12 @@ native BfReadVecNormal(Handle:bf, Float:vec[3]); * @error Invalid or incorrect Handle. */ native BfReadAngles(Handle:bf, Float:angles[3]); + +/** + * Returns the number of bytes left in a readable bitbuffer (bf_read). + * + * @param bf bf_read handle to read from. + * @return Number of bytes left unread. + * @error Invalid or incorrect Handle. + */ +native BfGetNumBytesLeft(Handle:bf); From cf52d02803d186bae853f35b5cf48facebc55e03 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 01:56:22 +0000 Subject: [PATCH 189/263] fixed amb1468 - renderer marked disabled items as valid selections --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401879 --- core/MenuManager.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/core/MenuManager.cpp b/core/MenuManager.cpp index c68fe454..c7b64c1d 100644 --- a/core/MenuManager.cpp +++ b/core/MenuManager.cpp @@ -448,7 +448,14 @@ skip_search: if (position != 0) { slots[position].item = drawItems[i].position; - slots[position].type = ItemSel_Item; + if ((dr.style & ITEMDRAW_DISABLED) == ITEMDRAW_DISABLED) + { + slots[position].type = ItemSel_None; + } + else + { + slots[position].type = ItemSel_Item; + } } } } @@ -469,7 +476,14 @@ skip_search: if (position != 0) { slots[position].item = drawItems[i].position; - slots[position].type = ItemSel_Item; + if ((dr.style & ITEMDRAW_DISABLED) == ITEMDRAW_DISABLED) + { + slots[position].type = ItemSel_None; + } + else + { + slots[position].type = ItemSel_Item; + } } } } From e4450610dabc8e4e05ade4ad854d6024d34199d7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 02:23:17 +0000 Subject: [PATCH 190/263] amb1443 - SQL_QuoteString -> SQL_EscapeString --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401880 --- core/smn_database.cpp | 1 + plugins/admin-sql-threaded.sp | 2 +- plugins/include/dbi.inc | 29 ++++++++++++++++++++++++++--- plugins/sql-admin-manager.sp | 20 ++++++++++---------- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/core/smn_database.cpp b/core/smn_database.cpp index b53a271e..34f30f5c 100644 --- a/core/smn_database.cpp +++ b/core/smn_database.cpp @@ -1271,6 +1271,7 @@ REGISTER_NATIVES(dbNatives) {"SQL_CheckConfig", SQL_CheckConfig}, {"SQL_Connect", SQL_Connect}, {"SQL_ConnectEx", SQL_ConnectEx}, + {"SQL_EscapeString", SQL_QuoteString}, {"SQL_Execute", SQL_Execute}, {"SQL_FastQuery", SQL_FastQuery}, {"SQL_FetchFloat", SQL_FetchFloat}, diff --git a/plugins/admin-sql-threaded.sp b/plugins/admin-sql-threaded.sp index d5094eb0..601acd18 100644 --- a/plugins/admin-sql-threaded.sp +++ b/plugins/admin-sql-threaded.sp @@ -484,7 +484,7 @@ FetchUser(Handle:db, client) } } - SQL_QuoteString(db, name, safe_name, sizeof(safe_name)); + SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); /** * Construct the query using the information the user gave us. diff --git a/plugins/include/dbi.inc b/plugins/include/dbi.inc index c61ac0ce..cba44810 100644 --- a/plugins/include/dbi.inc +++ b/plugins/include/dbi.inc @@ -235,8 +235,14 @@ native SQL_GetInsertId(Handle:hndl); native bool:SQL_GetError(Handle:hndl, String:error[], maxlength); /** - * Quotes a database string for literal insertion. This is not needed - * for binding strings in prepared statements. + * Escapes a database string for literal insertion. This is not needed + * for binding strings in prepared statements. + * + * Generally, database strings are inserted into queries enclosed in + * single quotes ('). If user input has a single quote in it, the + * quote needs to be escaped. This function ensures that any unsafe + * characters are safely escaped according to the database engine and + * the database's character set. * * @param hndl A database Handle. * @param string String to quote. @@ -247,7 +253,24 @@ native bool:SQL_GetError(Handle:hndl, String:error[], maxlength); * The buffer must be at least 2*strlen(string)+1. * @error Invalid database or statement Handle. */ -native bool:SQL_QuoteString(Handle:database, const String:string[], String:buffer[], maxlength, &written=0); +native bool:SQL_EscapeString(Handle:database, + const String:string[], + String:buffer[], + maxlength, + &written=0); + +/** + * This is a backwards compatibility stock. You should use SQL_EscapeString() + * instead, as this function will probably be deprecated in SourceMod 1.1. + */ +stock bool:SQL_QuoteString(Handle:database, + const String:string[], + String:buffer[], + maxlength, + &written=0) +{ + return SQL_EscapeString(database, string, buffer, maxlength, written); +} /** * Executes a query and ignores the result set. diff --git a/plugins/sql-admin-manager.sp b/plugins/sql-admin-manager.sp index 33d1bcb0..587ea1e6 100644 --- a/plugins/sql-admin-manager.sp +++ b/plugins/sql-admin-manager.sp @@ -417,7 +417,7 @@ public Action:Command_SetAdminGroups(client, args) decl String:identity[65]; decl String:safe_identity[140]; GetCmdArg(2, identity, sizeof(identity)); - SQL_QuoteString(db, identity, safe_identity, sizeof(safe_identity)); + SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); decl String:query[255]; Format(query, @@ -541,9 +541,9 @@ public Action:Command_DelGroup(client, args) if (len > 1 && (name[0] == '"' && name[len-1] == '"')) { name[--len] = '\0'; - SQL_QuoteString(db, name[1], safe_name, sizeof(safe_name)); + SQL_EscapeString(db, name[1], safe_name, sizeof(safe_name)); } else { - SQL_QuoteString(db, name, safe_name, sizeof(safe_name)); + SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); } decl String:query[256]; @@ -632,7 +632,7 @@ public Action:Command_AddGroup(client, args) decl String:name[64]; decl String:safe_name[64]; GetCmdArg(1, name, sizeof(name)); - SQL_QuoteString(db, name, safe_name, sizeof(safe_name)); + SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); new Handle:hQuery; decl String:query[256]; @@ -655,7 +655,7 @@ public Action:Command_AddGroup(client, args) decl String:flags[30]; decl String:safe_flags[64]; GetCmdArg(2, flags, sizeof(safe_flags)); - SQL_QuoteString(db, flags, safe_flags, sizeof(safe_flags)); + SQL_EscapeString(db, flags, safe_flags, sizeof(safe_flags)); Format(query, sizeof(query), @@ -706,7 +706,7 @@ public Action:Command_DelAdmin(client, args) decl String:identity[65]; decl String:safe_identity[140]; GetCmdArg(2, identity, sizeof(identity)); - SQL_QuoteString(db, identity, safe_identity, sizeof(safe_identity)); + SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); decl String:query[255]; Format(query, @@ -798,7 +798,7 @@ public Action:Command_AddAdmin(client, args) return Plugin_Handled; } - SQL_QuoteString(db, identity, safe_identity, sizeof(safe_identity)); + SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); Format(query, sizeof(query), "SELECT id FROM sm_admins WHERE authtype = '%s' AND identity = '%s'", authtype, identity); if ((hQuery = SQL_Query(db, query)) == INVALID_HANDLE) @@ -819,19 +819,19 @@ public Action:Command_AddAdmin(client, args) decl String:alias[64]; decl String:safe_alias[140]; GetCmdArg(1, alias, sizeof(alias)); - SQL_QuoteString(db, alias, safe_alias, sizeof(safe_alias)); + SQL_EscapeString(db, alias, safe_alias, sizeof(safe_alias)); decl String:flags[30]; decl String:safe_flags[64]; GetCmdArg(4, flags, sizeof(flags)); - SQL_QuoteString(db, flags, safe_flags, sizeof(safe_flags)); + SQL_EscapeString(db, flags, safe_flags, sizeof(safe_flags)); decl String:password[32]; decl String:safe_password[80]; if (args > 4) { GetCmdArg(5, password, sizeof(password)); - SQL_QuoteString(db, password, safe_password, sizeof(safe_password)); + SQL_EscapeString(db, password, safe_password, sizeof(safe_password)); } else { safe_password[0] = '\0'; } From 750edc27e209e9273c31c695cc24e008834a2b1c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 02:27:08 +0000 Subject: [PATCH 191/263] fixed some pointless typos --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401881 --- configs/cfg/sourcemod.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/cfg/sourcemod.cfg b/configs/cfg/sourcemod.cfg index b98133a6..0c4f4dd7 100644 --- a/configs/cfg/sourcemod.cfg +++ b/configs/cfg/sourcemod.cfg @@ -89,14 +89,14 @@ sm_hide_slots 0 // Specifies whether or not non-admins can send messages to admins using // say_team @<message>. Valid values are 0 (disabled) or 1 (enabled) // -- -// Required: basechat.smx +// Requires: basechat.smx // Default: 1 sm_chat_mode 1 // Specifies whether or not "timeleft" will automaticly be triggered every // x seconds. Valid values are 0 (disabled) to 1800 seconds. // -- -// Required: basetriggers.smx +// Requires: basetriggers.smx // Default: 0 sm_timeleft_interval 0 @@ -104,6 +104,6 @@ sm_timeleft_interval 0 // the player who requested the info trigger. Valid values are 0 (Disabled) or // 1 (Enabled) // -- -// Required: basetriggers.smx +// Requires: basetriggers.smx // Default: 1 sm_trigger_show 1 From d7443c5af99851af5e2184b30dd2f105af2f82c9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 02:27:41 +0000 Subject: [PATCH 192/263] what --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401882 --- configs/plugin_settings.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/plugin_settings.cfg b/configs/plugin_settings.cfg index 20212f7a..d8364de0 100644 --- a/configs/plugin_settings.cfg +++ b/configs/plugin_settings.cfg @@ -4,7 +4,7 @@ * If the filename has no explicit path, it will be patched to any sub-path in the plugins folder. * * Available properties for plugins are: - * "pause" - Whether or not the plugin should load paused - "yes" or "no" (defualt) + * "pause" - Whether or not the plugin should load paused - "yes" or "no" (default) * "lifetime" - Lifetime of the plugin. Options: * "mapsync" - Plugins should be reloaded on mapchange if changed (default) * "global" - Plugin will never be unloaded or updated From 5827c76897ebaaeade3dbcde086cb4c2202cfb9d Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 02:28:33 +0000 Subject: [PATCH 193/263] added sourcemod's VDF file. yay --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401883 --- configs/metamod/sourcemod.vdf | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 configs/metamod/sourcemod.vdf diff --git a/configs/metamod/sourcemod.vdf b/configs/metamod/sourcemod.vdf new file mode 100644 index 00000000..c29686c4 --- /dev/null +++ b/configs/metamod/sourcemod.vdf @@ -0,0 +1,5 @@ +"Metamod Plugin" +{ + "alias" "sourcemod" + "file" "addons/sourcemod/bin/sourcemod_mm" +} From 5398db729c743ec8f64650e433f4200a77ee2a98 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 14:16:53 +0000 Subject: [PATCH 194/263] shiny new Makefiles with new build procedure. i've removed ep1+mms16 support for now. i've also removed -fPIC since it's useless bloat on modern x86. --HG-- rename : core/Makefile.orig => core/Makefile rename : extensions/cstrike/Makefile.orig => extensions/cstrike/Makefile rename : extensions/sdktools/Makefile.orig => extensions/sdktools/Makefile extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401884 --- core/{Makefile.orig => Makefile} | 91 ++++++++------ core/Makefile.ep1 | 108 ----------------- core/Makefile.ep2 | 111 ------------------ extensions/bintools/Makefile | 2 +- .../cstrike/{Makefile.orig => Makefile} | 71 ++++++----- extensions/cstrike/Makefile.ep1 | 88 -------------- extensions/cstrike/Makefile.ep2 | 88 -------------- extensions/geoip/Makefile | 2 +- extensions/mysql/Makefile | 2 +- .../sdktools/{Makefile.ep1 => Makefile} | 71 ++++++----- extensions/sdktools/Makefile.ep2 | 90 -------------- extensions/sdktools/Makefile.orig | 90 -------------- extensions/sqlite/Makefile | 2 +- extensions/topmenus/Makefile | 2 +- 14 files changed, 145 insertions(+), 673 deletions(-) rename core/{Makefile.orig => Makefile} (60%) delete mode 100644 core/Makefile.ep1 delete mode 100644 core/Makefile.ep2 rename extensions/cstrike/{Makefile.orig => Makefile} (51%) delete mode 100644 extensions/cstrike/Makefile.ep1 delete mode 100644 extensions/cstrike/Makefile.ep2 rename extensions/sdktools/{Makefile.ep1 => Makefile} (51%) delete mode 100644 extensions/sdktools/Makefile.ep2 delete mode 100644 extensions/sdktools/Makefile.orig diff --git a/core/Makefile.orig b/core/Makefile similarity index 60% rename from core/Makefile.orig rename to core/Makefile index 278ca7e8..e76f34ea 100644 --- a/core/Makefile.orig +++ b/core/Makefile @@ -1,22 +1,21 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson -SMM_BASE = ../../sourcemm-1.4 -HL2SDK = ../../hl2sdk +#Local paths +HL2SDK_ORIG = ../../hl2sdk +HL2SDK_OB = ../../hl2sdk-ob +SOURCEMM14 = ../../sourcemm-1.4 +SOURCEMM16 = ../../sourcemm-1.6 +SRCDS_BASE = ~/srcds SMSDK = .. -SRCDS = ~/srcds - -### EDIT BELOW FOR OTHER PROJECTS ### +#Project options OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing GCC4_FLAGS = -fvisibility=hidden GCC4_CPP_FLAGS = -fvisibility-inlines-hidden DEBUG_FLAGS = -g -ggdb3 CPP = gcc-4.1 -BINARY = sourcemod.1.ep1.so -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \ Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \ @@ -33,34 +32,59 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ smn_adt_trie.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ - systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ - systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ - vm/sp_vm_function.cpp + systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ + systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ + vm/sp_vm_function.cpp OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp OBJECTS_C = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \ zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \ zlib/uncompr.c zlib/zutil.c -LINK = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so -lpthread -static-libgcc +ifeq "$(ENGINE)" "original" + HL2SDK = $(HL2SDK_ORIG) + HL2PUB = $(HL2SDK_ORIG)/public + HL2LIB = $(HL2SDK)/linux_sdk + METAMOD = $(SOURCEMM14) + INCLUDE += -I$(HL2PUB)/dlls + SRCDS = $(SRCDS_BASE) + BINARY = sourcemod.1.ep1.so +endif +ifeq "$(ENGINE)" "orangebox" + HL2SDK = $(HL2SDK_OB) + HL2PUB = $(HL2SDK_OB)/public + HL2LIB = $(HL2SDK)/linux_sdk + CFLAGS += -DORANGEBOX_BUILD + METAMOD = $(SOURCEMM16) + INCLUDE += -I$(HL2PUB)/game/server + SRCDS = $(SRCDS_BASE)/orangebox + BINARY = sourcemod.2.ep2.so +endif +ifeq "$(BINARY)" "" + echo "You must supply ENGINE=orangebox or ENGINE=original" + false +endif -INCLUDE = -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_BASE) -I$(SMM_BASE)/sourcehook -I$(SMM_BASE)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -Isystems +LINK += $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so \ + tier0_i486.so -lpthread -static-libgcc + +INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions -Isystems \ + -I$(HL2PUB)/mathlib ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + BIN_DIR = Debug.$(ENGINE) + CFLAGS += $(DEBUG_FLAGS) else - BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + BIN_DIR = Release.$(ENGINE) + CFLAGS += $(OPT_FLAGS) endif GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse \ + -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -mfpmath=sse -msse \ -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti @@ -85,27 +109,18 @@ all: mkdir -p $(BIN_DIR)/thread ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.orig sourcemod + $(MAKE) -f Makefile sourcemod sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) -debug: - $(MAKE) -f Makefile.orig all DEBUG=true - default: all clean: - rm -rf Release/*.ox - rm -rf Release/systems/*.ox - rm -rf Release/zlib/*.oc - rm -rf Release/vm/*.ox - rm -rf Release/thread/*.ox - rm -rf Release/$(BINARY) - rm -rf Debug/*.ox - rm -rf Debug/systems/*.ox - rm -rf Debug/zlib/*.oc - rm -rf Debug/vm/*.ox - rm -rf Debug/thread/*.ox - rm -rf Debug/$(BINARY) + rm -rf $(BIN_DIR)/*.ox + rm -rf $(BIN_DIR)/systems/*.ox + rm -rf $(BIN_DIR)/zlib/*.oc + rm -rf $(BIN_DIR)/vm/*.ox + rm -rf $(BIN_DIR)/thread/*.ox + rm -rf $(BIN_DIR)/$(BINARY) diff --git a/core/Makefile.ep1 b/core/Makefile.ep1 deleted file mode 100644 index 01002949..00000000 --- a/core/Makefile.ep1 +++ /dev/null @@ -1,108 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMM_BASE = ../../sourcemm-1.6 -HL2SDK = ../../hl2sdk -SMSDK = .. -SRCDS = ~/srcds - -### EDIT BELOW FOR OTHER PROJECTS ### - -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -GCC4_FLAGS = -fvisibility=hidden -GCC4_CPP_FLAGS = -fvisibility-inlines-hidden -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -BINARY = sourcemod.2.ep1.so - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \ - Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \ - MemoryUtils.cpp PlayerManager.cpp TextParsers.cpp TimerSys.cpp Translator.cpp UserMessages.cpp \ - sm_autonatives.cpp sm_memtable.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \ - sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \ - MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \ - frame_hooks.cpp concmd_cleaner.cpp -OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ - smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ - smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ - smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ - smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ - smn_adt_trie.cpp -OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ - systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ - systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ - vm/sp_vm_function.cpp -OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp -OBJECTS_C = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \ - zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \ - zlib/uncompr.c zlib/zutil.c - -LINK = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so -lpthread -static-libgcc - -INCLUDE = -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_BASE) -I$(SMM_BASE)/sourcehook -I$(SMM_BASE)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -Isystems - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) -endif - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) - -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -ifeq "$(GCC_VERSION)" "4" - CFLAGS += $(GCC4_FLAGS) - CPPFLAGS += $(GCC4_CPP_FLAGS) -endif - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.ox) -OBJ_LINUX_C := $(OBJECTS_C:%.c=$(BIN_DIR)/%.oc) - -$(BIN_DIR)/%.ox: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -$(BIN_DIR)/%.oc: %.c - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/systems - mkdir -p $(BIN_DIR)/vm - mkdir -p $(BIN_DIR)/zlib - mkdir -p $(BIN_DIR)/thread - ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep1 sourcemod - -sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.ep1 all DEBUG=true - -default: all - -clean: - rm -rf Release/*.ox - rm -rf Release/systems/*.ox - rm -rf Release/zlib/*.oc - rm -rf Release/vm/*.ox - rm -rf Release/thread/*.ox - rm -rf Release/$(BINARY) - rm -rf Debug/*.ox - rm -rf Debug/systems/*.ox - rm -rf Debug/zlib/*.oc - rm -rf Debug/vm/*.ox - rm -rf Debug/thread/*.ox - rm -rf Debug/$(BINARY) - diff --git a/core/Makefile.ep2 b/core/Makefile.ep2 deleted file mode 100644 index b5638966..00000000 --- a/core/Makefile.ep2 +++ /dev/null @@ -1,111 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMM_BASE = ../../sourcemm-1.6 -HL2SDK = ../../hl2sdk-ob -SMSDK = .. -SRCDS = ~/srcds - -### EDIT BELOW FOR OTHER PROJECTS ### - -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -GCC4_FLAGS = -fvisibility=hidden -GCC4_CPP_FLAGS = -fvisibility-inlines-hidden -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -BINARY = sourcemod.2.ep2.so - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \ - Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \ - MemoryUtils.cpp PlayerManager.cpp TextParsers.cpp TimerSys.cpp Translator.cpp UserMessages.cpp \ - sm_autonatives.cpp sm_memtable.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \ - sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \ - MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \ - frame_hooks.cpp concmd_cleaner.cpp -OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ - smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ - smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ - smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ - smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ - smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ - smn_adt_trie.cpp -OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ - systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ - systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ - vm/sp_vm_function.cpp -OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp -OBJECTS_C = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \ - zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \ - zlib/uncompr.c zlib/zutil.c - -LINK = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so -lpthread -static-libgcc - -INCLUDE = -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_BASE) -I$(SMM_BASE)/sourcehook -I$(SMM_BASE)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -Isystems - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) -endif - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) - -CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ - -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ - -Wall -Wno-uninitialized -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER \ - -DORANGEBOX_BUILD -m32 -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -ifeq "$(GCC_VERSION)" "4" - CFLAGS += $(GCC4_FLAGS) - CPPFLAGS += $(GCC4_CPP_FLAGS) -endif - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.ox) -OBJ_LINUX_C := $(OBJECTS_C:%.c=$(BIN_DIR)/%.oc) - -$(BIN_DIR)/%.ox: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -$(BIN_DIR)/%.oc: %.c - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/systems - mkdir -p $(BIN_DIR)/vm - mkdir -p $(BIN_DIR)/zlib - mkdir -p $(BIN_DIR)/thread - ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep2 sourcemod - -sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.ep2 all DEBUG=true - -default: all - -clean: - rm -rf Release/*.ox - rm -rf Release/systems/*.ox - rm -rf Release/zlib/*.oc - rm -rf Release/vm/*.ox - rm -rf Release/thread/*.ox - rm -rf Release/$(BINARY) - rm -rf Debug/*.ox - rm -rf Debug/systems/*.ox - rm -rf Debug/zlib/*.oc - rm -rf Debug/vm/*.ox - rm -rf Debug/thread/*.ox - rm -rf Debug/$(BINARY) - diff --git a/extensions/bintools/Makefile b/extensions/bintools/Makefile index 66a2976e..fd8c1f79 100644 --- a/extensions/bintools/Makefile +++ b/extensions/bintools/Makefile @@ -39,7 +39,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ + -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -m32 diff --git a/extensions/cstrike/Makefile.orig b/extensions/cstrike/Makefile similarity index 51% rename from extensions/cstrike/Makefile.orig rename to extensions/cstrike/Makefile index 51504fca..78c71e63 100644 --- a/extensions/cstrike/Makefile.orig +++ b/extensions/cstrike/Makefile @@ -1,10 +1,12 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson +HL2SDK_ORIG = ../../../hl2sdk +HL2SDK_OB = ../../../hl2sdk-ob +SOURCEMM14 = ../../../sourcemm-1.4 +SOURCEMM16 = ../../../sourcemm-1.6 +SRCDS_BASE = ~/srcds SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm-1.4 -HL2SDK = ../../../hl2sdk ##################################### ### EDIT BELOW FOR OTHER PROJECTS ### @@ -12,9 +14,6 @@ HL2SDK = ../../../hl2sdk PROJECT = game.cstrike -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so - OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp ############################################## @@ -26,29 +25,50 @@ C_DEBUG_FLAGS = -g -ggdb3 CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden CPP = gcc-4.1 -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk +ifeq "$(ENGINE)" "original" + HL2SDK = $(HL2SDK_ORIG) + HL2PUB = $(HL2SDK_ORIG)/public + HL2LIB = $(HL2SDK_ORIG)/linux_sdk + METAMOD = $(SOURCEMM14) + INCLUDE += -I$(HL2SDK)/public/dlls + SRCDS = $(SRCDS_BASE) +endif +ifeq "$(ENGINE)" "orangebox" + HL2SDK = $(HL2SDK_OB) + HL2PUB = $(HL2SDK_OB)/public + HL2LIB = $(HL2SDK_OB)/linux_sdk + CFLAGS += -DORANGEBOX_BUILD + METAMOD = $(SOURCEMM16) + INCLUDE += -I$(HL2SDK)/public/game/server + SRCDS = $(SRCDS_BASE)/orangebox +endif +ifeq "$(ENGINE)" "" + echo "You must supply ENGINE=orangebox or ENGINE=original" + false +endif -LINK = $(LINK_HL2) -static-libgcc +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ +LINK += $(LINK_HL2) -static-libgcc -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ +INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions + +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ - -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 +CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti ################################################ ### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### ################################################ ifeq "$(DEBUG)" "true" - BIN_DIR = Debug + BIN_DIR = Debug.$(ENGINE) CFLAGS += $(C_DEBUG_FLAGS) else - BIN_DIR = Release + BIN_DIR = Release.$(ENGINE) CFLAGS += $(C_OPT_FLAGS) endif @@ -69,20 +89,15 @@ all: mkdir -p $(BIN_DIR)/sdk ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.orig extension + $(MAKE) -f Makefile extension extension: $(OBJ_LINUX) $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) -debug: - $(MAKE) -f Makefile.orig all DEBUG=true - default: all clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -rf $(BIN_DIR)/$(BINARY) + diff --git a/extensions/cstrike/Makefile.ep1 b/extensions/cstrike/Makefile.ep1 deleted file mode 100644 index 6bfeafe5..00000000 --- a/extensions/cstrike/Makefile.ep1 +++ /dev/null @@ -1,88 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm -HL2SDK = ../../../hl2sdk - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -PROJECT = game.cstrike - -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so - -OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -g -ggdb3 -CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden -CPP = gcc-4.1 - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -LINK = $(LINK_HL2) -static-libgcc - -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ - -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ - -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS += $(C_OPT_FLAGS) -endif - - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -BINARY = $(PROJECT).ext.so - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/sdk - ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep1 extension - -extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.ep1 all DEBUG=true - -default: all - -clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) diff --git a/extensions/cstrike/Makefile.ep2 b/extensions/cstrike/Makefile.ep2 deleted file mode 100644 index 5852266e..00000000 --- a/extensions/cstrike/Makefile.ep2 +++ /dev/null @@ -1,88 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm -HL2SDK = ../../../hl2sdk-ob - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -PROJECT = game.cstrike - -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so - -OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -g -ggdb3 -CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden -CPP = gcc-4.1 - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -LINK = $(LINK_HL2) -static-libgcc - -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ - -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ - -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DORANGEBOX_BUILD -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS += $(C_OPT_FLAGS) -endif - - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -BINARY = $(PROJECT).ext.so - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/sdk - ln -sf $(SRCDS)/orangebox/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/orangebox/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep2 extension - -extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.ep2 all DEBUG=true - -default: all - -clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) diff --git a/extensions/geoip/Makefile b/extensions/geoip/Makefile index fce544d6..29e872f7 100644 --- a/extensions/geoip/Makefile +++ b/extensions/geoip/Makefile @@ -38,7 +38,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD \ + -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD \ -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti diff --git a/extensions/mysql/Makefile b/extensions/mysql/Makefile index 5af33974..3fb9a0c3 100644 --- a/extensions/mysql/Makefile +++ b/extensions/mysql/Makefile @@ -43,7 +43,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine \ CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ + -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \ -Wno-switch -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti diff --git a/extensions/sdktools/Makefile.ep1 b/extensions/sdktools/Makefile similarity index 51% rename from extensions/sdktools/Makefile.ep1 rename to extensions/sdktools/Makefile index 28a16db1..d02951cf 100644 --- a/extensions/sdktools/Makefile.ep1 +++ b/extensions/sdktools/Makefile @@ -1,10 +1,12 @@ #(C)2004-2006 SourceMM Development Team # Makefile written by David "BAILOPAN" Anderson +HL2SDK_ORIG = ../../../hl2sdk +HL2SDK_OB = ../../../hl2sdk-ob +SOURCEMM14 = ../../../sourcemm-1.4 +SOURCEMM16 = ../../../sourcemm-1.6 +SRCDS_BASE = ~/srcds SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm -HL2SDK = ../../../hl2sdk ##################################### ### EDIT BELOW FOR OTHER PROJECTS ### @@ -12,9 +14,6 @@ HL2SDK = ../../../hl2sdk PROJECT = sdktools -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so - OBJECTS = sdk/smsdk_ext.cpp extension.cpp vdecoder.cpp vcallbuilder.cpp vcaller.cpp \ vnatives.cpp vsound.cpp tenatives.cpp trnatives.cpp tempents.cpp vstringtable.cpp \ vhelpers.cpp vglobals.cpp voice.cpp inputnatives.cpp teamnatives.cpp @@ -28,33 +27,53 @@ C_DEBUG_FLAGS = -g -ggdb3 CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden CPP = gcc-4.1 -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk +ifeq "$(ENGINE)" "original" + HL2SDK = $(HL2SDK_ORIG) + HL2PUB = $(HL2SDK_ORIG)/public + HL2LIB = $(HL2SDK_ORIG)/linux_sdk + METAMOD = $(SOURCEMM14) + INCLUDE += -I$(HL2SDK)/public/dlls + SRCDS = $(SRCDS_BASE) +endif +ifeq "$(ENGINE)" "orangebox" + HL2SDK = $(HL2SDK_OB) + HL2PUB = $(HL2SDK_OB)/public + HL2LIB = $(HL2SDK_OB)/linux_sdk + CFLAGS += -DORANGEBOX_BUILD + METAMOD = $(SOURCEMM16) + INCLUDE += -I$(HL2SDK)/public/game/server -I$(HL2SDK)/common + SRCDS = $(SRCDS_BASE)/orangebox +endif +ifeq "$(ENGINE)" "" + echo "You must supply ENGINE=orangebox or ENGINE=original" + false +endif -LINK = $(LINK_HL2) -static-libgcc +LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ +LINK += $(LINK_HL2) -static-libgcc -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ +INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \ - -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics + -Wno-unused -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 +CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics ################################################ ### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### ################################################ ifeq "$(DEBUG)" "true" - BIN_DIR = Debug + BIN_DIR = Debug.$(ENGINE) CFLAGS += $(C_DEBUG_FLAGS) else - BIN_DIR = Release + BIN_DIR = Release.$(ENGINE) CFLAGS += $(C_OPT_FLAGS) endif - GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) ifeq "$(GCC_VERSION)" "4" CPPFLAGS += $(CPP_GCC4_FLAGS) @@ -71,20 +90,18 @@ all: mkdir -p $(BIN_DIR)/sdk ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep1 extension + $(MAKE) -f Makefile extension extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + $(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: - $(MAKE) -f Makefile.ep1 all DEBUG=true + $(MAKE) -f Makefile all DEBUG=true default: all clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -rf $(BIN_DIR)/$(BINARY) + diff --git a/extensions/sdktools/Makefile.ep2 b/extensions/sdktools/Makefile.ep2 deleted file mode 100644 index b82a0b6d..00000000 --- a/extensions/sdktools/Makefile.ep2 +++ /dev/null @@ -1,90 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm-1.6 -HL2SDK = ../../../hl2sdk-ob - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -PROJECT = sdktools - -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so - -OBJECTS = sdk/smsdk_ext.cpp extension.cpp vdecoder.cpp vcallbuilder.cpp vcaller.cpp \ - vnatives.cpp vsound.cpp tenatives.cpp trnatives.cpp tempents.cpp vstringtable.cpp \ - vhelpers.cpp vglobals.cpp voice.cpp inputnatives.cpp teamnatives.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -g -ggdb3 -CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden -CPP = gcc-4.1 - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -LINK = $(LINK_HL2) -static-libgcc - -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ - -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \ - -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DORANGEBOX_BUILD -m32 -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS += $(C_OPT_FLAGS) -endif - - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -BINARY = $(PROJECT).ext.so - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/sdk - ln -sf $(SRCDS)/orangebox/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/orangebox/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.ep2 extension - -extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.ep2 all DEBUG=true - -default: all - -clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) diff --git a/extensions/sdktools/Makefile.orig b/extensions/sdktools/Makefile.orig deleted file mode 100644 index b34a3e4a..00000000 --- a/extensions/sdktools/Makefile.orig +++ /dev/null @@ -1,90 +0,0 @@ -#(C)2004-2006 SourceMM Development Team -# Makefile written by David "BAILOPAN" Anderson - -SMSDK = ../.. -SRCDS = ~/srcds -SOURCEMM = ../../../sourcemm-1.4 -HL2SDK = ../../../hl2sdk - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -PROJECT = sdktools - -#Uncomment for SourceMM-enabled extensions -LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so - -OBJECTS = sdk/smsdk_ext.cpp extension.cpp vdecoder.cpp vcallbuilder.cpp vcaller.cpp \ - vnatives.cpp vsound.cpp tenatives.cpp trnatives.cpp tempents.cpp vstringtable.cpp \ - vhelpers.cpp vglobals.cpp voice.cpp inputnatives.cpp teamnatives.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -g -ggdb3 -CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden -CPP = gcc-4.1 - -HL2PUB = $(HL2SDK)/public -HL2LIB = $(HL2SDK)/linux_sdk - -LINK = $(LINK_HL2) -static-libgcc - -INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ - -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ - -CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ - -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \ - -Wno-unused -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 -CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS += $(C_OPT_FLAGS) -endif - - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -BINARY = $(PROJECT).ext.so - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR)/sdk - ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so - ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so - $(MAKE) -f Makefile.orig extension - -extension: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile.orig all DEBUG=true - -default: all - -clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(BINARY) diff --git a/extensions/sqlite/Makefile b/extensions/sqlite/Makefile index 2839482d..ff7ed908 100644 --- a/extensions/sqlite/Makefile +++ b/extensions/sqlite/Makefile @@ -57,7 +57,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -Wno-uninitialized \ + -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -Wno-uninitialized \ -DSQLITE_THREADSAFE -DSQLITE_OMIT_LOAD_EXTENSION -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti diff --git a/extensions/topmenus/Makefile b/extensions/topmenus/Makefile index 769d133a..1fe7e23f 100644 --- a/extensions/topmenus/Makefile +++ b/extensions/topmenus/Makefile @@ -38,7 +38,7 @@ INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2 CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch -Wno-unused -fPIC -mfpmath=sse -msse \ + -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch -Wno-unused -mfpmath=sse -msse \ -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized -m32 CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti From b66203259ba0b590181b93fcd6afc5d166991179 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 14:20:02 +0000 Subject: [PATCH 195/263] attempt at getting the build tool to use the new makefiles --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401885 --- tools/builder/LinuxBuilder.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/builder/LinuxBuilder.cs b/tools/builder/LinuxBuilder.cs index a4eeccf5..c843bd21 100644 --- a/tools/builder/LinuxBuilder.cs +++ b/tools/builder/LinuxBuilder.cs @@ -49,25 +49,25 @@ namespace builder File.Delete(binpath); } - string makefile_name = "Makefile"; + string makefile_args = null; if (lib.build_mode == BuildMode.BuildMode_Episode1) { - makefile_name = "Makefile.ep1"; + makefile_args = null; } else if (lib.build_mode == BuildMode.BuildMode_Episode2) { - makefile_name = "Makefile.ep2"; + makefile_args = "ENGINE=\"orangebox\""; } else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) { - makefile_name = "Makefile.orig"; + makefile_args = "ENGINE=\"original\""; } /* Clean the project first */ info.WorkingDirectory = path; info.FileName = cfg.builder_path; - info.Arguments = "-f " + makefile_name + " clean"; + info.Arguments = makefile_args + " clean"; info.UseShellExecute = false; Process p = Process.Start(info); @@ -77,7 +77,7 @@ namespace builder /* Now build it */ info.WorkingDirectory = path; info.FileName = cfg.builder_path; - info.Arguments = "-f " + makefile_name; + info.Arguments = makefile_args + " clean"; info.UseShellExecute = false; if (cfg.build_options != null) From c733283b90f512c884cece252297de572371f308 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 14:32:08 +0000 Subject: [PATCH 196/263] more fixes for build tool --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401886 --- tools/builder/LinuxBuilder.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/builder/LinuxBuilder.cs b/tools/builder/LinuxBuilder.cs index c843bd21..9de45697 100644 --- a/tools/builder/LinuxBuilder.cs +++ b/tools/builder/LinuxBuilder.cs @@ -49,7 +49,7 @@ namespace builder File.Delete(binpath); } - string makefile_args = null; + string makefile_args = ""; if (lib.build_mode == BuildMode.BuildMode_Episode1) { @@ -58,10 +58,12 @@ namespace builder else if (lib.build_mode == BuildMode.BuildMode_Episode2) { makefile_args = "ENGINE=\"orangebox\""; + binpath += ".orangebox"; } else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) { makefile_args = "ENGINE=\"original\""; + binpath += ".original"; } /* Clean the project first */ @@ -77,7 +79,7 @@ namespace builder /* Now build it */ info.WorkingDirectory = path; info.FileName = cfg.builder_path; - info.Arguments = makefile_args + " clean"; + info.Arguments = makefile_args; info.UseShellExecute = false; if (cfg.build_options != null) From 90d275109ac17575dcb5a7086f1116aefbedd271 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 14:36:04 +0000 Subject: [PATCH 197/263] another build tool fix, golly --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401887 --- tools/builder/LinuxBuilder.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/builder/LinuxBuilder.cs b/tools/builder/LinuxBuilder.cs index 9de45697..1fac9619 100644 --- a/tools/builder/LinuxBuilder.cs +++ b/tools/builder/LinuxBuilder.cs @@ -39,9 +39,20 @@ namespace builder } } + string output_folder = (lib.release_mode == ReleaseMode.ReleaseMode_Release) ? "Release" : "Debug"; + + if (lib.build_mode == BuildMode.BuildMode_Episode2) + { + output_folder += ".orangebox"; + } + else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) + { + output_folder += ".original"; + } + string binpath = Config.PathFormat("{0}/{1}/{2}", path, - (lib.release_mode == ReleaseMode.ReleaseMode_Release) ? "Release" : "Debug", + output_folder, binName); if (File.Exists(binpath)) @@ -58,12 +69,10 @@ namespace builder else if (lib.build_mode == BuildMode.BuildMode_Episode2) { makefile_args = "ENGINE=\"orangebox\""; - binpath += ".orangebox"; } else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) { makefile_args = "ENGINE=\"original\""; - binpath += ".original"; } /* Clean the project first */ From d2740940fcaa26fa0599b7a0157eebe2ffd4cb34 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 15:05:51 +0000 Subject: [PATCH 198/263] fixed double quotes in project filex --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401888 --- extensions/sdktools/msvc8/sdktools.vcproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/sdktools/msvc8/sdktools.vcproj b/extensions/sdktools/msvc8/sdktools.vcproj index 4cdb9edb..bc11f13a 100644 --- a/extensions/sdktools/msvc8/sdktools.vcproj +++ b/extensions/sdktools/msvc8/sdktools.vcproj @@ -202,7 +202,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"'$(HL2SDKOB)\public\tier1"";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -446,7 +446,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"'$(HL2SDKOB)\public\tier1"";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" From 67442ac4a00a50e4209e6ab84ee9cc1be0a45b9a Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 16:07:27 +0000 Subject: [PATCH 199/263] added amb1447 - IRootConsoleMenu exposure --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401889 --- core/sm_srvcmds.cpp | 12 ++++++++++++ core/sm_srvcmds.h | 3 +++ public/IRootConsoleMenu.h | 12 ++++++------ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index 657a8176..4e374084 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -35,6 +35,7 @@ #include "HandleSys.h" #include "CoreConfig.h" #include "ConVarManager.h" +#include "ShareSys.h" RootConsoleMenu g_RootMenu; @@ -82,6 +83,7 @@ void RootConsoleMenu::OnSourceModStartup(bool late) void RootConsoleMenu::OnSourceModAllInitialized() { g_ConVarManager.AddConVarChangeListener("hostname", &s_HostnameChangeDetector); + g_ShareSys.AddInterface(NULL, this); } void RootConsoleMenu::OnSourceModShutdown() @@ -215,6 +217,16 @@ void RootConsoleMenu::DrawGenericOption(const char *cmd, const char *text) } } +const char *RootConsoleMenu::GetInterfaceName() +{ + return SMINTERFACE_ROOTCONSOLE_NAME; +} + +unsigned int RootConsoleMenu::GetInterfaceVersion() +{ + return SMINTERFACE_ROOTCONSOLE_VERSION; +} + extern void _IntExt_EnableYams(); void RootConsoleMenu::GotRootCmd(const CCommand &cmd) diff --git a/core/sm_srvcmds.h b/core/sm_srvcmds.h index c3950909..5d38d666 100644 --- a/core/sm_srvcmds.h +++ b/core/sm_srvcmds.h @@ -59,6 +59,9 @@ class RootConsoleMenu : public: RootConsoleMenu(); ~RootConsoleMenu(); +public: + const char *GetInterfaceName(); + unsigned int GetInterfaceVersion(); public: //IConCommandBaseAccessor bool RegisterConCommandBase(ConCommandBase *pCommand); public: //SMGlobalClass diff --git a/public/IRootConsoleMenu.h b/public/IRootConsoleMenu.h index 928d8758..dd0da8c9 100644 --- a/public/IRootConsoleMenu.h +++ b/public/IRootConsoleMenu.h @@ -36,13 +36,13 @@ * @file IRootConsoleMenu.h * @brief Defines the interface for adding options to the "sm" console command. * - * This interface is not yet exported. It will be eventually. The initial reason should - * be obvious: we do not want users actually touching it. If we exposed this, every little - * plugin would be dropping down a silly set of user commands, and exploiting/cluttering the menu. - * Since this menu is explicitly provided for stuff that only Core itself is capable of managing, - * we won't expose it until a legitimate reason comes up. + * You must be using the compat_wrappers.h header file to use this on + * Original/Episode1 builds. */ +#define SMINTERFACE_ROOTCONSOLE_NAME "IRootConsole" +#define SMINTERFACE_ROOTCONSOLE_VERSION 1 + class CCommand; namespace SourceMod @@ -59,7 +59,7 @@ namespace SourceMod /** * @brief Manages the root console menu - the "sm" command for servers. */ - class IRootConsole + class IRootConsole : public SMInterface { public: /** From 1f57da5aa0adecbd4e32d8c8ca6a21b9a4624660 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 16:51:15 +0000 Subject: [PATCH 200/263] added amb1418 - FIELD_STRING support for GetEntPropString() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401890 --- core/smn_entities.cpp | 30 ++++++++++++++++++++++++++++-- plugins/include/entity.inc | 8 ++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/core/smn_entities.cpp b/core/smn_entities.cpp index f8fe5ecf..cd3e4ea1 100644 --- a/core/smn_entities.cpp +++ b/core/smn_entities.cpp @@ -52,6 +52,7 @@ enum PropFieldType PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ PropField_Vector, /**< Valid for SendProp and Data fields */ PropField_String, /**< Valid for SendProp and Data fields */ + PropField_String_T, /**< Valid for Data fields. Read only! */ }; inline edict_t *GetEdict(cell_t num) @@ -795,6 +796,12 @@ static cell_t FindDataMapOffs(IPluginContext *pContext, const cell_t *params) } break; } + case FIELD_STRING: + { + *pSize = sizeof(string_t); + *pType = PropField_String_T; + break; + } case FIELD_FLOAT: case FIELD_TIME: { @@ -1580,6 +1587,7 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) int offset; const char *class_name; edict_t *pEdict; + bool bIsStringIndex; pEdict = GetEntity(params[1], &pEntity); @@ -1595,6 +1603,8 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) pContext->LocalToString(params[3], &prop); + bIsStringIndex = false; + switch (params[2]) { case Prop_Data: @@ -1603,7 +1613,8 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) FIND_PROP_DATA(td); - if (td->fieldType != FIELD_CHARACTER) + if (td->fieldType != FIELD_CHARACTER + && td->fieldType != FIELD_STRING) { return pContext->ThrowNativeError("Data field %s is not a string (%d != %d)", prop, @@ -1611,6 +1622,8 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) FIELD_CHARACTER); } + bIsStringIndex = (td->fieldType == FIELD_STRING); + offset = td->fieldOffset[TD_OFFSET_NORMAL]; break; } @@ -1639,7 +1652,20 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) } size_t len; - char *src = (char *)((uint8_t *)pEntity + offset); + const char *src; + + if (!bIsStringIndex) + { + src = (char *)((uint8_t *)pEntity + offset); + } + else + { + string_t idx; + + idx = *(string_t *)((uint8_t *)pEntity + offset); + src = (idx == NULL_STRING) ? "" : STRING(idx); + } + pContext->StringToLocalUTF8(params[4], params[5], src, &len); return len; diff --git a/plugins/include/entity.inc b/plugins/include/entity.inc index 79d90fc4..fefc76f5 100644 --- a/plugins/include/entity.inc +++ b/plugins/include/entity.inc @@ -67,6 +67,11 @@ enum PropFieldType PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ PropField_Vector, /**< Valid for SendProp and Data fields */ PropField_String, /**< Valid for SendProp and Data fields */ + PropField_String_T, /**< Valid for Data fields. Read only. + Note that the size of a string_t is dynamic, and + thus FindDataMapOffs() will return the constant size + of the string_t container (which is 32 bits right now). + */ }; /** @@ -619,6 +624,9 @@ native GetEntPropString(entity, PropType:type, const String:prop[], String:buffe /** * Sets a network property as a string. + * + * This cannot set property fields of type PropField_String_T (such as "m_target"). + * To set such fields, you should use DispatchKeyValue() from SDKTools. * * @param entity Edict index. * @param type Property type. From ef92966bac9035a1eead5939060b66777a70fd02 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 17:12:24 +0000 Subject: [PATCH 201/263] added amb1402 - gameconfig errors are now logged fully --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401891 --- core/GameConfigs.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index cb96c655..18ffaeb5 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -489,6 +489,7 @@ skip_find: bool CGameConfig::Reparse(char *error, size_t maxlength) { SMCError err; + SMCStates state = {0, 0}; char path[PLATFORM_MAX_PATH]; g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "gamedata/%s.txt", m_pFile); @@ -508,9 +509,19 @@ bool CGameConfig::Reparse(char *error, size_t maxlength) sm_trie_clear(m_pProps); sm_trie_clear(m_pKeys); - if ((err=textparsers->ParseSMCFile(path, this, NULL, error, maxlength)) + if ((err=textparsers->ParseSMCFile(path, this, &state, error, maxlength)) != SMCError_Okay) { + const char *msg; + + msg = textparsers->GetSMCErrorString(err); + + g_Logger.LogError("[SM] Error parsing gameconfig file \"%s\":", path); + g_Logger.LogError("[SM] Error %d on line %d, col %d: %s", + err, + state.line, + state.col, + msg ? msg : "Unknown error"); return false; } From 41f4e68e7e303f0fd703e077334ef4d16274fb3e Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 18:17:26 +0000 Subject: [PATCH 202/263] amb1442 - zps support --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401892 --- gamedata/sdktools.games.txt | 107 ++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index ea233126..dc62fb3c 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -1552,5 +1552,112 @@ } } } + + /* Zombie Panic! Source 1.2b + * Note: This mod is not fully supported yet. + * The definitions below were supplied by a third party. + */ + "$Zombie Panic! Source" + { + "Offsets" + { + "GiveNamedItem" + { + "windows" "333" + "linux" "334" + } + "RemovePlayerItem" + { + "windows" "230" + "linux" "231" + } + "Weapon_GetSlot" + { + "windows" "226" + "linux" "227" + } + "Ignite" + { + "windows" "190" + "linux" "191" + } + "Extinguish" + { + "windows" "191" + "linux" "192" + } + "Teleport" + { + "windows" "100" + "linux" "101" + } + "CommitSuicide" + { + "windows" "361" + "linux" "362" + } + "GetVelocity" + { + "windows" "128" + "linux" "129" + } + "EyeAngles" + { + "windows" "120" + "linux" "121" + } + "AcceptInput" + { + "windows" "35" + "linux" "36" + } + "DispatchKeyValue" + { + "windows" "31" + "linux" "30" + } + "DispatchKeyValueFloat" + { + "windows" "30" + "linux" "31" + } + "DispatchKeyValueVector" + { + "windows" "29" + "linux" "32" + } + "SetEntityModel" + { + "windows" "25" + "linux" "26" + } + } + "Signatures" + { + "CreateGameRulesObject" + { + "library" "server" + "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2C\x6A\x01" + } + "FindEntityByClassname" + { + "library" "server" + "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x2A\x2A\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xC1\xE0\x04\x8B\x2A\x2A\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\xA4\x24\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39" + "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + "CreateEntityByName" + { + "library" "server" + "linux" "@_Z18CreateEntityByNamePKci" + "windows" "\x56\x8B\x74\x24\x2A\x57\x8B\x7C\x24\x2A\x83\xFE\xFF\x74\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x2A\x56\xFF\xD2" + } + "DispatchSpawn" + { + "library" "server" + "linux" "@_Z13DispatchSpawnP11CBaseEntity" + "windows" "\x53\x55\x56\x8B\x74\x24\x10\x2A\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x60\x8B\xCB" + } + } + } } From b4b6238bbe37a0af261f98acc9dd3b9017ae9596 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 18:19:25 +0000 Subject: [PATCH 203/263] added credits --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401893 --- gamedata/sdktools.games.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index dc62fb3c..b0d7210c 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -1027,7 +1027,11 @@ } } - /* Garry's Mod 10 - Windows only */ + /* Garry's Mod 10 - Windows only + * This mod is not officially supported, and the definitions are + * for Garry's Mod pre-Orange Box. + * (credits: Damaged Soul) + */ "garrysmod" { "Offsets" @@ -1556,6 +1560,7 @@ /* Zombie Panic! Source 1.2b * Note: This mod is not fully supported yet. * The definitions below were supplied by a third party. + * (thanks "noob cannon lol") */ "$Zombie Panic! Source" { From 2edce74e0f7736e70843f37986f864b8c5d4cbc7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 19:22:22 +0000 Subject: [PATCH 204/263] amb1420 - full ff2.0 support --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401894 --- gamedata/sdktools.games.txt | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index b0d7210c..9ce214c5 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -203,10 +203,10 @@ "game" "!Insurgency" "game" "pvkii" "game" "$SourceForts v1.9.3" - "game" "FortressForever" "game" "empires" "game" "synergy" "game" "hidden" + "game" "FortressForever" } "Signatures" @@ -942,16 +942,7 @@ /* Fortress Forever */ "FortressForever" - { - "Signatures" - { - "CreateGameRulesObject" - { - "library" "server" - "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x3B\xCB\x74\x07\x8B\x01\x6A\x01\xFF\x50" - } - } - + { "Offsets" { "GiveNamedItem" @@ -1025,6 +1016,30 @@ "linux" "28" } } + + "Signatures" + { + "CreateGameRulesObject" + { + "library" "server" + "windows" "8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x09\x8B\x01\x8B\x50\x2C\x6A\x01" + } + "FindEntityByClassname" + { + "library" "server" + "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x04\x00\x01\x00\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03" + } + "DispatchSpawn" + { + "library" "server" + "windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x60\x8B\xCB" + } + "CreateEntityByName" + { + "library" "server" + "windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2" + } + } } /* Garry's Mod 10 - Windows only From 63cb644232268b302efc996974c4a798f8582580 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 21:01:08 +0000 Subject: [PATCH 205/263] deprecated LoadMaps() and its usage in three plugins renamed basefun* to fun* removed map file list cvars --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401895 --- configs/maplists.cfg | 21 + .../{basefuncommands.sp => funcommands.sp} | 29 +- .../beacon.sp | 0 .../{basefuncommands => funcommands}/blind.sp | 0 .../{basefuncommands => funcommands}/drug.sp | 0 .../{basefuncommands => funcommands}/fire.sp | 0 .../gravity.sp | 0 .../{basefuncommands => funcommands}/ice.sp | 0 .../noclip.sp | 0 .../timebomb.sp | 0 plugins/{basefunvotes.sp => funvotes.sp} | 17 +- .../{basefunvotes => funvotes}/votealltalk.sp | 0 .../{basefunvotes => funvotes}/voteburn.sp | 0 plugins/{basefunvotes => funvotes}/voteff.sp | 0 .../{basefunvotes => funvotes}/votegravity.sp | 0 .../{basefunvotes => funvotes}/voteslay.sp | 0 plugins/include/helpers.inc | 7 +- plugins/mapchooser.sp | 22 +- plugins/randomcycle.sp | 17 +- plugins/rockthevote.sp | 887 +++++++++--------- 20 files changed, 529 insertions(+), 471 deletions(-) rename plugins/{basefuncommands.sp => funcommands.sp} (90%) rename plugins/{basefuncommands => funcommands}/beacon.sp (100%) rename plugins/{basefuncommands => funcommands}/blind.sp (100%) rename plugins/{basefuncommands => funcommands}/drug.sp (100%) rename plugins/{basefuncommands => funcommands}/fire.sp (100%) rename plugins/{basefuncommands => funcommands}/gravity.sp (100%) rename plugins/{basefuncommands => funcommands}/ice.sp (100%) rename plugins/{basefuncommands => funcommands}/noclip.sp (100%) rename plugins/{basefuncommands => funcommands}/timebomb.sp (100%) rename plugins/{basefunvotes.sp => funvotes.sp} (93%) rename plugins/{basefunvotes => funvotes}/votealltalk.sp (100%) rename plugins/{basefunvotes => funvotes}/voteburn.sp (100%) rename plugins/{basefunvotes => funvotes}/voteff.sp (100%) rename plugins/{basefunvotes => funvotes}/votegravity.sp (100%) rename plugins/{basefunvotes => funvotes}/voteslay.sp (100%) diff --git a/configs/maplists.cfg b/configs/maplists.cfg index a331f995..06e7f1c2 100644 --- a/configs/maplists.cfg +++ b/configs/maplists.cfg @@ -27,12 +27,33 @@ "target" "mapcyclefile" } + /* Admin menu, map menu */ "sm_map menu" { "file" "addons/sourcemod/configs/adminmenu_maplist.ini" } + + /* Admin menu, map voting menu */ "sm_votemap menu" { "file" "addons/sourcemod/configs/adminmenu_maplist.ini" } + + /* For the "randomcycle" plugin */ + "randomcycle" + { + "target" "default" + } + + /* For the "mapchooser" plugin */ + "mapchooser" + { + "target" "default" + } + + /* For the "randomcycle" plugin */ + "rockthevote" + { + "target" "default" + } } diff --git a/plugins/basefuncommands.sp b/plugins/funcommands.sp similarity index 90% rename from plugins/basefuncommands.sp rename to plugins/funcommands.sp index 303e6bb4..aa5bd467 100644 --- a/plugins/basefuncommands.sp +++ b/plugins/funcommands.sp @@ -40,9 +40,9 @@ public Plugin:myinfo = { - name = "Basic Fun Commands", + name = "Fun Commands", author = "AlliedModders LLC", - description = "Basic Fun Commands", + description = "Fun Commands", version = SOURCEMOD_VERSION, url = "http://www.sourcemod.net/" }; @@ -53,7 +53,7 @@ public Plugin:myinfo = #define BEACON 1 #define TIMEBOMB 1 #define FIRE 1 -#define ICE 1 +#define ICE 1 #define GRAVITY 1 #define BLIND 1 #define NOCLIP 1 @@ -71,7 +71,7 @@ new Handle:hTopMenu = INVALID_HANDLE; #define SOUND_BEEP "buttons/button17.wav" #define SOUND_FINAL "weapons/cguard/charging.wav" #define SOUND_BOOM "weapons/explode3.wav" -#define SOUND_FREEZE "physics/glass/glass_impact_bullet4.wav" +#define SOUND_FREEZE "physics/glass/glass_impact_bullet4.wav" // Following are model indexes for temp entities new g_BeamSprite; @@ -93,32 +93,37 @@ new UserMsg:g_FadeUserMsgId; // Include various commands and supporting functions #if BEACON -#include "basefuncommands/beacon.sp" +#include "funcommands/beacon.sp" #endif #if TIMEBOMB -#include "basefuncommands/timebomb.sp" +#include "funcommands/timebomb.sp" #endif #if FIRE -#include "basefuncommands/fire.sp" +#include "funcommands/fire.sp" #endif #if ICE -#include "basefuncommands/ice.sp" +#include "funcommands/ice.sp" #endif #if GRAVITY -#include "basefuncommands/gravity.sp" +#include "funcommands/gravity.sp" #endif #if BLIND -#include "basefuncommands/blind.sp" +#include "funcommands/blind.sp" #endif #if NOCLIP -#include "basefuncommands/noclip.sp" +#include "funcommands/noclip.sp" #endif #if DRUG -#include "basefuncommands/drug.sp" +#include "funcommands/drug.sp" #endif public OnPluginStart() { + if (FindPluginByFile("basefuncommands.smx") != INVALID_HANDLE) + { + ThrowError("This plugin replaces basefuncommands. You cannot run both at once."); + } + LoadTranslations("common.phrases"); LoadTranslations("basefuncommands.phrases"); diff --git a/plugins/basefuncommands/beacon.sp b/plugins/funcommands/beacon.sp similarity index 100% rename from plugins/basefuncommands/beacon.sp rename to plugins/funcommands/beacon.sp diff --git a/plugins/basefuncommands/blind.sp b/plugins/funcommands/blind.sp similarity index 100% rename from plugins/basefuncommands/blind.sp rename to plugins/funcommands/blind.sp diff --git a/plugins/basefuncommands/drug.sp b/plugins/funcommands/drug.sp similarity index 100% rename from plugins/basefuncommands/drug.sp rename to plugins/funcommands/drug.sp diff --git a/plugins/basefuncommands/fire.sp b/plugins/funcommands/fire.sp similarity index 100% rename from plugins/basefuncommands/fire.sp rename to plugins/funcommands/fire.sp diff --git a/plugins/basefuncommands/gravity.sp b/plugins/funcommands/gravity.sp similarity index 100% rename from plugins/basefuncommands/gravity.sp rename to plugins/funcommands/gravity.sp diff --git a/plugins/basefuncommands/ice.sp b/plugins/funcommands/ice.sp similarity index 100% rename from plugins/basefuncommands/ice.sp rename to plugins/funcommands/ice.sp diff --git a/plugins/basefuncommands/noclip.sp b/plugins/funcommands/noclip.sp similarity index 100% rename from plugins/basefuncommands/noclip.sp rename to plugins/funcommands/noclip.sp diff --git a/plugins/basefuncommands/timebomb.sp b/plugins/funcommands/timebomb.sp similarity index 100% rename from plugins/basefuncommands/timebomb.sp rename to plugins/funcommands/timebomb.sp diff --git a/plugins/basefunvotes.sp b/plugins/funvotes.sp similarity index 93% rename from plugins/basefunvotes.sp rename to plugins/funvotes.sp index d00df05e..231765ae 100644 --- a/plugins/basefunvotes.sp +++ b/plugins/funvotes.sp @@ -41,7 +41,7 @@ public Plugin:myinfo = { - name = "Basic Fun Votes", + name = "Fun Votes", author = "AlliedModders LLC", description = "Fun Vote Commands", version = SOURCEMOD_VERSION, @@ -85,14 +85,19 @@ new String:g_voteInfo[3][65]; /* Holds the target's name, authid, and IP */ new Handle:hTopMenu = INVALID_HANDLE; -#include "basefunvotes/votegravity.sp" -#include "basefunvotes/voteburn.sp" -#include "basefunvotes/voteslay.sp" -#include "basefunvotes/votealltalk.sp" -#include "basefunvotes/voteff.sp" +#include "funvotes/votegravity.sp" +#include "funvotes/voteburn.sp" +#include "funvotes/voteslay.sp" +#include "funvotes/votealltalk.sp" +#include "funvotes/voteff.sp" public OnPluginStart() { + if (FindPluginByFile("basefunvotes.smx") != INVALID_HANDLE) + { + ThrowError("This plugin replaces basefuncommands. You cannot run both at once."); + } + LoadTranslations("common.phrases"); LoadTranslations("basevotes.phrases"); LoadTranslations("basefunvotes.phrases"); diff --git a/plugins/basefunvotes/votealltalk.sp b/plugins/funvotes/votealltalk.sp similarity index 100% rename from plugins/basefunvotes/votealltalk.sp rename to plugins/funvotes/votealltalk.sp diff --git a/plugins/basefunvotes/voteburn.sp b/plugins/funvotes/voteburn.sp similarity index 100% rename from plugins/basefunvotes/voteburn.sp rename to plugins/funvotes/voteburn.sp diff --git a/plugins/basefunvotes/voteff.sp b/plugins/funvotes/voteff.sp similarity index 100% rename from plugins/basefunvotes/voteff.sp rename to plugins/funvotes/voteff.sp diff --git a/plugins/basefunvotes/votegravity.sp b/plugins/funvotes/votegravity.sp similarity index 100% rename from plugins/basefunvotes/votegravity.sp rename to plugins/funvotes/votegravity.sp diff --git a/plugins/basefunvotes/voteslay.sp b/plugins/funvotes/voteslay.sp similarity index 100% rename from plugins/basefunvotes/voteslay.sp rename to plugins/funvotes/voteslay.sp diff --git a/plugins/include/helpers.inc b/plugins/include/helpers.inc index 5e6bbad1..40338059 100644 --- a/plugins/include/helpers.inc +++ b/plugins/include/helpers.inc @@ -202,6 +202,10 @@ stock FindTarget(client, const String:target[], bool:nobots = false, bool:immuni } /** + * This function is no longer supported. It has been replaced with ReadMapList(), + * which uses a more unified caching and configuration mechanism. This function also + * has a bug where if the cvar contents changes, the fileTime change won't be recognized. + * * Loads a specified array with maps. The maps will be either loaded from mapcyclefile, or if supplied * a cvar containing a file name. If the file in the cvar is bad, it will use mapcyclefile. The fileTime * parameter is used to store a timestamp of the file. If specified, the file will only be reloaded if it @@ -210,8 +214,9 @@ stock FindTarget(client, const String:target[], bool:nobots = false, bool:immuni * @param array Valid array handle, should be created with CreateArray(33) or larger. * @param fileTime Variable containing the "last changed" time of the file. Used to avoid needless reloading. * @param fileCvar CVAR set to the file to be loaded. Optional. - * @return Number of maps loaded or 0 if in error. + * @return Number of maps loaded or 0 if in error. */ +#pragma deprecated Use ReadMapList() instead. stock LoadMaps(Handle:array, &fileTime = 0, Handle:fileCvar = INVALID_HANDLE) { decl String:mapPath[256], String:mapFile[64]; diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index df4817ce..bf978f05 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -56,7 +56,6 @@ new Handle:g_Cvar_StartFrags = INVALID_HANDLE; new Handle:g_Cvar_ExtendTimeStep = INVALID_HANDLE; new Handle:g_Cvar_ExtendRoundStep = INVALID_HANDLE; new Handle:g_Cvar_ExtendFragStep = INVALID_HANDLE; -new Handle:g_Cvar_Mapfile = INVALID_HANDLE; new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; new Handle:g_Cvar_IncludeMaps = INVALID_HANDLE; new Handle:g_Cvar_NoVoteMode = INVALID_HANDLE; @@ -74,7 +73,7 @@ new Handle:g_VoteMenu = INVALID_HANDLE; new g_Extends; new g_TotalRounds; new bool:g_HasVoteStarted; -new g_mapFileTime; +new g_mapFileSerial = -1; #define VOTE_EXTEND "##extend##" @@ -93,7 +92,6 @@ public OnPluginStart() g_Cvar_ExtendTimeStep = CreateConVar("sm_extendmap_timestep", "15", "Specifies how much many more minutes each extension makes", _, true, 5.0); g_Cvar_ExtendRoundStep = CreateConVar("sm_extendmap_roundstep", "5", "Specifies how many more rounds each extension makes", _, true, 5.0); g_Cvar_ExtendFragStep = CreateConVar("sm_extendmap_fragstep", "10", "Specifies how many more frags are allowed when map is extended.", _, true, 5.0); - g_Cvar_Mapfile = CreateConVar("sm_mapvote_file", "configs/maps.ini", "Map file to use. (Def sourcemod/configs/maps.ini)"); g_Cvar_ExcludeMaps = CreateConVar("sm_mapvote_exclude", "5", "Specifies how many past maps to exclude from the vote.", _, true, 0.0); g_Cvar_IncludeMaps = CreateConVar("sm_mapvote_include", "5", "Specifies how many maps to include in the vote.", _, true, 2.0, true, 6.0); g_Cvar_NoVoteMode = CreateConVar("sm_mapvote_novote", "1", "Specifies whether or not MapChooser should pick a map if no votes are received.", _, true, 0.0, true, 1.0); @@ -128,13 +126,23 @@ public OnConfigsExecuted() SetFailState("sm_nextmap not found"); } - if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_Mapfile)) + if (ReadMapList(g_MapList, + g_mapFileSerial, + "mapchooser", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_MAPSFOLDER) + != INVALID_HANDLE) + { - CreateNextVote(); - SetupTimeleftTimer(); - SetConVarString(g_Cvar_Nextmap, "Pending Vote"); + if (g_mapFileSerial == -1) + { + LogError("Unable to create a valid map list."); + } } + CreateNextVote(); + SetupTimeleftTimer(); + SetConVarString(g_Cvar_Nextmap, "Pending Vote"); + if (g_TeamScores != INVALID_HANDLE) { CloseHandle(g_TeamScores); diff --git a/plugins/randomcycle.sp b/plugins/randomcycle.sp index 5d4137ca..e8708b9f 100644 --- a/plugins/randomcycle.sp +++ b/plugins/randomcycle.sp @@ -44,12 +44,11 @@ public Plugin:myinfo = }; new Handle:g_Cvar_Nextmap = INVALID_HANDLE; -new Handle:g_Cvar_Mapfile = INVALID_HANDLE; new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; new Handle:g_MapList = INVALID_HANDLE; new Handle:g_OldMapList = INVALID_HANDLE; -new g_mapFileTime; +new g_mapListSerial = -1; public OnPluginStart() { @@ -57,7 +56,6 @@ public OnPluginStart() g_MapList = CreateArray(arraySize); g_OldMapList = CreateArray(arraySize); - g_Cvar_Mapfile = CreateConVar("sm_randomcycle_file", "configs/maps.ini", "Map file to use. (Def sourcemod/configs/maps.ini)"); g_Cvar_ExcludeMaps = CreateConVar("sm_randomcycle_exclude", "5", "Specifies how many past maps to exclude from the vote.", _, true, 0.0); AutoExecConfig(true, "randomcycle"); @@ -73,10 +71,19 @@ public OnConfigsExecuted() SetFailState("sm_nextmap not found"); } - if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_Mapfile)) + if (ReadMapList(g_MapList, + g_mapListSerial, + "randomcycle", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_MAPSFOLDER) + == INVALID_HANDLE) { - CreateTimer(5.0, Timer_RandomizeNextmap); // Small delay to give Nextmap time to complete OnMapStart() + if (g_mapListSerial == -1) + { + LogError("Unable to create a valid map list."); + } } + + CreateTimer(5.0, Timer_RandomizeNextmap); // Small delay to give Nextmap time to complete OnMapStart() } public Action:Timer_RandomizeNextmap(Handle:timer) diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index b85b54d1..7d50b1c0 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -1,93 +1,91 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod Rock The Vote Plugin - * Creates a map vote when the required number of players have requested one. - * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#include <sourcemod> - -#pragma semicolon 1 - -public Plugin:myinfo = -{ - name = "Rock The Vote", - author = "AlliedModders LLC", - description = "Provides RTV Map Voting", - version = SOURCEMOD_VERSION, - url = "http://www.sourcemod.net/" -}; - -new Handle:g_Cvar_Needed = INVALID_HANDLE; -new Handle:g_Cvar_File = INVALID_HANDLE; -new Handle:g_Cvar_Maps = INVALID_HANDLE; -new Handle:g_Cvar_Nominate = INVALID_HANDLE; -new Handle:g_Cvar_MinPlayers = INVALID_HANDLE; - -new Handle:g_MapList = INVALID_HANDLE; -new Handle:g_RTVMapList = INVALID_HANDLE; -new Handle:g_MapMenu = INVALID_HANDLE; -new Handle:g_RetryTimer = INVALID_HANDLE; -new g_mapFileTime; - -new bool:g_CanRTV = false; // True if RTV loaded maps and is active. -new bool:g_RTVAllowed = false; // True if RTV is available to players. Used to delay rtv votes. -new bool:g_RTVStarted = false; // Indicates that the actual map vote has started -new bool:g_RTVEnded = false; // Indicates that the actual map vote has concluded -new g_Voters = 0; // Total voters connected. Doesn't include fake clients. -new g_Votes = 0; // Total number of "say rtv" votes -new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed) -new bool:g_Voted[MAXPLAYERS+1] = {false, ...}; -new bool:g_Nominated[MAXPLAYERS+1] = {false, ...}; - -public OnPluginStart() -{ - LoadTranslations("common.phrases"); +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Rock The Vote Plugin + * Creates a map vote when the required number of players have requested one. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <sourcemod> + +#pragma semicolon 1 + +public Plugin:myinfo = +{ + name = "Rock The Vote", + author = "AlliedModders LLC", + description = "Provides RTV Map Voting", + version = SOURCEMOD_VERSION, + url = "http://www.sourcemod.net/" +}; + +new Handle:g_Cvar_Needed = INVALID_HANDLE; +new Handle:g_Cvar_Maps = INVALID_HANDLE; +new Handle:g_Cvar_Nominate = INVALID_HANDLE; +new Handle:g_Cvar_MinPlayers = INVALID_HANDLE; + +new Handle:g_MapList = INVALID_HANDLE; +new Handle:g_RTVMapList = INVALID_HANDLE; +new Handle:g_MapMenu = INVALID_HANDLE; +new Handle:g_RetryTimer = INVALID_HANDLE; +new g_mapFileSerial = -1; + +new bool:g_CanRTV = false; // True if RTV loaded maps and is active. +new bool:g_RTVAllowed = false; // True if RTV is available to players. Used to delay rtv votes. +new bool:g_RTVStarted = false; // Indicates that the actual map vote has started +new bool:g_RTVEnded = false; // Indicates that the actual map vote has concluded +new g_Voters = 0; // Total voters connected. Doesn't include fake clients. +new g_Votes = 0; // Total number of "say rtv" votes +new g_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed) +new bool:g_Voted[MAXPLAYERS+1] = {false, ...}; +new bool:g_Nominated[MAXPLAYERS+1] = {false, ...}; + +public OnPluginStart() +{ + LoadTranslations("common.phrases"); LoadTranslations("rockthevote.phrases"); new arraySize = ByteCountToCells(33); g_MapList = CreateArray(arraySize); - g_RTVMapList = CreateArray(arraySize); - - g_Cvar_Needed = CreateConVar("sm_rtv_needed", "0.60", "Percentage of players needed to rockthevote (Def 60%)", 0, true, 0.05, true, 1.0); - g_Cvar_File = CreateConVar("sm_rtv_file", "configs/maps.ini", "Map file to use. (Def configs/maps.ini)"); - g_Cvar_Maps = CreateConVar("sm_rtv_maps", "4", "Number of maps to be voted on. 2 to 6. (Def 4)", 0, true, 2.0, true, 6.0); - g_Cvar_Nominate = CreateConVar("sm_rtv_nominate", "1", "Enables nomination system.", 0, true, 0.0, true, 1.0); - g_Cvar_MinPlayers = CreateConVar("sm_rtv_minplayers", "0", "Number of players required before RTV will be enabled.", 0, true, 0.0, true, float(MAXPLAYERS)); - - RegConsoleCmd("say", Command_Say); - RegConsoleCmd("say_team", Command_Say); - + g_RTVMapList = CreateArray(arraySize); + + g_Cvar_Needed = CreateConVar("sm_rtv_needed", "0.60", "Percentage of players needed to rockthevote (Def 60%)", 0, true, 0.05, true, 1.0); + g_Cvar_Maps = CreateConVar("sm_rtv_maps", "4", "Number of maps to be voted on. 2 to 6. (Def 4)", 0, true, 2.0, true, 6.0); + g_Cvar_Nominate = CreateConVar("sm_rtv_nominate", "1", "Enables nomination system.", 0, true, 0.0, true, 1.0); + g_Cvar_MinPlayers = CreateConVar("sm_rtv_minplayers", "0", "Number of players required before RTV will be enabled.", 0, true, 0.0, true, float(MAXPLAYERS)); + + RegConsoleCmd("say", Command_Say); + RegConsoleCmd("say_team", Command_Say); + RegAdminCmd("sm_rtv_addmap", Command_Addmap, ADMFLAG_CHANGEMAP, "sm_rtv_addmap <mapname> - Forces a map to be on the RTV, and lowers the allowed nominations."); - AutoExecConfig(true, "rtv"); -} + AutoExecConfig(true, "rtv"); +} public OnMapStart() { @@ -97,13 +95,13 @@ public OnMapStart() g_RTVStarted = false; g_RTVEnded = false; } - -public OnMapEnd() + +public OnMapEnd() { - g_CanRTV = false; - g_RTVAllowed = false; -} - + g_CanRTV = false; + g_RTVAllowed = false; +} + public OnConfigsExecuted() { if (g_RTVMapList != INVALID_HANDLE) @@ -111,239 +109,248 @@ public OnConfigsExecuted() ClearArray(g_RTVMapList); } - if (LoadMaps(g_MapList, g_mapFileTime, g_Cvar_File)) + if (ReadMapList(g_MapList, + g_mapFileSerial, + "rockthevote", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_MAPSFOLDER) + == INVALID_HANDLE) { - BuildMapMenu(); - g_CanRTV = true; - CreateTimer(30.0, Timer_DelayRTV); + if (g_mapFileSerial == -1) + { + LogError("Unable to create a valid map list."); + } } -} - -public bool:OnClientConnect(client, String:rejectmsg[], maxlen) -{ - if(!g_CanRTV || IsFakeClient(client)) - return true; - - g_Voted[client] = false; - g_Nominated[client] = false; - - g_Voters++; - g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); - - return true; -} - -public OnClientDisconnect(client) -{ - if(!g_CanRTV || IsFakeClient(client)) - return; - - if(g_Voted[client]) - { - g_Votes--; - } - - g_Voters--; - g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); - - if (g_Votes && g_Voters && g_Votes >= g_VotesNeeded && g_RTVAllowed && !g_RTVStarted) + BuildMapMenu(); + g_CanRTV = true; + CreateTimer(30.0, Timer_DelayRTV); +} + +public bool:OnClientConnect(client, String:rejectmsg[], maxlen) +{ + if(!g_CanRTV || IsFakeClient(client)) + return true; + + g_Voted[client] = false; + g_Nominated[client] = false; + + g_Voters++; + g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); + + return true; +} + +public OnClientDisconnect(client) +{ + if(!g_CanRTV || IsFakeClient(client)) + return; + + if(g_Voted[client]) { - g_RTVStarted = true; - CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); - } -} - -public Action:Command_Addmap(client, args) -{ - if (args < 1) - { - ReplyToCommand(client, "[SM] Usage: sm_rtv_addmap <mapname>"); - return Plugin_Handled; + g_Votes--; + } + + g_Voters--; + + g_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); + + if (g_Votes && g_Voters && g_Votes >= g_VotesNeeded && g_RTVAllowed && !g_RTVStarted) + { + g_RTVStarted = true; + CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + } +} + +public Action:Command_Addmap(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_rtv_addmap <mapname>"); + return Plugin_Handled; } if (!g_CanRTV) { ReplyToCommand(client, "[SM] RockTheVote is not available."); return Plugin_Handled; - } - - decl String:mapname[64]; - GetCmdArg(1, mapname, sizeof(mapname)); - - if (FindStringInArray(g_MapList, mapname) == -1) - { - ReplyToCommand(client, "%t", "Map was not found", mapname); - return Plugin_Handled; - } - - if (GetArraySize(g_RTVMapList) > 0) + } + + decl String:mapname[64]; + GetCmdArg(1, mapname, sizeof(mapname)); + + if (FindStringInArray(g_MapList, mapname) == -1) + { + ReplyToCommand(client, "%t", "Map was not found", mapname); + return Plugin_Handled; + } + + if (GetArraySize(g_RTVMapList) > 0) { if (FindStringInArray(g_RTVMapList, mapname) != -1) { ReplyToCommand(client, "%t", "Map Already In Vote", mapname); return Plugin_Handled; - } - - ShiftArrayUp(g_RTVMapList, 0); - SetArrayString(g_RTVMapList, 0, mapname); - - while (GetArraySize(g_RTVMapList) > GetConVarInt(g_Cvar_Maps)) - { - RemoveFromArray(g_RTVMapList, GetConVarInt(g_Cvar_Maps)); - } - } - else - { - PushArrayString(g_RTVMapList, mapname); - } - - decl String:item[64]; - for (new i = 0; i < GetMenuItemCount(g_MapMenu); i++) - { - GetMenuItem(g_MapMenu, i, item, sizeof(item)); - if (strcmp(item, mapname) == 0) - { - RemoveMenuItem(g_MapMenu, i); - break; - } - } - - ReplyToCommand(client, "%t", "Map Inserted", mapname); - LogAction(client, -1, "\"%L\" inserted map \"%s\".", client, mapname); - - return Plugin_Handled; -} - -public Action:Command_Say(client, args) -{ - if (!g_CanRTV || !client) - { - return Plugin_Continue; - } - - decl String:text[192]; - if (!GetCmdArgString(text, sizeof(text))) - { - return Plugin_Continue; - } - - new startidx = 0; - if(text[strlen(text)-1] == '"') - { - text[strlen(text)-1] = '\0'; - startidx = 1; - } - - if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0) - { - if (!g_RTVAllowed) - { - PrintToChat(client, "[SM] %t", "RTV Not Allowed"); - return Plugin_Continue; - } - - if (g_RTVEnded) - { - PrintToChat(client, "[SM] %t", "RTV Ended"); - return Plugin_Continue; - } - - if (g_RTVStarted) - { - PrintToChat(client, "[SM] %t", "RTV Started"); - return Plugin_Continue; - } - - if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers) && g_Votes == 0) // Should we keep checking g_Votes here? - { - PrintToChat(client, "[SM] %t", "Minimal Players Not Met"); - return Plugin_Continue; - } - - if (g_Voted[client]) - { - PrintToChat(client, "[SM] %t", "Already Voted"); - return Plugin_Continue; - } - - new String:name[64]; - GetClientName(client, name, sizeof(name)); - - g_Votes++; - g_Voted[client] = true; - - PrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded); - - if (g_Votes >= g_VotesNeeded) + } + + ShiftArrayUp(g_RTVMapList, 0); + SetArrayString(g_RTVMapList, 0, mapname); + + while (GetArraySize(g_RTVMapList) > GetConVarInt(g_Cvar_Maps)) { - g_RTVStarted = true; - CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); - } - } - else if (GetConVarBool(g_Cvar_Nominate) && strcmp(text[startidx], "nominate", false) == 0) - { - if (g_RTVEnded) - { - PrintToChat(client, "[SM] %t", "RTV Ended"); - return Plugin_Continue; - } - - if (g_RTVStarted) - { - PrintToChat(client, "[SM] %t", "RTV Started"); - return Plugin_Continue; - } - - if (g_Nominated[client]) - { - PrintToChat(client, "[SM] %t", "Already Nominated"); - return Plugin_Continue; - } - - if (GetArraySize(g_RTVMapList) >= GetConVarInt(g_Cvar_Maps)) - { - PrintToChat(client, "[SM] %t", "Max Nominations"); - return Plugin_Continue; - } - - DisplayMenu(g_MapMenu, client, MENU_TIME_FOREVER); - } - - return Plugin_Continue; -} - -public Action:Timer_DelayRTV(Handle:timer) -{ + RemoveFromArray(g_RTVMapList, GetConVarInt(g_Cvar_Maps)); + } + } + else + { + PushArrayString(g_RTVMapList, mapname); + } + + decl String:item[64]; + for (new i = 0; i < GetMenuItemCount(g_MapMenu); i++) + { + GetMenuItem(g_MapMenu, i, item, sizeof(item)); + if (strcmp(item, mapname) == 0) + { + RemoveMenuItem(g_MapMenu, i); + break; + } + } + + ReplyToCommand(client, "%t", "Map Inserted", mapname); + LogAction(client, -1, "\"%L\" inserted map \"%s\".", client, mapname); + + return Plugin_Handled; +} + +public Action:Command_Say(client, args) +{ + if (!g_CanRTV || !client) + { + return Plugin_Continue; + } + + decl String:text[192]; + if (!GetCmdArgString(text, sizeof(text))) + { + return Plugin_Continue; + } + + new startidx = 0; + if(text[strlen(text)-1] == '"') + { + text[strlen(text)-1] = '\0'; + startidx = 1; + } + + if (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0) + { + if (!g_RTVAllowed) + { + PrintToChat(client, "[SM] %t", "RTV Not Allowed"); + return Plugin_Continue; + } + + if (g_RTVEnded) + { + PrintToChat(client, "[SM] %t", "RTV Ended"); + return Plugin_Continue; + } + + if (g_RTVStarted) + { + PrintToChat(client, "[SM] %t", "RTV Started"); + return Plugin_Continue; + } + + if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers) && g_Votes == 0) // Should we keep checking g_Votes here? + { + PrintToChat(client, "[SM] %t", "Minimal Players Not Met"); + return Plugin_Continue; + } + + if (g_Voted[client]) + { + PrintToChat(client, "[SM] %t", "Already Voted"); + return Plugin_Continue; + } + + new String:name[64]; + GetClientName(client, name, sizeof(name)); + + g_Votes++; + g_Voted[client] = true; + + PrintToChatAll("[SM] %t", "RTV Requested", name, g_Votes, g_VotesNeeded); + + if (g_Votes >= g_VotesNeeded) + { + g_RTVStarted = true; + CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + } + } + else if (GetConVarBool(g_Cvar_Nominate) && strcmp(text[startidx], "nominate", false) == 0) + { + if (g_RTVEnded) + { + PrintToChat(client, "[SM] %t", "RTV Ended"); + return Plugin_Continue; + } + + if (g_RTVStarted) + { + PrintToChat(client, "[SM] %t", "RTV Started"); + return Plugin_Continue; + } + + if (g_Nominated[client]) + { + PrintToChat(client, "[SM] %t", "Already Nominated"); + return Plugin_Continue; + } + + if (GetArraySize(g_RTVMapList) >= GetConVarInt(g_Cvar_Maps)) + { + PrintToChat(client, "[SM] %t", "Max Nominations"); + return Plugin_Continue; + } + + DisplayMenu(g_MapMenu, client, MENU_TIME_FOREVER); + } + + return Plugin_Continue; +} + +public Action:Timer_DelayRTV(Handle:timer) +{ g_RTVAllowed = true; g_RTVStarted = false; - g_RTVEnded = false; -} - -public Action:Timer_StartRTV(Handle:timer) -{ - if (timer == g_RetryTimer) - { - g_RetryTimer = INVALID_HANDLE; - } - - if (g_RetryTimer != INVALID_HANDLE) - { - return; - } - - if (IsVoteInProgress()) - { - // Can't start a vote, try again in 5 seconds. - g_RetryTimer = CreateTimer(5.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); - return; - } - - PrintToChatAll("[SM] %t", "RTV Vote Ready"); - - new Handle:MapVoteMenu = CreateMenu(Handler_MapMapVoteMenu, MenuAction:MENU_ACTIONS_ALL); - SetMenuTitle(MapVoteMenu, "Rock The Vote"); - + g_RTVEnded = false; +} + +public Action:Timer_StartRTV(Handle:timer) +{ + if (timer == g_RetryTimer) + { + g_RetryTimer = INVALID_HANDLE; + } + + if (g_RetryTimer != INVALID_HANDLE) + { + return; + } + + if (IsVoteInProgress()) + { + // Can't start a vote, try again in 5 seconds. + g_RetryTimer = CreateTimer(5.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + return; + } + + PrintToChatAll("[SM] %t", "RTV Vote Ready"); + + new Handle:MapVoteMenu = CreateMenu(Handler_MapMapVoteMenu, MenuAction:MENU_ACTIONS_ALL); + SetMenuTitle(MapVoteMenu, "Rock The Vote"); + new Handle:tempMaps = CloneArray(g_MapList); decl String:map[32]; @@ -383,44 +390,44 @@ public Action:Timer_StartRTV(Handle:timer) } CloseHandle(tempMaps); - - AddMenuItem(MapVoteMenu, "Don't Change", "Don't Change"); - - SetMenuExitButton(MapVoteMenu, false); - VoteMenuToAll(MapVoteMenu, 20); - - LogMessage("[SM] Rockthevote was successfully started."); -} - -public Action:Timer_ChangeMap(Handle:hTimer, Handle:dp) -{ - new String:map[65]; - - ResetPack(dp); - ReadPackString(dp, map, sizeof(map)); - - ServerCommand("changelevel \"%s\"", map); - - return Plugin_Stop; -} - -public Handler_MapMapVoteMenu(Handle:menu, MenuAction:action, param1, param2) -{ - switch (action) - { - case MenuAction_End: - { - CloseHandle(menu); - } - - case MenuAction_Display: - { + + AddMenuItem(MapVoteMenu, "Don't Change", "Don't Change"); + + SetMenuExitButton(MapVoteMenu, false); + VoteMenuToAll(MapVoteMenu, 20); + + LogMessage("[SM] Rockthevote was successfully started."); +} + +public Action:Timer_ChangeMap(Handle:hTimer, Handle:dp) +{ + new String:map[65]; + + ResetPack(dp); + ReadPackString(dp, map, sizeof(map)); + + ServerCommand("changelevel \"%s\"", map); + + return Plugin_Stop; +} + +public Handler_MapMapVoteMenu(Handle:menu, MenuAction:action, param1, param2) +{ + switch (action) + { + case MenuAction_End: + { + CloseHandle(menu); + } + + case MenuAction_Display: + { decl String:oldTitle[255], String:buffer[255]; - GetMenuTitle(menu, oldTitle, sizeof(oldTitle)); - Format(buffer, sizeof(buffer), "%T", oldTitle, param1); - - new Handle:panel = Handle:param2; - SetPanelTitle(panel, buffer); + GetMenuTitle(menu, oldTitle, sizeof(oldTitle)); + Format(buffer, sizeof(buffer), "%T", oldTitle, param1); + + new Handle:panel = Handle:param2; + SetPanelTitle(panel, buffer); } case MenuAction_DisplayItem: @@ -431,105 +438,105 @@ public Handler_MapMapVoteMenu(Handle:menu, MenuAction:action, param1, param2) Format(buffer, sizeof(buffer), "%T", "Don't Change", param1); return RedrawMenuItem(buffer); } - } - - // Why am I commented out? Because BAIL hasn't decided yet if - // vote notification will be built into the Vote API. - /*case MenuAction_Select: - { - decl String:Name[32], String:Map[32]; - GetClientName(param1, Name, sizeof(Name)); - GetMenuItem(menu, param2, Map, sizeof(Map)); - - PrintToChatAll("[SM] %s has voted for map '%s'", Name, Map); - }*/ - - case MenuAction_VoteCancel: - { - if (param1 == VoteCancel_NoVotes) - { + } + + // Why am I commented out? Because BAIL hasn't decided yet if + // vote notification will be built into the Vote API. + /*case MenuAction_Select: + { + decl String:Name[32], String:Map[32]; + GetClientName(param1, Name, sizeof(Name)); + GetMenuItem(menu, param2, Map, sizeof(Map)); + + PrintToChatAll("[SM] %s has voted for map '%s'", Name, Map); + }*/ + + case MenuAction_VoteCancel: + { + if (param1 == VoteCancel_NoVotes) + { PrintToChatAll("[SM] %t", "No Votes"); - g_RTVEnded = true; - } - } - - case MenuAction_VoteEnd: - { - new String:map[64]; - - GetMenuItem(menu, param1, map, sizeof(map)); - - if (GetMenuItemCount(menu) - 1 == param1) // This should always match the "Keep Current" option - { - PrintToChatAll("[SM] %t", "Current Map Stays"); - LogMessage("[SM] Rockthevote has ended, current map kept."); - } - else - { - PrintToChatAll("[SM] %t", "Changing Maps", map); - LogMessage("[SM] Rockthevote has ended, changing to map %s.", map); - new Handle:dp; - CreateDataTimer(5.0, Timer_ChangeMap, dp); - WritePackString(dp, map); - } - - g_RTVEnded = true; - } + g_RTVEnded = true; + } + } + + case MenuAction_VoteEnd: + { + new String:map[64]; + + GetMenuItem(menu, param1, map, sizeof(map)); + + if (GetMenuItemCount(menu) - 1 == param1) // This should always match the "Keep Current" option + { + PrintToChatAll("[SM] %t", "Current Map Stays"); + LogMessage("[SM] Rockthevote has ended, current map kept."); + } + else + { + PrintToChatAll("[SM] %t", "Changing Maps", map); + LogMessage("[SM] Rockthevote has ended, changing to map %s.", map); + new Handle:dp; + CreateDataTimer(5.0, Timer_ChangeMap, dp); + WritePackString(dp, map); + } + + g_RTVEnded = true; + } } - return 0; -} - -public Handler_MapSelectMenu(Handle:menu, MenuAction:action, param1, param2) -{ - switch (action) - { - case MenuAction_Select: - { - if (GetArraySize(g_RTVMapList) >= GetConVarInt(g_Cvar_Maps)) - { - PrintToChat(param1, "[SM] %t", "Max Nominations"); - return; - } - - decl String:map[64], String:name[64]; - GetMenuItem(menu, param2, map, sizeof(map)); - - if (FindStringInArray(g_RTVMapList, map) != -1) - { - PrintToChat(param1, "[SM] %t", "Map Already Nominated"); - return; - } - - GetClientName(param1, name, 64); - - PushArrayString(g_RTVMapList, map); - RemoveMenuItem(menu, param2); - - g_Nominated[param1] = true; - - PrintToChatAll("[SM] %t", "Map Nominated", name, map); - } - } -} - -BuildMapMenu() -{ - if (g_MapMenu != INVALID_HANDLE) - { - CloseHandle(g_MapMenu); - g_MapMenu = INVALID_HANDLE; - } - - g_MapMenu = CreateMenu(Handler_MapSelectMenu); - SetMenuTitle(g_MapMenu, "%t", "Nominate Title"); - - decl String:map[64]; - for (new i = 0; i < GetArraySize(g_MapList); i++) - { - GetArrayString(g_MapList, i, map, sizeof(map)); - AddMenuItem(g_MapMenu, map, map); - } - - SetMenuExitButton(g_MapMenu, false); + return 0; +} + +public Handler_MapSelectMenu(Handle:menu, MenuAction:action, param1, param2) +{ + switch (action) + { + case MenuAction_Select: + { + if (GetArraySize(g_RTVMapList) >= GetConVarInt(g_Cvar_Maps)) + { + PrintToChat(param1, "[SM] %t", "Max Nominations"); + return; + } + + decl String:map[64], String:name[64]; + GetMenuItem(menu, param2, map, sizeof(map)); + + if (FindStringInArray(g_RTVMapList, map) != -1) + { + PrintToChat(param1, "[SM] %t", "Map Already Nominated"); + return; + } + + GetClientName(param1, name, 64); + + PushArrayString(g_RTVMapList, map); + RemoveMenuItem(menu, param2); + + g_Nominated[param1] = true; + + PrintToChatAll("[SM] %t", "Map Nominated", name, map); + } + } +} + +BuildMapMenu() +{ + if (g_MapMenu != INVALID_HANDLE) + { + CloseHandle(g_MapMenu); + g_MapMenu = INVALID_HANDLE; + } + + g_MapMenu = CreateMenu(Handler_MapSelectMenu); + SetMenuTitle(g_MapMenu, "%t", "Nominate Title"); + + decl String:map[64]; + for (new i = 0; i < GetArraySize(g_MapList); i++) + { + GetArrayString(g_MapList, i, map, sizeof(map)); + AddMenuItem(g_MapMenu, map, map); + } + + SetMenuExitButton(g_MapMenu, false); } \ No newline at end of file From d8569c1139e5f05ff8171e548bb1f4e6a86d67a3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 21:51:04 +0000 Subject: [PATCH 206/263] updated build tool for vdf file and new plugin names --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401896 --- tools/builder/PkgCore.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index 0ef84bd5..b7276217 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -67,6 +67,7 @@ namespace builder folders.Add("addons/sourcemod/extensions/auto.2.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep2"); folders.Add("addons/sourcemod/scripting/playercommands"); + folders.Add("addons/metamod"); return (string [])folders.ToArray(typeof(string)); } @@ -87,6 +88,7 @@ namespace builder builder.CopyFolder(this, "configs", "addons/sourcemod/configs", null); builder.CopyFolder(this, "configs/geoip", "addons/sourcemod/configs/geoip", null); builder.CopyFolder(this, "configs/cfg", "cfg/sourcemod", null); + builder.CopyFolder(this, "configs/metamod", "addons/metamod", null); builder.CopyFolder(this, "configs/sql-init-scripts", "addons/sourcemod/configs/sql-init-scripts", @@ -115,10 +117,10 @@ namespace builder builder.CopyFolder(this, "plugins/testsuite", "addons/sourcemod/scripting/testsuite", null); builder.CopyFolder(this, "plugins/basecommands", "addons/sourcemod/scripting/basecommands", null); builder.CopyFolder(this, "plugins/basecomm", "addons/sourcemod/scripting/basecomm", null); - builder.CopyFolder(this, "plugins/basefunvotes", "addons/sourcemod/scripting/basefunvotes", null); + builder.CopyFolder(this, "plugins/funvotes", "addons/sourcemod/scripting/funvotes", null); builder.CopyFolder(this, "plugins/basevotes", "addons/sourcemod/scripting/basevotes", null); builder.CopyFolder(this, "plugins/basebans", "addons/sourcemod/scripting/basebans", null); - builder.CopyFolder(this, "plugins/basefuncommands", "addons/sourcemod/scripting/basefuncommands", null); + builder.CopyFolder(this, "plugins/funcommands", "addons/sourcemod/scripting/funcommands", null); builder.CopyFolder(this, "plugins/playercommands", "addons/sourcemod/scripting/playercommands", null); } @@ -279,9 +281,9 @@ namespace builder plugins.Add(new Plugin("basetriggers")); plugins.Add(new Plugin("nextmap")); plugins.Add(new Plugin("basechat")); - plugins.Add(new Plugin("basefuncommands")); + plugins.Add(new Plugin("funcommands")); plugins.Add(new Plugin("basevotes")); - plugins.Add(new Plugin("basefunvotes")); + plugins.Add(new Plugin("funvotes")); plugins.Add(new Plugin("admin-sql-prefetch", true)); plugins.Add(new Plugin("admin-sql-threaded", true)); plugins.Add(new Plugin("sql-admin-manager", true)); From 887b384f4760292fd5dace8522daafed57b85bf8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 22 Feb 2008 22:07:41 +0000 Subject: [PATCH 207/263] fixed bug in the build tool --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401897 --- tools/builder/PkgCore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index b7276217..0067e441 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -59,10 +59,10 @@ namespace builder folders.Add("addons/sourcemod/extensions/games"); folders.Add("addons/sourcemod/scripting/basecommands"); folders.Add("addons/sourcemod/scripting/basecomm"); - folders.Add("addons/sourcemod/scripting/basefunvotes"); + folders.Add("addons/sourcemod/scripting/funvotes"); folders.Add("addons/sourcemod/scripting/basevotes"); folders.Add("addons/sourcemod/scripting/basebans"); - folders.Add("addons/sourcemod/scripting/basefuncommands"); + folders.Add("addons/sourcemod/scripting/funcommands"); folders.Add("addons/sourcemod/extensions/auto.1.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep2"); From 7bf9cfc2e806367dcf620e9751f10e7b2280a8ce Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 11:40:45 +0000 Subject: [PATCH 208/263] improved timer error message (amb1474) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401898 --- core/smn_timers.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/smn_timers.cpp b/core/smn_timers.cpp index ee5214c6..d0be127e 100644 --- a/core/smn_timers.cpp +++ b/core/smn_timers.cpp @@ -150,7 +150,10 @@ void TimerNatives::OnTimerEnd(ITimer *pTimer, void *pData) { if ((herr=g_HandleSys.FreeHandle(usrhndl, &sec)) != HandleError_None) { - g_Logger.LogError("Invalid data handle %x (error %d) passed during timer end", usrhndl, herr); + g_Logger.LogError("Invalid data handle %x (error %d) passed during timer end on plugin %s", + usrhndl, + herr, + g_PluginSys.FindPluginByContext(pInfo->pContext->GetContext())->GetFilename()); } } From 0e547df4476c40524440479e776d8bdd9325891f Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 12:25:27 +0000 Subject: [PATCH 209/263] added amb1425, added description buffers to find concommand natives --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401899 --- core/smn_console.cpp | 14 ++++++++++++++ plugins/include/console.inc | 8 ++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/smn_console.cpp b/core/smn_console.cpp index e2be7a50..63417144 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -1136,6 +1136,7 @@ static cell_t FindFirstConCommand(IPluginContext *pContext, const cell_t *params ConCmdIter *pIter; cell_t *pIsCmd, *pFlags; const ConCommandBase *pConCmd; + const char *desc; pContext->LocalToPhysAddr(params[3], &pIsCmd); pContext->LocalToPhysAddr(params[4], &pFlags); @@ -1151,6 +1152,12 @@ static cell_t FindFirstConCommand(IPluginContext *pContext, const cell_t *params *pIsCmd = pConCmd->IsCommand() ? 1 : 0; *pFlags = pConCmd->GetFlags(); + if (params[6]) + { + desc = pConCmd->GetHelpText(); + pContext->StringToLocalUTF8(params[5], params[6], (desc && desc[0]) ? desc : "", NULL); + } + pIter = new ConCmdIter; pIter->pLast = pConCmd; @@ -1169,6 +1176,7 @@ static cell_t FindNextConCommand(IPluginContext *pContext, const cell_t *params) HandleError err; ConCmdIter *pIter; cell_t *pIsCmd, *pFlags; + const char *desc; HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); if ((err = g_HandleSys.ReadHandle(params[1], htConCmdIter, &sec, (void **)&pIter)) != HandleError_None) @@ -1193,6 +1201,12 @@ static cell_t FindNextConCommand(IPluginContext *pContext, const cell_t *params) *pIsCmd = pIter->pLast->IsCommand() ? 1 : 0; *pFlags = pIter->pLast->GetFlags(); + if (params[7]) + { + desc = pIter->pLast->GetHelpText(); + pContext->StringToLocalUTF8(params[6], params[7], (desc && desc[0]) ? desc : "", NULL); + } + return 1; } diff --git a/plugins/include/console.inc b/plugins/include/console.inc index d866d5bd..84d04cd5 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -729,6 +729,8 @@ native bool:SetCommandFlags(const String:name[], flags); * @param isCommand Variable to store whether the entry is a command. * If it is not a command, it is a ConVar. * @param flags Variable to store entry flags. + * @param description Buffer to store the description, empty if no description present. + * @param descrmax_size Maximum size of the description buffer. * @return On success, a ConCmdIter Handle is returned, which * can be read via FindNextConCommand(), and must be * closed via CloseHandle(). Additionally, the output @@ -737,7 +739,7 @@ native bool:SetCommandFlags(const String:name[], flags); * On failure, INVALID_HANDLE is returned, and the * contents of outputs is undefined. */ -native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &flags=0); +native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0); /** * Reads the next entry in a ConCommandBase iterator. @@ -748,12 +750,14 @@ native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &f * @param isCommand Variable to store whether the entry is a command. * If it is not a command, it is a ConVar. * @param flags Variable to store entry flags. + * @param description Buffer to store the description, empty if no description present. + * @param descrmax_size Maximum size of the description buffer. * @return On success, the outputs are filled, the iterator is * advanced to the next entry, and true is returned. * If no more entries exist, false is returned, and the * contents of outputs is undefined. */ -native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0); +native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0); /** * Replicates a convar value to a specific client. This does not change the actual convar value. From 45860880efaacf2ad907b47a8f831b9bd8fc5eea Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 20:18:49 +0000 Subject: [PATCH 210/263] Executable memory is now provided by MM:S's allocator, this should reduce virtual memory usage. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401900 --- core/msvc8/sourcemod_mm.vcproj | 42 ++++++++++++++++++++++++++++- core/smn_timers.cpp | 22 ++++++++------- core/vm/sp_vm_engine.cpp | 22 ++++++++++++++- core/vm/sp_vm_engine.h | 14 ++++++++++ extensions/bintools/CallWrapper.cpp | 2 +- extensions/bintools/jit_call.cpp | 4 ++- public/ISourceMod.h | 2 +- public/sourcepawn/sp_vm_api.h | 33 ++++++++++++++++++++++- sourcepawn/jit/x86/jit_x86.cpp | 16 +++++++---- 9 files changed, 137 insertions(+), 20 deletions(-) diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 43282ece..a4b30dd0 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8.00" + Version="8,00" Name="sourcemod_mm" ProjectGUID="{E39527CD-7CAB-4420-97CC-DA1B93B260BC}" RootNamespace="sourcemod_mm" @@ -1154,6 +1154,46 @@ <File RelativePath="..\vm\sp_vm_engine.cpp" > + <FileConfiguration + Name="Release - Episode 1|Win32" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug - Episode 1|Win32" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="" + /> + </FileConfiguration> + <FileConfiguration + Name="CrazyDebug|Win32" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories=""$(SOURCEMM16)\sourcehook"" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug - Old Metamod|Win32" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories=""$(SOURCEMM16)\sourcehook"" + /> + </FileConfiguration> + <FileConfiguration + Name="Release - Old Metamod|Win32" + > + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories=""$(SOURCEMM16)\sourcehook"" + /> + </FileConfiguration> </File> <File RelativePath="..\vm\sp_vm_function.cpp" diff --git a/core/smn_timers.cpp b/core/smn_timers.cpp index d0be127e..362606e0 100644 --- a/core/smn_timers.cpp +++ b/core/smn_timers.cpp @@ -33,6 +33,7 @@ #include "TimerSys.h" #include "PluginSys.h" #include "Logger.h" +#include "DebugReporter.h" #define TIMER_HNDL_CLOSE (1<<9) @@ -150,19 +151,23 @@ void TimerNatives::OnTimerEnd(ITimer *pTimer, void *pData) { if ((herr=g_HandleSys.FreeHandle(usrhndl, &sec)) != HandleError_None) { - g_Logger.LogError("Invalid data handle %x (error %d) passed during timer end on plugin %s", - usrhndl, - herr, - g_PluginSys.FindPluginByContext(pInfo->pContext->GetContext())->GetFilename()); + g_DbgReporter.GenerateError(pInfo->pContext, + pInfo->Hook->GetFunctionID(), + SP_ERROR_NATIVE, + "Invalid data handle %x (error %d) passed during timer end", + usrhndl, + herr); } } if ((herr=g_HandleSys.FreeHandle(pInfo->TimerHandle, &sec)) != HandleError_None) { - g_Logger.LogError("Invalid timer handle %x (error %d) on plugin %s during timer end", - pInfo->TimerHandle, - herr, - g_PluginSys.FindPluginByContext(pInfo->pContext->GetContext())->GetFilename()); + g_DbgReporter.GenerateError(pInfo->pContext, + pInfo->Hook->GetFunctionID(), + SP_ERROR_NATIVE, + "Invalid timer handle %x (error %d) during timer end, displayed function is timer callback, not the stack trace", + pInfo->TimerHandle, + herr); return; } DeleteTimerInfo(pInfo); @@ -332,4 +337,3 @@ REGISTER_NATIVES(timernatives) {"IsServerProcessing", smn_IsServerProcessing}, {NULL, NULL} }; - diff --git a/core/vm/sp_vm_engine.cpp b/core/vm/sp_vm_engine.cpp index 7dbc9fc8..02615e26 100644 --- a/core/vm/sp_vm_engine.cpp +++ b/core/vm/sp_vm_engine.cpp @@ -90,7 +90,7 @@ const char *GetSourcePawnErrorMessage(int error) return g_ErrorMsgTable[error]; } -SourcePawnEngine::SourcePawnEngine() +SourcePawnEngine::SourcePawnEngine() : m_ExeMemory(16) { m_pDebugHook = NULL; m_CallStack = NULL; @@ -137,6 +137,26 @@ void *SourcePawnEngine::ExecAlloc(size_t size) #endif } +void *SourcePawnEngine::AllocatePageMemory(size_t size) +{ + return m_ExeMemory.Alloc(size); +} + +void SourcePawnEngine::SetReadExecute(void *ptr) +{ + m_ExeMemory.SetRE(ptr); +} + +void SourcePawnEngine::SetReadWrite(void *ptr) +{ + m_ExeMemory.SetRW(ptr); +} + +void SourcePawnEngine::FreePageMemory(void *ptr) +{ + m_ExeMemory.Free(ptr); +} + void SourcePawnEngine::ExecFree(void *address) { #if defined WIN32 diff --git a/core/vm/sp_vm_engine.h b/core/vm/sp_vm_engine.h index 4dd320d7..5e3eee98 100644 --- a/core/vm/sp_vm_engine.h +++ b/core/vm/sp_vm_engine.h @@ -32,6 +32,15 @@ #ifndef _INCLUDE_SOURCEPAWN_VM_ENGINE_H_ #define _INCLUDE_SOURCEPAWN_VM_ENGINE_H_ +#include <sh_memory.h> +/* HACK to avoid including sourcehook.h for just the SH_ASSERT definition */ +#if !defined SH_ASSERT + #define SH_ASSERT(x, info) + #include <sh_pagealloc.h> + #undef SH_ASSERT +#else + #include <sh_pagealloc.h> +#endif #include "sp_vm_api.h" #include "sp_vm_function.h" @@ -82,6 +91,10 @@ public: //ISourcePawnEngine IDebugListener *SetDebugListener(IDebugListener *pListener); unsigned int GetContextCallCount(); unsigned int GetEngineAPIVersion(); + void *AllocatePageMemory(size_t size); + void SetReadWrite(void *ptr); + void SetReadExecute(void *ptr); + void FreePageMemory(void *ptr); public: //Debugger Stuff /** * @brief Pushes a context onto the top of the call tracer. @@ -110,6 +123,7 @@ private: TracedCall *m_FreedCalls; TracedCall *m_CallStack; unsigned int m_CurChain; + SourceHook::CPageAlloc m_ExeMemory; //CFunction *m_pFreeFuncs; }; diff --git a/extensions/bintools/CallWrapper.cpp b/extensions/bintools/CallWrapper.cpp index 6a27cfa1..41392e2b 100644 --- a/extensions/bintools/CallWrapper.cpp +++ b/extensions/bintools/CallWrapper.cpp @@ -75,7 +75,7 @@ CallWrapper::~CallWrapper() { delete [] m_Params; delete m_RetParam; - g_SPEngine->ExecFree(m_Addrs[ADDR_CODEBASE]); + g_SPEngine->FreePageMemory(m_Addrs[ADDR_CODEBASE]); } void CallWrapper::Destroy() diff --git a/extensions/bintools/jit_call.cpp b/extensions/bintools/jit_call.cpp index 112094a4..7443260e 100644 --- a/extensions/bintools/jit_call.cpp +++ b/extensions/bintools/jit_call.cpp @@ -637,7 +637,8 @@ skip_retbuffer: if (writer.outbase == NULL) { CodeSize = writer.get_outputpos(); - writer.outbase = (jitcode_t)g_SPEngine->ExecAlloc(CodeSize); + writer.outbase = (jitcode_t)g_SPEngine->AllocatePageMemory(CodeSize); + g_SPEngine->SetReadWrite(writer.outbase); writer.outptr = writer.outbase; pWrapper->m_Addrs[ADDR_CODEBASE] = writer.outbase; g_StackAlign = (g_StackUsage) ? ((g_StackUsage & 0xFFFFFFF0) + 16) - g_StackUsage : 0; @@ -646,4 +647,5 @@ skip_retbuffer: Needs_Retbuf = false; goto jit_rewind; } + g_SPEngine->SetReadExecute(writer.outbase); } diff --git a/public/ISourceMod.h b/public/ISourceMod.h index ae5f0851..5782b772 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -43,7 +43,7 @@ #include <time.h> #define SMINTERFACE_SOURCEMOD_NAME "ISourceMod" -#define SMINTERFACE_SOURCEMOD_VERSION 4 +#define SMINTERFACE_SOURCEMOD_VERSION 5 /** * @brief Forward declaration of the KeyValues class. diff --git a/public/sourcepawn/sp_vm_api.h b/public/sourcepawn/sp_vm_api.h index 36fd5935..7920188b 100644 --- a/public/sourcepawn/sp_vm_api.h +++ b/public/sourcepawn/sp_vm_api.h @@ -41,7 +41,7 @@ #include "sp_vm_types.h" /** SourcePawn Engine API Version */ -#define SOURCEPAWN_ENGINE_API_VERSION 1 +#define SOURCEPAWN_ENGINE_API_VERSION 2 /** SourcePawn VM API Version */ #define SOURCEPAWN_VM_API_VERSION 5 @@ -740,6 +740,7 @@ namespace SourcePawn /** * @brief Allocates executable memory. + * @deprecated Use AllocPageMemory() * * @param size Size of memory to allocate. * @return Pointer to memory, NULL if allocation failed. @@ -748,6 +749,7 @@ namespace SourcePawn /** * @brief Frees executable memory. + * @deprecated Use FreePageMemory() * * @param address Address to free. */ @@ -777,6 +779,35 @@ namespace SourcePawn * @return Engine API version. */ virtual unsigned int GetEngineAPIVersion() =0; + + /** + * @brief Allocates executable memory. + * + * @param size Size of memory to allocate. + * @return Pointer to memory, NULL if allocation failed. + */ + virtual void *AllocatePageMemory(size_t size) =0; + + /** + * @brief Sets the input memory permissions to read+write. + * + * @param ptr Memory block. + */ + virtual void SetReadWrite(void *ptr) =0; + + /** + * @brief Sets the input memory permissions to read+execute. + * + * @param ptr Memory block. + */ + virtual void SetReadExecute(void *ptr) =0; + + /** + * @brief Frees executable memory. + * + * @param ptr Address to free. + */ + virtual void FreePageMemory(void *ptr) =0; }; diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index ec492a5b..a01a66cd 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -2380,7 +2380,8 @@ jit_rewind: /* the total codesize is now known! */ codemem = writer.get_outputpos(); - writer.outbase = (jitcode_t)engine->ExecAlloc(codemem); + writer.outbase = (jitcode_t)engine->AllocatePageMemory(codemem); + engine->SetReadWrite(writer.outbase); writer.outptr = writer.outbase; /* go back for third pass */ goto jit_rewind; @@ -2398,6 +2399,8 @@ jit_rewind: } /* Write these last because error jumps should be unpredicted, and thus forward */ WriteErrorRoutines(data, jit); + + engine->SetReadExecute(writer.outbase); } /************* @@ -2605,22 +2608,25 @@ rewind: if (jw.outbase == NULL) { /* Second pass: Actually write */ - jw.outbase = (jitcode_t)engine->ExecAlloc(jw.get_outputpos()); + jw.outbase = (jitcode_t)engine->AllocatePageMemory(jw.get_outputpos()); if (!jw.outbase) { return NULL; } + engine->SetReadWrite(jw.outbase); jw.outptr = jw.outbase; goto rewind; } - + + engine->SetReadExecute(jw.outbase); + return (SPVM_NATIVE_FUNC)jw.outbase; } void JITX86::DestroyFakeNative(SPVM_NATIVE_FUNC func) { - engine->ExecFree((void *)func); + engine->FreePageMemory(func); } const char *JITX86::GetVMName() @@ -2637,7 +2643,7 @@ int JITX86::ContextExecute(sp_context_t *ctx, uint32_t code_idx, cell_t *result) void JITX86::FreeContext(sp_context_t *ctx) { - engine->ExecFree(ctx->codebase); + engine->FreePageMemory(ctx->codebase); delete [] ctx->memory; delete [] ctx->files; delete [] ctx->lines; From 4365d3763d2e0d56cdf120aad7dbba4c216e0d9f Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 20:33:33 +0000 Subject: [PATCH 211/263] moved these includes for GCC --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401901 --- core/vm/sp_vm_engine.cpp | 10 ++++++++++ core/vm/sp_vm_engine.h | 11 ++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/core/vm/sp_vm_engine.cpp b/core/vm/sp_vm_engine.cpp index 02615e26..9438c034 100644 --- a/core/vm/sp_vm_engine.cpp +++ b/core/vm/sp_vm_engine.cpp @@ -29,6 +29,16 @@ * Version: $Id$ */ +#include <sh_memory.h> +/* HACK to avoid including sourcehook.h for just the SH_ASSERT definition */ +#if !defined SH_ASSERT + #define SH_ASSERT(x, info) + #include <sh_pagealloc.h> + #undef SH_ASSERT +#else + #include <sh_pagealloc.h> +#endif + #include <malloc.h> #include <string.h> #include <assert.h> diff --git a/core/vm/sp_vm_engine.h b/core/vm/sp_vm_engine.h index 5e3eee98..e5b4294c 100644 --- a/core/vm/sp_vm_engine.h +++ b/core/vm/sp_vm_engine.h @@ -32,18 +32,11 @@ #ifndef _INCLUDE_SOURCEPAWN_VM_ENGINE_H_ #define _INCLUDE_SOURCEPAWN_VM_ENGINE_H_ -#include <sh_memory.h> -/* HACK to avoid including sourcehook.h for just the SH_ASSERT definition */ -#if !defined SH_ASSERT - #define SH_ASSERT(x, info) - #include <sh_pagealloc.h> - #undef SH_ASSERT -#else - #include <sh_pagealloc.h> -#endif #include "sp_vm_api.h" #include "sp_vm_function.h" +class SourceHook::CPageAlloc; + struct TracedCall { uint32_t cip; From 1b26a1984a2af55efea4a15ad573cab3156d5c2b Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 20:50:26 +0000 Subject: [PATCH 212/263] gah GCC crying again --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401902 --- core/vm/sp_vm_engine.cpp | 12 +++++++----- core/vm/sp_vm_engine.h | 3 --- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/core/vm/sp_vm_engine.cpp b/core/vm/sp_vm_engine.cpp index 9438c034..4790a930 100644 --- a/core/vm/sp_vm_engine.cpp +++ b/core/vm/sp_vm_engine.cpp @@ -59,6 +59,8 @@ using namespace SourcePawn; +SourceHook::CPageAlloc g_ExeMemory(16); + #define ERROR_MESSAGE_MAX 25 static const char *g_ErrorMsgTable[] = { @@ -100,7 +102,7 @@ const char *GetSourcePawnErrorMessage(int error) return g_ErrorMsgTable[error]; } -SourcePawnEngine::SourcePawnEngine() : m_ExeMemory(16) +SourcePawnEngine::SourcePawnEngine() { m_pDebugHook = NULL; m_CallStack = NULL; @@ -149,22 +151,22 @@ void *SourcePawnEngine::ExecAlloc(size_t size) void *SourcePawnEngine::AllocatePageMemory(size_t size) { - return m_ExeMemory.Alloc(size); + return g_ExeMemory.Alloc(size); } void SourcePawnEngine::SetReadExecute(void *ptr) { - m_ExeMemory.SetRE(ptr); + g_ExeMemory.SetRE(ptr); } void SourcePawnEngine::SetReadWrite(void *ptr) { - m_ExeMemory.SetRW(ptr); + g_ExeMemory.SetRW(ptr); } void SourcePawnEngine::FreePageMemory(void *ptr) { - m_ExeMemory.Free(ptr); + g_ExeMemory.Free(ptr); } void SourcePawnEngine::ExecFree(void *address) diff --git a/core/vm/sp_vm_engine.h b/core/vm/sp_vm_engine.h index e5b4294c..a14b8b45 100644 --- a/core/vm/sp_vm_engine.h +++ b/core/vm/sp_vm_engine.h @@ -35,8 +35,6 @@ #include "sp_vm_api.h" #include "sp_vm_function.h" -class SourceHook::CPageAlloc; - struct TracedCall { uint32_t cip; @@ -116,7 +114,6 @@ private: TracedCall *m_FreedCalls; TracedCall *m_CallStack; unsigned int m_CurChain; - SourceHook::CPageAlloc m_ExeMemory; //CFunction *m_pFreeFuncs; }; From 4eda818e0ffd3c21fffa12fe10f8c8e659b5d3d9 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 23 Feb 2008 20:54:31 +0000 Subject: [PATCH 213/263] added special build rule for sp_vm_engine.cpp fixed an uninitialized memory read in ReadMapList() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401903 --- core/Makefile | 19 +++++++++++++------ core/smn_maplists.cpp | 2 +- core/vm/sp_vm_engine.cpp | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/Makefile b/core/Makefile index e76f34ea..5b4e3447 100644 --- a/core/Makefile +++ b/core/Makefile @@ -33,12 +33,12 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_adt_trie.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ - systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \ - vm/sp_vm_function.cpp + systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_function.cpp OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp OBJECTS_C = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \ zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \ zlib/uncompr.c zlib/zutil.c +OBJECTS_SM16 = vm/sp_vm_engine.cpp ifeq "$(ENGINE)" "original" HL2SDK = $(HL2SDK_ORIG) @@ -67,10 +67,13 @@ endif LINK += $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so \ tier0_i486.so -lpthread -static-libgcc +INCLUDE_SMSDK = -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions + INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \ - -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions -Isystems \ - -I$(HL2PUB)/mathlib + -I$(HL2PUB)/mathlib -Isystems $(INCLUDE_SMSDK) + +SM16_INCLUDE = -I. -I.. -I$(SOURCEMM16)/sourcehook $(INCLUDE_SMSDK) ifeq "$(DEBUG)" "true" BIN_DIR = Debug.$(ENGINE) @@ -95,6 +98,7 @@ endif OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.ox) OBJ_LINUX_C := $(OBJECTS_C:%.c=$(BIN_DIR)/%.oc) +OBJ_LINUX_SM16 := $(OBJECTS_SM16:%.cpp=$(BIN_DIR)/%.ok) $(BIN_DIR)/%.ox: %.cpp $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< @@ -102,6 +106,9 @@ $(BIN_DIR)/%.ox: %.cpp $(BIN_DIR)/%.oc: %.c $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< +$(BIN_DIR)/%.ok: %.cpp + $(CPP) $(SM16_INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + all: mkdir -p $(BIN_DIR)/systems mkdir -p $(BIN_DIR)/vm @@ -111,8 +118,8 @@ all: ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so $(MAKE) -f Makefile sourcemod -sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(OBJ_LINUX_C) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) $(OBJ_LINUX_SM16) + $(CPP) $(OBJ_LINUX) $(OBJ_LINUX_C) $(OBJ_LINUX_SM16) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) default: all diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index 640e0570..b2c228dd 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -352,7 +352,7 @@ public: } /* If there was a success, and the serial has not changed, bail out. */ - if (*pSerial == change_serial) + if (success && *pSerial == change_serial) { return NULL; } diff --git a/core/vm/sp_vm_engine.cpp b/core/vm/sp_vm_engine.cpp index 4790a930..136172aa 100644 --- a/core/vm/sp_vm_engine.cpp +++ b/core/vm/sp_vm_engine.cpp @@ -29,6 +29,7 @@ * Version: $Id$ */ +#include "sp_vm_types.h" #include <sh_memory.h> /* HACK to avoid including sourcehook.h for just the SH_ASSERT definition */ #if !defined SH_ASSERT @@ -43,7 +44,6 @@ #include <string.h> #include <assert.h> #include "sp_file_headers.h" -#include "sp_vm_types.h" #include "sp_vm_engine.h" #include "zlib/zlib.h" #include "sp_vm_basecontext.h" From 82c57bb7b0b80aae3decca4ccfded4800c5a9b94 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sat, 23 Feb 2008 21:05:23 +0000 Subject: [PATCH 214/263] fixed linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401904 --- sourcepawn/jit/x86/jit_x86.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index a01a66cd..05e48271 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -2626,7 +2626,7 @@ rewind: void JITX86::DestroyFakeNative(SPVM_NATIVE_FUNC func) { - engine->FreePageMemory(func); + engine->FreePageMemory((void *)func); } const char *JITX86::GetVMName() From 5b2d36e386bc87de2cd44513b91426d505c10068 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 27 Feb 2008 13:46:41 +0000 Subject: [PATCH 215/263] fixed amb1487 (sm_slap for negative damage) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401905 --- plugins/playercommands/slap.sp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/playercommands/slap.sp b/plugins/playercommands/slap.sp index efa793cb..891bb463 100644 --- a/plugins/playercommands/slap.sp +++ b/plugins/playercommands/slap.sp @@ -175,7 +175,7 @@ public Action:Command_Slap(client, args) { decl String:arg2[20]; GetCmdArg(2, arg2, sizeof(arg2)); - if (StringToIntEx(arg2, damage) == 0) + if (StringToIntEx(arg2, damage) == 0 || damage < 0) { ReplyToCommand(client, "[SM] %t", "Invalid Amount"); return Plugin_Handled; From b144620eeb97b77559f8842510c58a0a5f5008a1 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 27 Feb 2008 13:49:57 +0000 Subject: [PATCH 216/263] fixed amb1483 - GetEntPropString() rejected FIELD_MODELNAME/FIELD_SOUNDNAME --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401906 --- core/smn_entities.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/smn_entities.cpp b/core/smn_entities.cpp index cd3e4ea1..29b341bd 100644 --- a/core/smn_entities.cpp +++ b/core/smn_entities.cpp @@ -796,6 +796,8 @@ static cell_t FindDataMapOffs(IPluginContext *pContext, const cell_t *params) } break; } + case FIELD_MODELNAME: + case FIELD_SOUNDNAME: case FIELD_STRING: { *pSize = sizeof(string_t); @@ -1614,7 +1616,9 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) FIND_PROP_DATA(td); if (td->fieldType != FIELD_CHARACTER - && td->fieldType != FIELD_STRING) + && td->fieldType != FIELD_STRING + && td->fieldType != FIELD_MODELNAME + && td->fieldType != FIELD_SOUNDNAME) { return pContext->ThrowNativeError("Data field %s is not a string (%d != %d)", prop, @@ -1622,7 +1626,7 @@ static cell_t GetEntPropString(IPluginContext *pContext, const cell_t *params) FIELD_CHARACTER); } - bIsStringIndex = (td->fieldType == FIELD_STRING); + bIsStringIndex = (td->fieldType != FIELD_CHARACTER); offset = td->fieldOffset[TD_OFFSET_NORMAL]; break; From a87628654d35130598a4455e5031b68f680b8efd Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 05:18:26 +0000 Subject: [PATCH 217/263] fixed amb1476 - sm_sql_addgroup params were backwards --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401907 --- plugins/sql-admin-manager.sp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sql-admin-manager.sp b/plugins/sql-admin-manager.sp index 587ea1e6..058ef74c 100644 --- a/plugins/sql-admin-manager.sp +++ b/plugins/sql-admin-manager.sp @@ -606,7 +606,7 @@ public Action:Command_AddGroup(client, args) { if (args < 2) { - ReplyToCommand(client, "[SM] Usage: sm_sql_addgroup <name> <flags> [immunity]"); + ReplyToCommand(client, "[SM] Usage: sm_sql_addgroup <flags> <name> [immunity]"); return Plugin_Handled; } From f30d3d1901a8a86bfd0aaa2cc6937feafb9e5d0a Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 05:42:25 +0000 Subject: [PATCH 218/263] fixed amb1475 - inconsistent root console menu usage --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401908 --- core/ConCmdManager.cpp | 144 +-------------------------------- core/ConVarManager.cpp | 162 +------------------------------------ core/sm_srvcmds.cpp | 22 +---- core/systems/PluginSys.cpp | 88 +++++++++++++++++--- core/systems/PluginSys.h | 2 + 5 files changed, 87 insertions(+), 331 deletions(-) diff --git a/core/ConCmdManager.cpp b/core/ConCmdManager.cpp index 28a97069..8e27b477 100644 --- a/core/ConCmdManager.cpp +++ b/core/ConCmdManager.cpp @@ -914,12 +914,11 @@ void ConCmdManager::OnRootConsoleCommand(const char *cmdname, const CCommand &co { const char *text = command.Arg(2); - int id = atoi(text); - CPlugin *pPlugin = g_PluginSys.GetPluginByOrder(id); + CPlugin *pPlugin = g_PluginSys.FindPluginByConsoleArg(text); if (!pPlugin) { - g_RootMenu.ConsolePrint("[SM] Plugin index %d not found.", id); + g_RootMenu.ConsolePrint("[SM] Plugin \"%s\" was not found.", text); return; } @@ -946,7 +945,7 @@ void ConCmdManager::OnRootConsoleCommand(const char *cmdname, const CCommand &co g_RootMenu.ConsolePrint(" %-17.16s %-8.7s %s", "[Name]", "[Type]", "[Help]"); for (iter=pList->begin(); iter!=pList->end(); - iter++, id++) + iter++) { PlCmdInfo &cmd = (*iter); if (cmd.type == Cmd_Server) @@ -978,140 +977,3 @@ void ConCmdManager::OnRootConsoleCommand(const char *cmdname, const CCommand &co g_RootMenu.ConsolePrint("[SM] Usage: sm cmds <plugin #>"); } - -static int g_yam_state = 0; -void _YamState(int state) -{ - if (state == 0) - { - g_RootMenu.ConsolePrint("Welcome to the SourceMod Text Adventure."); - g_RootMenu.ConsolePrint("Type sm_text to see the last message."); - g_RootMenu.ConsolePrint("Type sm_text <word> to follow a capital word."); - g_RootMenu.ConsolePrint("-------------------------------"); - g_RootMenu.ConsolePrint("You are at VALVE HEADQUARTERS."); - g_RootMenu.ConsolePrint("To your LEFT is BAILOPAN, rearranging the letters to spell"); - g_RootMenu.ConsolePrint("\"A HARD VEAL QUEST\". FORWARD is the entrance to the building."); - g_RootMenu.ConsolePrint("To your RIGHT is your last chance to flee in terror."); - } else if (state == 1) { - g_RootMenu.ConsolePrint("BAILOPAN tells you that his name his pronounced"); - g_RootMenu.ConsolePrint("\"bye low pahn,\" not \"bay low pan.\" Do you "); - g_RootMenu.ConsolePrint("MOCK him, or NOD quietly?"); - } else if (state == 2) { - g_RootMenu.ConsolePrint("You enter the Valve building. You hear screams coming from within."); - g_RootMenu.ConsolePrint("A grotesque figure lumbers up to greet you; it is Gabe Newell."); - g_RootMenu.ConsolePrint("\"Welcome,\" he belches, \"to my lair.\""); - g_RootMenu.ConsolePrint("Do you SHAKE Gaben's hand, WALK past him, or OFFER a donut?"); - } else if (state == 3) { - g_RootMenu.ConsolePrint("You walk into the break room. Alfred \"Alf is from Melmac\" Reynolds and"); - g_RootMenu.ConsolePrint("Yahn \"Yeti\" Bernier are discussing something (you overhear "); - g_RootMenu.ConsolePrint("the phrase \"and next Steam update, here's what we should break\")."); - g_RootMenu.ConsolePrint("Should you DIE in a fire, REPORT a bug, REQUEST a feature, or "); - g_RootMenu.ConsolePrint("SPRAY them with butter?"); - } - g_yam_state = state; -} - -#if defined ORANGEBOX_BUILD -void _IntExt_CallYams(const CCommand &cmd) -{ -#else -void _IntExt_CallYams() -{ - CCommand cmd; -#endif - const char *arg = cmd.Arg(1); - - /* should be impossible */ - if (!arg || arg[0] == '\0') - { - _YamState(g_yam_state); - } - - if (g_yam_state == 1) - { - if (strcasecmp(arg, "mock") == 0) - { - g_RootMenu.ConsolePrint("You mock BAILOPAN's pronunciation. In a fit of rage, "); - g_RootMenu.ConsolePrint("he sticks an INT 3 call into your chest, rendering you broken."); - g_RootMenu.ConsolePrint("YOU HAVE DIED. GAME OVER."); - g_yam_state = 0; - } else if (strcasecmp(arg, "nod") == 0) { - g_RootMenu.ConsolePrint("You nod quietly, and then slowly back away into the Valve headquarters."); - _YamState(2); - } else { - g_RootMenu.ConsolePrint("Commands are MOCK and NOD."); - } - } else if (g_yam_state == 3) { - if (strcasecmp(arg, "report") == 0) - { - g_RootMenu.ConsolePrint("You report a bug to Alfred and Yeti. Immediately, both fall asleep."); - g_RootMenu.ConsolePrint("You decay in the break room for two years while they sleep."); - g_RootMenu.ConsolePrint("YOU HAVE DIED. GAME OVER."); - g_yam_state = 0; - } else if (strcasecmp(arg, "request") == 0) { - g_RootMenu.ConsolePrint("You request a feature to Alfred and Yeti. They both mutter something"); - g_RootMenu.ConsolePrint("about it being implemented \"soon.\" Then, by accident, someone sends"); - g_RootMenu.ConsolePrint("a message over \"Friends.\" The entire building catches fire."); - g_RootMenu.ConsolePrint("YOU HAVE DIED. GAME OVER."); - g_yam_state = 0; - } else if (strcasecmp(arg, "die") == 0) { - g_RootMenu.ConsolePrint("For no reason, you suddenly catch fire. Alfred and Yeti find this"); - g_RootMenu.ConsolePrint("deeply disturbing, and cover your flaming corpse with Episode 2"); - g_RootMenu.ConsolePrint("advertisements. Coming soon, with Team Fortress 2, and Portal!"); - g_RootMenu.ConsolePrint("YOU HAVE DIED. GAME OVER."); - g_yam_state = 0; - } else if (strcasecmp(arg, "spray") == 0) { - g_RootMenu.ConsolePrint("You spray Alfred and Yeti with butter. Like Jack Thompson to an"); - g_RootMenu.ConsolePrint("ambulance, Gabe Newell instantly appears and devours them both."); - g_RootMenu.ConsolePrint("You run away, just in time, as Gabe Newell explodes, registering "); - g_RootMenu.ConsolePrint("a 5.6 earthquake. Outside, world peace is achieved."); - g_RootMenu.ConsolePrint("YOU HAVE WON."); - g_yam_state = 0; - } - } else if (g_yam_state == 2) { - if (strcasecmp(arg, "shake") == 0) - { - g_RootMenu.ConsolePrint("You shake Gaben's hand. It is a terrifying and disgusting experience."); - g_RootMenu.ConsolePrint("However, you survive, and continue on."); - _YamState(3); - } else if (strcasecmp(arg, "offer") == 0) { - g_RootMenu.ConsolePrint("You offer Gabe Newell one (1) donut. With a gleam in his eyes, "); - g_RootMenu.ConsolePrint("he picks you up and devours you whole."); - g_RootMenu.ConsolePrint("YOU HAVE DIED. GAME OVER."); - g_yam_state = 0; - } else if (strcasecmp(arg, "walk") == 0) { - g_RootMenu.ConsolePrint("You walk past Gabe Newell. He can't keep up with your pace!"); - _YamState(3); - } else { - g_RootMenu.ConsolePrint("Commands are SHAKE, OFFER, and WALK."); - } - } else if (g_yam_state == 0) { - if (strcasecmp(arg, "left") == 0) - { - _YamState(1); - } else if (strcasecmp(arg, "right") == 0) { - g_RootMenu.ConsolePrint("You run away from the Valve headquarters in sheer terror."); - g_RootMenu.ConsolePrint("While running, you smash into an unknown person, who turns out to be your soul mate."); - g_RootMenu.ConsolePrint("You marry and raise a family of 3 kids."); - g_RootMenu.ConsolePrint("Many years later, you look back, and realize this was your best choice."); - g_RootMenu.ConsolePrint("YOU HAVE WON."); - g_yam_state = 0; - } else if (strcasecmp(arg, "forward") == 0) { - _YamState(2); - } else if (arg[0] != '\0') { - g_RootMenu.ConsolePrint("Commands are FORWARD, LEFT, and RIGHT."); - } - } -} - -void _IntExt_EnableYams() -{ - static ConCommand *pCmd = NULL; - if (!pCmd) - { - pCmd = new ConCommand("sm_text", _IntExt_CallYams, "Fountain of Yams Adventure Game", FCVAR_GAMEDLL); - g_RootMenu.ConsolePrint("Something is now enabled..."); - } else { - g_RootMenu.ConsolePrint("Something is already enabled..."); - } -} diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index 0f0f39ae..5de8d87a 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -270,14 +270,14 @@ void ConVarManager::OnRootConsoleCommand(const char *cmdname, const CCommand &co if (argcount >= 3) { /* Get plugin index that was passed */ - int id = atoi(command.Arg(2)); + const char *arg = command.Arg(2); /* Get plugin object */ - CPlugin *plugin = g_PluginSys.GetPluginByOrder(id); + CPlugin *plugin = g_PluginSys.FindPluginByConsoleArg(arg); if (!plugin) { - g_RootMenu.ConsolePrint("[SM] Plugin index %d not found.", id); + g_RootMenu.ConsolePrint("[SM] Plugin \"%s\" was not found.", arg); return; } @@ -705,159 +705,3 @@ HandleError ConVarManager::ReadConVarHandle(Handle_t hndl, ConVar **pVar) return error; } - -static int s_YamagramState = 0; - -void _YamagramPrinterTwoPointOhOh(int yamagram) -{ - switch (yamagram) - { - case 0: - g_RootMenu.ConsolePrint("Answer the following questions correctly and Gaben may not eat you after all."); - g_RootMenu.ConsolePrint("You will be given one hint in the form of my patented yamagrams."); - g_RootMenu.ConsolePrint("Type sm_nana to see the last question."); - g_RootMenu.ConsolePrint("Type sm_nana <answer> to attempt an answer of the question."); - g_RootMenu.ConsolePrint("-------------------------------"); - _YamagramPrinterTwoPointOhOh(1); - return; - case 1: - g_RootMenu.ConsolePrint("Question Ichi (1)"); - g_RootMenu.ConsolePrint("One can turn into a cow by doing what action?"); - g_RootMenu.ConsolePrint("Hint: AGE SANS GRIT"); - break; - case 2: - g_RootMenu.ConsolePrint("Question Ni (2)"); - g_RootMenu.ConsolePrint("What kind of hat should you wear when using the Internet?"); - g_RootMenu.ConsolePrint("Hint: BRR MOOSE"); - break; - case 3: - g_RootMenu.ConsolePrint("Question San (3)"); - g_RootMenu.ConsolePrint("Who is the lead developer of SourceMod?"); - g_RootMenu.ConsolePrint("Hint: VEAL BANDANA DID RIP SOON"); - break; - case 4: - g_RootMenu.ConsolePrint("Question Yon (4)"); - g_RootMenu.ConsolePrint("A terrible translation of 'SVN Revision' to Japanese romaji might be ..."); - g_RootMenu.ConsolePrint("Hint: I TAKE IN AN AIR OK"); - break; - case 5: - g_RootMenu.ConsolePrint("Question Go (5)"); - g_RootMenu.ConsolePrint("What is a fundamental concept in the game of Go?"); - g_RootMenu.ConsolePrint("Hint: AD LADEN THIEF"); - break; - case 6: - g_RootMenu.ConsolePrint("Question Roku (6)"); - g_RootMenu.ConsolePrint("Why am I asking all these strange questions?"); - g_RootMenu.ConsolePrint("Hint: CHUBBY TITAN EATS EWE WAGE DATA"); - break; - case 7: - g_RootMenu.ConsolePrint("Question Nana (7)"); - g_RootMenu.ConsolePrint("What is my name?"); - g_RootMenu.ConsolePrint("Hint: AD MODE LAG US"); - break; - default: - break; - } - - s_YamagramState = yamagram; -} - -#if defined ORANGEBOX_BUILD -void _IntExt_CallYamagrams(const CCommand &cmd) -{ -#else -void _IntExt_CallYamagrams() -{ - CCommand cmd; -#endif - bool correct = false; - const char *arg = cmd.ArgS(); - - if (!arg || arg[0] == '\0') - { - _YamagramPrinterTwoPointOhOh(s_YamagramState); - return; - } - - switch (s_YamagramState) - { - case 1: - correct = !strcasecmp(arg, "eating grass"); - break; - case 2: - correct = !strcasecmp(arg, "sombrero"); - break; - case 3: - correct = !strcasecmp(arg, "david bailopan anderson"); - break; - case 4: - correct = !strcasecmp(arg, "kaitei no kairan"); - break; - case 5: - correct = !strcasecmp(arg, "life and death"); - break; - case 6: - correct = !strcasecmp(arg, "because gabe wanted it that way"); - if (correct) - { - g_RootMenu.ConsolePrint("Congratulations, you have answered 6 of my questions."); - g_RootMenu.ConsolePrint("However, I have one final question for you. It wouldn't be nana without it."); - g_RootMenu.ConsolePrint("-------------------------------"); - _YamagramPrinterTwoPointOhOh(7); - return; - } - break; - case 7: - correct = !strcasecmp(arg, "damaged soul"); - if (correct) - { - g_RootMenu.ConsolePrint("You don't know how lucky you are to still be alive!"); - g_RootMenu.ConsolePrint("Congratulations. You have answered all 7 questions correctly."); - g_RootMenu.ConsolePrint("The SourceMod Dev Team will be at your door with anti-Gaben grenades"); - g_RootMenu.ConsolePrint("within seconds. You will also be provided with a rocket launcher,"); - g_RootMenu.ConsolePrint("just in case Alfred decides to strike you with a blitzkrieg in retaliation."); - - s_YamagramState = 0; - return; - } - break; - default: - break; - } - - if (s_YamagramState > 0) - { - if (correct) - { - g_RootMenu.ConsolePrint("Correct! You are one step closer to avoiding the deadly jaws of Gaben."); - g_RootMenu.ConsolePrint("-------------------------------"); - s_YamagramState++; - } else { - g_RootMenu.ConsolePrint("Wrong! You better be more careful. Gaben may be at your door at any minute."); - return; - } - } - - _YamagramPrinterTwoPointOhOh(s_YamagramState); -} - -void _IntExt_EnableYamagrams() -{ - static ConCommand *pCmd = NULL; - if (!pCmd) - { - pCmd = new ConCommand("sm_nana", _IntExt_CallYamagrams, "Try these yamagrams!", FCVAR_GAMEDLL); - g_RootMenu.ConsolePrint("[SM] Warning: Gaben has been alerted of your actions. You may be eaten."); - } else { - g_RootMenu.ConsolePrint("[SM] Gaben has already been alerted of your actions..."); - } -} - -void _IntExt_OnHostnameChanged(ConVar *pConVar, const char *oldValue, float flOldValue) -{ - if (strcmp(oldValue, "Good morning, DS-san.") == 0 - && strcmp(pConVar->GetString(), "Good night, talking desk lamp.") == 0) - { - _IntExt_EnableYamagrams(); - } -} diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index 4e374084..7f2a749d 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -59,17 +59,6 @@ RootConsoleMenu::~RootConsoleMenu() m_Menu.clear(); } -extern void _IntExt_OnHostnameChanged(ConVar *var, const char *pOldValue, float flOldValue); - -class DetectHostNameChanges : public IConVarChangeListener -{ -public: - void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue) - { - _IntExt_OnHostnameChanged(pConVar, oldValue, flOldValue); - } -} s_HostnameChangeDetector; - void RootConsoleMenu::OnSourceModStartup(bool late) { #if defined ORANGEBOX_BUILD @@ -82,13 +71,11 @@ void RootConsoleMenu::OnSourceModStartup(bool late) void RootConsoleMenu::OnSourceModAllInitialized() { - g_ConVarManager.AddConVarChangeListener("hostname", &s_HostnameChangeDetector); g_ShareSys.AddInterface(NULL, this); } void RootConsoleMenu::OnSourceModShutdown() { - g_ConVarManager.RemoveConVarChangeListener("hostname", &s_HostnameChangeDetector); RemoveRootConsoleCommand("credits", this); RemoveRootConsoleCommand("version", this); } @@ -227,8 +214,6 @@ unsigned int RootConsoleMenu::GetInterfaceVersion() return SMINTERFACE_ROOTCONSOLE_VERSION; } -extern void _IntExt_EnableYams(); - void RootConsoleMenu::GotRootCmd(const CCommand &cmd) { unsigned int argnum = cmd.ArgC(); @@ -236,12 +221,7 @@ void RootConsoleMenu::GotRootCmd(const CCommand &cmd) if (argnum >= 2) { const char *cmdname = cmd.Arg(1); - if (strcmp(cmdname, "text") == 0) - { - _IntExt_EnableYams(); - return; - } - else if (strcmp(cmdname, "internal") == 0) + if (strcmp(cmdname, "internal") == 0) { if (argnum >= 3) { diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 4e022cca..0fac4d59 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -2305,14 +2305,33 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c return; } - int num = atoi(command.Arg(3)); - if (num < 1 || num > (int)GetPluginCount()) + CPlugin *pl; + char *end; + const char *arg = command.Arg(3); + int id = strtol(arg, &end, 10); + + if (*end == '\0') { - g_RootMenu.ConsolePrint("[SM] Plugin index not found."); - return; + pl = GetPluginByOrder(id); + if (!pl) + { + g_RootMenu.ConsolePrint("[SM] Plugin index %d not found.", id); + return; + } + } + else + { + char pluginfile[256]; + const char *ext = g_LibSys.GetFileExtension(arg) ? "" : ".smx"; + UTIL_Format(pluginfile, sizeof(pluginfile), "%s%s", arg, ext); + + if (!sm_trie_retrieve(m_LoadLookup, pluginfile, (void **)&pl)) + { + g_RootMenu.ConsolePrint("[SM] Plugin %s is not loaded.", pluginfile); + return; + } } - CPlugin *pl = GetPluginByOrder(num); const sm_plugininfo_t *info = pl->GetPublicInfo(); g_RootMenu.ConsolePrint(" Filename: %s", pl->GetFilename()); @@ -2388,11 +2407,31 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c return; } - int num = atoi(command.Arg(3)); - if (num < 1 || num > (int)GetPluginCount()) + CPlugin *pl; + char *end; + const char *arg = command.Arg(3); + int id = strtol(arg, &end, 10); + + if (*end == '\0') { - g_RootMenu.ConsolePrint("[SM] Plugin index not found."); - return; + pl = GetPluginByOrder(id); + if (!pl) + { + g_RootMenu.ConsolePrint("[SM] Plugin index %d not found.", id); + return; + } + } + else + { + char pluginfile[256]; + const char *ext = g_LibSys.GetFileExtension(arg) ? "" : ".smx"; + UTIL_Format(pluginfile, sizeof(pluginfile), "%s%s", arg, ext); + + if (!sm_trie_retrieve(m_LoadLookup, pluginfile, (void **)&pl)) + { + g_RootMenu.ConsolePrint("[SM] Plugin %s is not loaded.", pluginfile); + return; + } } int res; @@ -2413,7 +2452,6 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c debug = false; } - CPlugin *pl = GetPluginByOrder(num); if (debug && pl->IsDebugging()) { g_RootMenu.ConsolePrint("[SM] This plugin is already in debug mode."); @@ -2807,3 +2845,33 @@ int CPluginManager::GetOrderOfPlugin(IPlugin *pl) return -1; } +CPlugin *CPluginManager::FindPluginByConsoleArg(const char *arg) +{ + int id; + char *end; + CPlugin *pl; + + id = strtol(arg, &end, 10); + + if (*end == '\0') + { + pl = GetPluginByOrder(id); + if (!pl) + { + return NULL; + } + } + else + { + char pluginfile[256]; + const char *ext = g_LibSys.GetFileExtension(arg) ? "" : ".smx"; + UTIL_Format(pluginfile, sizeof(pluginfile), "%s%s", arg, ext); + + if (!sm_trie_retrieve(m_LoadLookup, pluginfile, (void **)&pl)) + { + return NULL; + } + } + + return pl; +} diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index f51b0f5a..6a607797 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -443,6 +443,8 @@ public: bool ReloadPlugin(CPlugin *pl); void UnloadAll(); + + CPlugin *FindPluginByConsoleArg(const char *arg); private: LoadRes _LoadPlugin(CPlugin **pPlugin, const char *path, bool debug, PluginType type, char error[], size_t maxlength); From 1e6b1c92cc57dbf916d5396efbf7c30da113f8ab Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 06:07:16 +0000 Subject: [PATCH 219/263] fixed amb1485 - memory corruption in ShiftArrayUp() / CellArray::insert_at() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401909 --- core/CellArray.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/CellArray.h b/core/CellArray.h index f8925a60..786cd255 100644 --- a/core/CellArray.h +++ b/core/CellArray.h @@ -118,7 +118,7 @@ public: /* move everything up */ cell_t *src = at(index); cell_t *dst = at(index + 1); - memmove(dst, src, sizeof(cell_t) * m_BlockSize * m_Size); + memmove(dst, src, sizeof(cell_t) * m_BlockSize * (m_Size-index)); m_Size++; From 2be85f1a3e122dbd2d93c49504aba4e81c7ad014 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 06:33:25 +0000 Subject: [PATCH 220/263] added amb1495 - ISourceMod::Add/RemoveGameFrameHook --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401910 --- core/TimerSys.cpp | 2 +- core/frame_hooks.cpp | 4 ++-- core/frame_hooks.h | 2 +- core/sourcemod.cpp | 30 ++++++++++++++++++++++++++++++ core/sourcemod.h | 5 +++++ public/ISourceMod.h | 23 ++++++++++++++++++++++- 6 files changed, 61 insertions(+), 5 deletions(-) diff --git a/core/TimerSys.cpp b/core/TimerSys.cpp index 5831dd40..633de682 100644 --- a/core/TimerSys.cpp +++ b/core/TimerSys.cpp @@ -234,7 +234,7 @@ void TimerSystem::GameFrame(bool simulating) g_fTimerThink = CalcNextThink(g_fTimerThink, TIMER_MIN_ACCURACY); } - RunFrameHooks(); + RunFrameHooks(simulating); if (m_pOnGameFrame->GetFunctionCount()) { diff --git a/core/frame_hooks.cpp b/core/frame_hooks.cpp index 5603e881..09a38a67 100644 --- a/core/frame_hooks.cpp +++ b/core/frame_hooks.cpp @@ -39,11 +39,12 @@ float g_LastMenuTime = 0.0f; float g_LastAuthCheck = 0.0f; -void RunFrameHooks() +void RunFrameHooks(bool simulating) { /* Frame based hooks */ g_DBMan.RunFrame(); g_HL2.ProcessFakeCliCmdQueue(); + g_SourceMod.ProcessGameFrameHooks(simulating); float curtime = *g_pUniversalTime; @@ -60,4 +61,3 @@ void RunFrameHooks() g_LastAuthCheck = curtime; } } - diff --git a/core/frame_hooks.h b/core/frame_hooks.h index 098ff428..f99d560c 100644 --- a/core/frame_hooks.h +++ b/core/frame_hooks.h @@ -32,6 +32,6 @@ #ifndef _INCLUDE_SOURCEMOD_FRAME_HOOKS_H_ #define _INCLUDE_SOURCEMOD_FRAME_HOOKS_H_ -void RunFrameHooks(); +void RunFrameHooks(bool simulating); #endif //_INCLUDE_SOURCEMOD_FRAME_HOOKS_H_ diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 9b88b66c..5a44e775 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -670,6 +670,36 @@ time_t SourceModBase::GetAdjustedTime() return GetAdjustedTime(); } +void SourceModBase::AddGameFrameHook(GAME_FRAME_HOOK hook) +{ + m_frame_hooks.push_back(hook); +} + +void SourceModBase::RemoveGameFrameHook(GAME_FRAME_HOOK hook) +{ + for (size_t i = 0; i < m_frame_hooks.size(); i++) + { + if (m_frame_hooks[i] == hook) + { + m_frame_hooks.erase(m_frame_hooks.iterAt(i)); + return; + } + } +} + +void SourceModBase::ProcessGameFrameHooks(bool simulating) +{ + if (m_frame_hooks.size() == 0) + { + return; + } + + for (size_t i = 0; i < m_frame_hooks.size(); i++) + { + m_frame_hooks[i](simulating); + } +} + SMGlobalClass *SMGlobalClass::head = NULL; SMGlobalClass::SMGlobalClass() diff --git a/core/sourcemod.h b/core/sourcemod.h index 1b222c80..cb4ff880 100644 --- a/core/sourcemod.h +++ b/core/sourcemod.h @@ -35,6 +35,7 @@ #include "sm_globals.h" #include <ISourceMod.h> #include <sh_stack.h> +#include <sh_vector.h> #include "CDataPack.h" using namespace SourceHook; @@ -114,6 +115,9 @@ public: // ISourceMod void GlobalPause(); void GlobalUnpause(); void DoGlobalPluginLoads(); + void AddGameFrameHook(GAME_FRAME_HOOK hook); + void RemoveGameFrameHook(GAME_FRAME_HOOK hook); + void ProcessGameFrameHooks(bool simulating); private: CStack<CDataPack *> m_freepacks; char m_SMBaseDir[PLATFORM_MAX_PATH]; @@ -124,6 +128,7 @@ private: bool m_ExecOnMapEnd; unsigned int m_target; bool m_GotBasePath; + CVector<GAME_FRAME_HOOK> m_frame_hooks; }; extern bool g_Loaded; diff --git a/public/ISourceMod.h b/public/ISourceMod.h index 5782b772..66b21090 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -43,7 +43,7 @@ #include <time.h> #define SMINTERFACE_SOURCEMOD_NAME "ISourceMod" -#define SMINTERFACE_SOURCEMOD_VERSION 5 +#define SMINTERFACE_SOURCEMOD_VERSION 6 /** * @brief Forward declaration of the KeyValues class. @@ -63,6 +63,13 @@ namespace SourceMod Path_SM_Rel, /**< Base path is relative to SourceMod */ }; + /** + * @brief Called when a game frame is fired. + * + * @param simulating Whether or not the game is ticking. + */ + typedef void (*GAME_FRAME_HOOK)(bool simulating); + /** * @brief Contains miscellaneous helper functions. */ @@ -225,6 +232,20 @@ namespace SourceMod * @return Global client value. */ virtual unsigned int GetGlobalTarget() const =0; + + /** + * @brief Adds a function to be called each game frame. + * + * @param hook Hook function. + */ + virtual void AddGameFrameHook(GAME_FRAME_HOOK hook) =0; + + /** + * @brief Removes one game frame hook matching the given function. + * + * @param hook Hook function. + */ + virtual void RemoveGameFrameHook(GAME_FRAME_HOOK hook) =0; }; } From 7c0e564db7d2800d9e0b20e152f1e189770293a8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 07:14:16 +0000 Subject: [PATCH 221/263] added amb1320 - added @me and @!me targets --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401911 --- core/PlayerManager.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 302f8603..c90deea4 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -961,10 +961,22 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) } } + if (strcmp(info->pattern, "@me") == 0) + { + info->targets[0] = info->admin; + info->num_targets = 1; + strncopy(info->target_name, + pAdmin ? pAdmin->GetName() : "Console", + info->target_name_maxlength); + info->target_name_style = COMMAND_TARGETNAME_RAW; + return; + } + if ((info->flags & COMMAND_FILTER_NO_MULTI) != COMMAND_FILTER_NO_MULTI) { bool is_multi = false; bool bots_only = false; + int skip_client = -1; if (strcmp(info->pattern, "@all") == 0) { @@ -1018,6 +1030,13 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) info->target_name_style = COMMAND_TARGETNAME_ML; info->flags |= COMMAND_FILTER_NO_BOTS; } + else if (strcmp(info->pattern, "@!me") == 0) + { + is_multi = true; + strncopy(info->target_name, "all players", info->target_name_maxlength); + info->target_name_style = COMMAND_TARGETNAME_ML; + skip_client = info->admin; + } if (is_multi) { @@ -1029,7 +1048,8 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) } if (FilterCommandTarget(pAdmin, pTarget, info->flags) > 0) { - if (!bots_only || pTarget->IsFakeClient()) + if ((!bots_only || pTarget->IsFakeClient()) + && skip_client != i) { info->targets[total++] = i; } From 7a8309deed72ef9e1ac450145296f1db29614bdd Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 07:17:38 +0000 Subject: [PATCH 222/263] fixed a bug from @me in server console --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401912 --- core/PlayerManager.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index c90deea4..79936b11 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -961,13 +961,11 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) } } - if (strcmp(info->pattern, "@me") == 0) + if (strcmp(info->pattern, "@me") == 0 && info->admin != 0) { info->targets[0] = info->admin; info->num_targets = 1; - strncopy(info->target_name, - pAdmin ? pAdmin->GetName() : "Console", - info->target_name_maxlength); + strncopy(info->target_name, pAdmin->GetName(), info->target_name_maxlength); info->target_name_style = COMMAND_TARGETNAME_RAW; return; } From f4e23a14ddb821d95d3a7f95a8d4b7b97861ced0 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sat, 1 Mar 2008 07:59:53 +0000 Subject: [PATCH 223/263] added amb1331 - steamid targetting --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401913 --- core/PlayerManager.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 79936b11..ac1fc427 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -931,6 +931,53 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) } } + /* Do we need to look for a steam id? */ + if (strncmp(&info->pattern[1], "STEAM_", 6) == 0) + { + size_t p, len; + char new_pattern[256]; + + strcpy(new_pattern, "STEAM_"); + len = strlen(&info->pattern[7]); + for (p = 0; p < len; p++) + { + new_pattern[6 + p] = info->pattern[7 + p]; + if (new_pattern[6 + p] == '_') + { + new_pattern[6 + p] = ':'; + } + } + new_pattern[6 + p] = '\0'; + + for (int i = 1; i <= max_clients; i++) + { + if ((pTarget = GetPlayerByIndex(i)) == NULL) + { + continue; + } + if (!pTarget->IsConnected() || !pTarget->IsAuthorized()) + { + continue; + } + if (strcmp(pTarget->GetAuthString(), new_pattern) == 0) + { + if ((info->reason = FilterCommandTarget(pAdmin, pTarget, info->flags)) + == COMMAND_TARGET_VALID) + { + info->targets[0] = i; + info->num_targets = 1; + strncopy(info->target_name, pTarget->GetName(), info->target_name_maxlength); + info->target_name_style = COMMAND_TARGETNAME_RAW; + } + else + { + info->num_targets = 0; + } + return; + } + } + } + /* See if an exact name matches */ for (int i = 1; i <= max_clients; i++) { From 0817bd0b8ba57270a9812b4216e6b441ae36d178 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 06:40:59 +0000 Subject: [PATCH 224/263] added amb256 - (nice number), profiler complete with gui to show files --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401914 --- configs/plugin_settings.cfg | 7 + core/Profiler.cpp | 483 ++++++++++++++++++++ core/Profiler.h | 131 ++++++ core/msvc8/sourcemod_mm.vcproj | 10 +- core/systems/PluginSys.cpp | 1 - core/vm/sp_vm_basecontext.cpp | 41 +- core/vm/sp_vm_basecontext.h | 2 + core/vm/sp_vm_function.cpp | 27 +- core/vm/sp_vm_function.h | 8 +- public/sourcepawn/sp_vm_api.h | 61 ++- public/sourcepawn/sp_vm_types.h | 10 + sourcepawn/jit/x86/dll_exports.cpp | 2 +- sourcepawn/jit/x86/jit_x86.cpp | 217 ++++++++- sourcepawn/jit/x86/jit_x86.h | 5 +- tools/profiler/csharp/Comparators.cs | 85 ++++ tools/profiler/csharp/Form1.Designer.cs | 244 ++++++++++ tools/profiler/csharp/Form1.cs | 98 ++++ tools/profiler/csharp/Form1.resx | 126 +++++ tools/profiler/csharp/ProfReport.cs | 157 +++++++ tools/profiler/csharp/Program.cs | 20 + tools/profiler/csharp/profviewer.csproj | 80 ++++ tools/profiler/csharp/profviewer.sln | 20 + tools/profiler/php/ProfFileParser.class.php | 73 +++ 23 files changed, 1874 insertions(+), 34 deletions(-) create mode 100644 core/Profiler.cpp create mode 100644 core/Profiler.h create mode 100644 tools/profiler/csharp/Comparators.cs create mode 100644 tools/profiler/csharp/Form1.Designer.cs create mode 100644 tools/profiler/csharp/Form1.cs create mode 100644 tools/profiler/csharp/Form1.resx create mode 100644 tools/profiler/csharp/ProfReport.cs create mode 100644 tools/profiler/csharp/Program.cs create mode 100644 tools/profiler/csharp/profviewer.csproj create mode 100644 tools/profiler/csharp/profviewer.sln create mode 100644 tools/profiler/php/ProfFileParser.class.php diff --git a/configs/plugin_settings.cfg b/configs/plugin_settings.cfg index d8364de0..cf46ae71 100644 --- a/configs/plugin_settings.cfg +++ b/configs/plugin_settings.cfg @@ -14,6 +14,13 @@ * * You can also have an "Options" section declaring options to pass onto the JIT: * "debug" - Whether or not to load the plugin in debug mode + * "profile" - Bit flags for profiling level. Add flags together to reach a value. + * WARNING: Profiler is _ALPHA_ software! Use it at your own risk for + * development cycles only (not production setups). + * See the wiki article "SourceMod Profiler" for more information. + * 1 - Profile natives + * 2 - Profile callbacks + * 4 - Profile internal plugin function calls */ "Plugins" diff --git a/core/Profiler.cpp b/core/Profiler.cpp new file mode 100644 index 00000000..7f119144 --- /dev/null +++ b/core/Profiler.cpp @@ -0,0 +1,483 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "Profiler.h" +#include "PluginSys.h" +#include "sm_stringutil.h" +#include "Logger.h" + +ProfileEngine g_Profiler; +IProfiler *sm_profiler = &g_Profiler; + +#if defined PLATFORM_WINDOWS +double WINDOWS_PERFORMANCE_FREQUENCY; +#endif + +class EmptyProfiler : public IProfiler +{ +public: + void OnNativeBegin(IPluginContext *pContext, sp_native_t *native) + { + } + void OnNativeEnd() + { + } + void OnFunctionBegin(IPluginContext *pContext, const char *name) + { + } + void OnFunctionEnd() + { + } + int OnCallbackBegin(IPluginContext *pContext, sp_public_t *pubfunc) + { + return 0; + } + void OnCallbackEnd(int serial) + { + } +} s_EmptyProfiler; + +inline void InitProfPoint(prof_point_t &pt) +{ +#if defined PLATFORM_WINDOWS + QueryPerformanceCounter(&pt.value); +#elif defined PLATFORM_POSIX + gettimeofday(&pt.value, NULL); +#endif + pt.is_set = true; +} + +ProfileEngine::ProfileEngine() +{ + m_serial = 0; + +#if defined PLATFORM_WINDOWS + LARGE_INTEGER pf; + + if (QueryPerformanceFrequency(&pf)) + { + WINDOWS_PERFORMANCE_FREQUENCY = 1.0 / (double)(pf.QuadPart); + } + else + { + WINDOWS_PERFORMANCE_FREQUENCY = -1.0; + } +#endif + + if (IsEnabled()) + { + InitProfPoint(m_ProfStart); + } + else + { + sm_profiler = &s_EmptyProfiler; + } +} + +bool ProfileEngine::IsEnabled() +{ +#if defined PLATFORM_WINDOWS + return (WINDOWS_PERFORMANCE_FREQUENCY > 0.0); +#elif defined PLATFORM_POSIX + return true; +#endif +} + +inline double DiffProfPoints(const prof_point_t &start, const prof_point_t &end) +{ + double seconds; + +#if defined PLATFORM_WINDOWS + LONGLONG diff; + + diff = end.value.QuadPart - start.value.QuadPart; + seconds = diff * WINDOWS_PERFORMANCE_FREQUENCY; +#elif defined PLATFORM_POSIX + seconds = (double)(end.value.tv_sec - start.value.tv_sec); + + if (start.value.tv_usec > after.value.tv_usec) + { + seconds - 1.0; + seconds += (double)(1000000 - (before.value.tv_usec - after.tv_usec)) / 1000000.0; + } + else + { + seconds += (double)(after.value.tv_usec - before.value.tv_usec) / 1000000.0; + } +#endif + + return seconds; +} + +inline double CalcAtomTime(const prof_atom_t &atom) +{ + if (!atom.end.is_set) + { + return atom.base_time; + } + + return atom.base_time + DiffProfPoints(atom.start, atom.end); +} + +void ProfileEngine::OnNativeBegin(IPluginContext *pContext, sp_native_t *native) +{ + PushProfileStack(pContext, SP_PROF_NATIVES, native->name); +} + +void ProfileEngine::OnNativeEnd() +{ + assert(!m_AtomStack.empty()); + assert(m_AtomStack.front().atom_type == SP_PROF_NATIVES); + + PopProfileStack(&m_Natives); +} + +void ProfileEngine::OnFunctionBegin(IPluginContext *pContext, const char *name) +{ + PushProfileStack(pContext, SP_PROF_FUNCTIONS, name); +} + +void ProfileEngine::OnFunctionEnd() +{ + assert(!m_AtomStack.empty()); + assert(m_AtomStack.front().atom_type == SP_PROF_FUNCTIONS); + + PopProfileStack(&m_Functions); +} + +int ProfileEngine::OnCallbackBegin(IPluginContext *pContext, sp_public_t *pubfunc) +{ + PushProfileStack(pContext, SP_PROF_CALLBACKS, pubfunc->name); + + return m_serial; +} + +void ProfileEngine::OnCallbackEnd(int serial) +{ + assert(!m_AtomStack.empty()); + + /** + * Account for the situation where the JIT discards the + * stack because there was an RTE of sorts. + */ + if (m_AtomStack.front().atom_type != SP_PROF_CALLBACKS + && m_AtomStack.front().atom_serial != serial) + { + prof_atom_t atom; + double total_time; + + /* There was an error, and we need to discard things. */ + total_time = 0.0; + while (!m_AtomStack.empty() + && m_AtomStack.front().atom_type != SP_PROF_CALLBACKS + && m_AtomStack.front().atom_serial != serial) + { + total_time += CalcAtomTime(m_AtomStack.front()); + m_AtomStack.pop(); + } + + /** + * Now we can end and discard ourselves, without saving the data. + * Since this data is all erroneous anyway, we don't care if it's + * not totally accurate. + */ + + assert(!m_AtomStack.empty()); + atom = m_AtomStack.front(); + m_AtomStack.pop(); + + /* Note: We don't need to resume ourselves because end is set by Pause(). */ + total_time += CalcAtomTime(atom); + + ResumeParent(total_time); + return; + } + + PopProfileStack(&m_Callbacks); +} + +void ProfileEngine::PushProfileStack(IPluginContext *ctx, int type, const char *name) +{ + prof_atom_t atom; + + PauseParent(); + + atom.atom_type = type; + atom.base_time = 0.0; + atom.ctx = ctx->GetContext(); + atom.name = name; + atom.end.is_set = false; + + if (type == SP_PROF_CALLBACKS) + { + atom.atom_serial = ++m_serial; + } + else + { + atom.atom_serial = 0; + } + + m_AtomStack.push(atom); + + /* Note: We do this after because the stack could grow and skew results */ + InitProfPoint(m_AtomStack.front().start); +} + +void ProfileEngine::PopProfileStack(ProfileReport *reporter) +{ + double total_time; + + prof_atom_t &atom = m_AtomStack.front(); + + /* We're okay to cache our used time. */ + InitProfPoint(atom.end); + total_time = CalcAtomTime(atom); + + /* Now it's time to save this! This may do a lot of computations which + * is why we've cached the time beforehand. + */ + reporter->SaveAtom(atom); + m_AtomStack.pop(); + + /* Finally, tell our parent how much time we used. */ + ResumeParent(total_time); +} + +void ProfileEngine::PauseParent() +{ + if (m_AtomStack.empty()) + { + return; + } + + InitProfPoint(m_AtomStack.front().end); +} + +void ProfileEngine::ResumeParent(double addTime) +{ + if (m_AtomStack.empty()) + { + return; + } + + prof_atom_t &atom = m_AtomStack.front(); + + /* Move its "paused time" to its base (known) time, + * then reset the start/end. Note that since CalcAtomTime() + * reads the base time, we SHOULD NOT use += to add. + */ + atom.base_time = CalcAtomTime(atom); + atom.base_time += addTime; + InitProfPoint(atom.start); + atom.end.is_set = false; +} + +void ProfileEngine::Clear() +{ + m_Natives.Clear(); + m_Callbacks.Clear(); + m_Functions.Clear(); + InitProfPoint(m_ProfStart); +} + +void ProfileEngine::OnSourceModAllInitialized() +{ + g_RootMenu.AddRootConsoleCommand("profiler", "Profiler commands", this); +} + +void ProfileEngine::OnSourceModShutdown() +{ + g_RootMenu.RemoveRootConsoleCommand("profiler", this); +} + +void ProfileEngine::OnRootConsoleCommand(const char *cmdname, const CCommand &command) +{ + if (command.ArgC() >= 3) + { + if (strcmp(command.Arg(2), "flush") == 0) + { + FILE *fp; + char path[256]; + + g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "logs/profile_%d.xml", (int)time(NULL)); + + if ((fp = fopen(path, "wt")) == NULL) + { + g_RootMenu.ConsolePrint("Failed, could not open file for writing: %s", path); + return; + } + + GenerateReport(fp); + + fclose(fp); + + g_RootMenu.ConsolePrint("Profiler report generated as: %s\n", path); + + return; + } + } + + g_RootMenu.ConsolePrint("Profiler commands:"); + g_RootMenu.DrawGenericOption("flush", "Flushes statistics to disk and starts over"); +} + +bool ProfileEngine::GenerateReport(FILE *fp) +{ + time_t t; + double total_time; + prof_point_t end_time; + + InitProfPoint(end_time); + total_time = DiffProfPoints(m_ProfStart, end_time); + + t = time(NULL); + + fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n"); + fprintf(fp, "<profile time=\"%d\" uptime=\"%f\">\n", (int)t, total_time); + WriteReport(fp, &m_Natives, "natives"); + WriteReport(fp, &m_Callbacks, "callbacks"); + WriteReport(fp, &m_Functions, "functions"); + fprintf(fp, "</profile>\n"); + + return true; +} + +void ProfileEngine::WriteReport(FILE *fp, ProfileReport *report, const char *name) +{ + size_t i, num; + prof_atom_report_t *ar; + char new_name[512]; + + fprintf(fp, " <report name=\"%s\">\n", name); + + num = report->GetNumReports(); + for (i = 0; i < num; i++) + { + ar = report->GetReport(i); + + strncopy(new_name, ar->atom_name, sizeof(new_name)); + UTIL_ReplaceAll(new_name, sizeof(new_name), "<", "<"); + UTIL_ReplaceAll(new_name, sizeof(new_name), ">", ">"); + + fprintf(fp, " <item name=\"%s\" numcalls=\"%d\" mintime=\"%f\" maxtime=\"%f\" totaltime=\"%f\"/>\n", + new_name, + ar->num_calls, + ar->min_time, + ar->max_time, + ar->total_time); + } + + fprintf(fp, " </report>\n"); +} + +ProfileReport::~ProfileReport() +{ + for (size_t i = 0; i < m_Reports.size(); i++) + { + delete m_Reports[i]; + } +} + +void ProfileReport::Clear() +{ + m_ReportLookup.clear(); + for (size_t i = 0; i < m_Reports.size(); i++) + { + delete m_Reports[i]; + } + m_Reports.clear(); +} + +size_t ProfileReport::GetNumReports() +{ + return m_Reports.size(); +} + +prof_atom_report_t *ProfileReport::GetReport(size_t i) +{ + return m_Reports[i]; +} + +void ProfileReport::SaveAtom(const prof_atom_t &atom) +{ + double atom_time; + char full_name[256]; + prof_atom_report_t **pReport, *report; + + if (atom.atom_type == SP_PROF_NATIVES) + { + strncopy(full_name, atom.name, sizeof(full_name)); + } + else + { + CPlugin *pl; + const char *file; + + file = "unknown"; + if ((pl = g_PluginSys.GetPluginByCtx(atom.ctx)) != NULL) + { + file = pl->GetFilename(); + } + + UTIL_Format(full_name, sizeof(full_name), "%s!%s", file, atom.name); + } + + atom_time = CalcAtomTime(atom); + + if ((pReport = m_ReportLookup.retrieve(full_name)) == NULL) + { + report = new prof_atom_report_t; + + strncopy(report->atom_name, full_name, sizeof(report->atom_name)); + report->max_time = atom_time; + report->min_time = atom_time; + report->num_calls = 1; + report->total_time = atom_time; + + m_ReportLookup.insert(full_name, report); + m_Reports.push_back(report); + } + else + { + report = *pReport; + + if (atom_time > report->max_time) + { + report->max_time = atom_time; + } + if (atom_time < report->min_time) + { + report->min_time = atom_time; + } + report->num_calls++; + report->total_time += atom_time; + } +} diff --git a/core/Profiler.h b/core/Profiler.h new file mode 100644 index 00000000..3781a247 --- /dev/null +++ b/core/Profiler.h @@ -0,0 +1,131 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_PLUGIN_PROFILER_H_ +#define _INCLUDE_SOURCEMOD_PLUGIN_PROFILER_H_ + +#include <sp_vm_api.h> +#include <sm_platform.h> +#include <sm_trie_tpl.h> +#include <sh_vector.h> +#include <sh_stack.h> +#include <stdio.h> +#include "sm_globals.h" +#include "sm_srvcmds.h" + +using namespace SourcePawn; +using namespace SourceHook; + +struct prof_point_t +{ +#if defined PLATFORM_WINDOWS + LARGE_INTEGER value; +#elif defined PLATFORM_POSIX + struct timeval value; +#endif + bool is_set; +}; + +struct prof_atom_t +{ + int atom_type; /* Type of object we're profiling */ + int atom_serial; /* Serial number, if appropriate */ + sp_context_t *ctx; /* Plugin context. */ + const char *name; /* Name of the function */ + prof_point_t start; /* Start time */ + prof_point_t end; /* End time */ + double base_time; /* Known time from children or pausing. */ +}; + +struct prof_atom_report_t +{ + char atom_name[256]; /* Full name to shove to logs */ + double total_time; /* Total time spent executing, in s */ + unsigned int num_calls; /* Number of invocations */ + double min_time; /* Min time spent in one call, in s */ + double max_time; /* Max time spent in one call, in s */ +}; + +class ProfileReport +{ +public: + ~ProfileReport(); +public: + void SaveAtom(const prof_atom_t &atom); + size_t GetNumReports(); + prof_atom_report_t *GetReport(size_t i); + void Clear(); +private: + KTrie<prof_atom_report_t *> m_ReportLookup; + CVector<prof_atom_report_t *> m_Reports; +}; + +class ProfileEngine : + public SMGlobalClass, + public IRootConsoleCommand, + public IProfiler +{ +public: + ProfileEngine(); +public: + bool IsEnabled(); + bool GenerateReport(FILE *fp); + void Clear(); +public: //SMGlobalClass + void OnSourceModAllInitialized(); + void OnSourceModShutdown(); +public: //IRootConsoleCommand + void OnRootConsoleCommand(const char *cmdname, const CCommand &command); +public: //IProfiler + void OnNativeBegin(IPluginContext *pContext, sp_native_t *native); + void OnNativeEnd() ; + void OnFunctionBegin(IPluginContext *pContext, const char *name); + void OnFunctionEnd(); + int OnCallbackBegin(IPluginContext *pContext, sp_public_t *pubfunc); + void OnCallbackEnd(int serial); +private: + void PushProfileStack(IPluginContext *ctx, int type, const char *name); + void PopProfileStack(ProfileReport *reporter); + void PauseParent(); + void ResumeParent(double addTime); + void WriteReport(FILE *fp, ProfileReport *report, const char *name); +private: + CStack<prof_atom_t> m_AtomStack; + ProfileReport m_Callbacks; + ProfileReport m_Functions; + ProfileReport m_Natives; + int m_serial; + prof_point_t m_ProfStart; +}; + +extern ProfileEngine g_Profiler; + +#endif //_INCLUDE_SOURCEMOD_PLUGIN_PROFILER_H_ diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index a4b30dd0..c3efbe2c 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8,00" + Version="8.00" Name="sourcemod_mm" ProjectGUID="{E39527CD-7CAB-4420-97CC-DA1B93B260BC}" RootNamespace="sourcemod_mm" @@ -723,6 +723,10 @@ RelativePath="..\PlayerManager.cpp" > </File> + <File + RelativePath="..\Profiler.cpp" + > + </File> <File RelativePath="..\sm_autonatives.cpp" > @@ -881,6 +885,10 @@ RelativePath="..\PlayerManager.h" > </File> + <File + RelativePath="..\Profiler.h" + > + </File> <File RelativePath="..\sm_autonatives.h" > diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 0fac4d59..91977bdd 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -982,7 +982,6 @@ void CPluginManager::LoadPluginsFromDir(const char *basedir, const char *localpa g_LibSys.CloseDirectory(dir); } -//well i have discovered that gabe newell is very fat, so i wrote this comment now LoadRes CPluginManager::_LoadPlugin(CPlugin **_plugin, const char *path, bool debug, PluginType type, char error[], size_t maxlength) { if (m_LoadingLocked) diff --git a/core/vm/sp_vm_basecontext.cpp b/core/vm/sp_vm_basecontext.cpp index f9ad80f8..d851a714 100644 --- a/core/vm/sp_vm_basecontext.cpp +++ b/core/vm/sp_vm_basecontext.cpp @@ -61,6 +61,12 @@ BaseContext::BaseContext(sp_context_t *_ctx) ctx = _ctx; ctx->context = this; ctx->dbreak = GlobalDebugBreak; + + if (ctx->prof_flags != 0) + { + ctx->profiler = sm_profiler; + } + m_InExec = false; m_CustomMsg = false; m_funcsnum = ctx->vmbase->FunctionCount(ctx); @@ -150,7 +156,7 @@ void BaseContext::RefreshFunctionCache() { continue; } - m_pub_funcs[i]->Set(pub->code_offs, this, pub->funcid); + m_pub_funcs[i]->Set(pub->code_offs, this, pub->funcid, i); } } @@ -186,9 +192,16 @@ void BaseContext::SetContext(sp_context_t *_ctx) { return; } + ctx = _ctx; ctx->context = this; ctx->dbreak = GlobalDebugBreak; + + if (ctx->prof_flags != 0) + { + ctx->profiler = sm_profiler; + } + RefreshFunctionCache(); } @@ -992,10 +1005,18 @@ IPluginFunction *BaseContext::GetFunctionById(funcid_t func_id) pFunc = m_pub_funcs[func_id]; if (!pFunc) { - m_pub_funcs[func_id] = new CFunction(ctx->publics[func_id].code_offs, this, ctx->publics[func_id].funcid); + m_pub_funcs[func_id] = new CFunction(ctx->publics[func_id].code_offs, + this, + ctx->publics[func_id].funcid, + func_id); pFunc = m_pub_funcs[func_id]; - } else if (pFunc->IsInvalidated()) { - pFunc->Set(ctx->publics[func_id].code_offs, this, ctx->publics[func_id].funcid); + } + else if (pFunc->IsInvalidated()) + { + pFunc->Set(ctx->publics[func_id].code_offs, + this, + ctx->publics[func_id].funcid, + func_id); } } else { /* :TODO: currently not used */ @@ -1034,16 +1055,20 @@ IPluginFunction *BaseContext::GetFunctionByName(const char *public_name) GetPublicByIndex(index, &pub); if (pub) { - m_pub_funcs[index] = new CFunction(pub->code_offs, this, pub->funcid); + m_pub_funcs[index] = new CFunction(pub->code_offs, this, pub->funcid, index); } pFunc = m_pub_funcs[index]; - } else if (pFunc->IsInvalidated()) { + } + else if (pFunc->IsInvalidated()) + { sp_public_t *pub = NULL; GetPublicByIndex(index, &pub); if (pub) { - pFunc->Set(pub->code_offs, this, pub->funcid); - } else { + pFunc->Set(pub->code_offs, this, pub->funcid, index); + } + else + { pFunc = NULL; } } diff --git a/core/vm/sp_vm_basecontext.h b/core/vm/sp_vm_basecontext.h index ce399fd6..9df690b2 100644 --- a/core/vm/sp_vm_basecontext.h +++ b/core/vm/sp_vm_basecontext.h @@ -39,6 +39,8 @@ * :TODO: Make functions allocate as a lump instead of individual allocations! */ +extern IProfiler *sm_profiler; + namespace SourcePawn { class BaseContext : diff --git a/core/vm/sp_vm_function.cpp b/core/vm/sp_vm_function.cpp index bb0b1b08..30615034 100644 --- a/core/vm/sp_vm_function.cpp +++ b/core/vm/sp_vm_function.cpp @@ -32,12 +32,13 @@ #include <stdio.h> #include <string.h> #include "sp_vm_function.h" +#include "sm_stringutil.h" /******************** * FUNCTION CALLING * ********************/ -void CFunction::Set(uint32_t code_addr, IPluginContext *plugin, funcid_t id) +void CFunction::Set(uint32_t code_addr, IPluginContext *plugin, funcid_t id, uint32_t pub_id) { m_codeaddr = code_addr; m_pContext = plugin; @@ -46,6 +47,8 @@ void CFunction::Set(uint32_t code_addr, IPluginContext *plugin, funcid_t id) m_Invalid = false; m_pCtx = plugin ? plugin->GetContext() : NULL; m_FnId = id; + + m_pContext->GetPublicByIndex(pub_id, &m_pPublic); } bool CFunction::IsRunnable() @@ -55,17 +58,33 @@ bool CFunction::IsRunnable() int CFunction::CallFunction(const cell_t *params, unsigned int num_params, cell_t *result) { + int ir, serial; + if (!IsRunnable()) { return SP_ERROR_NOT_RUNNABLE; } + if ((m_pCtx->prof_flags & SP_PROF_CALLBACKS) == SP_PROF_CALLBACKS + && m_pPublic != NULL) + { + serial = m_pCtx->profiler->OnCallbackBegin(m_pContext, m_pPublic); + } + while (num_params--) { m_pContext->PushCell(params[num_params]); } - return m_pContext->Execute(m_codeaddr, result); + ir = m_pContext->Execute(m_codeaddr, result); + + if ((m_pCtx->prof_flags & SP_PROF_CALLBACKS) == SP_PROF_CALLBACKS + && m_pPublic != NULL) + { + m_pCtx->profiler->OnCallbackEnd(serial); + } + + return ir; } IPluginContext *CFunction::GetParentContext() @@ -73,7 +92,7 @@ IPluginContext *CFunction::GetParentContext() return m_pContext; } -CFunction::CFunction(uint32_t code_addr, IPluginContext *plugin, funcid_t id) : +CFunction::CFunction(uint32_t code_addr, IPluginContext *plugin, funcid_t id, uint32_t pub_id) : m_codeaddr(code_addr), m_pContext(plugin), m_curparam(0), m_errorstate(SP_ERROR_NONE), m_FnId(id) { @@ -82,6 +101,7 @@ CFunction::CFunction(uint32_t code_addr, IPluginContext *plugin, funcid_t id) : { m_pCtx = plugin->GetContext(); } + m_pContext->GetPublicByIndex(pub_id, &m_pPublic); } int CFunction::PushCell(cell_t cell) @@ -319,3 +339,4 @@ funcid_t CFunction::GetFunctionID() { return m_FnId; } + diff --git a/core/vm/sp_vm_function.h b/core/vm/sp_vm_function.h index f1bf210b..e19417b0 100644 --- a/core/vm/sp_vm_function.h +++ b/core/vm/sp_vm_function.h @@ -55,7 +55,10 @@ class CFunction : public IPluginFunction { friend class SourcePawnEngine; public: - CFunction(uint32_t code_addr, IPluginContext *pContext, funcid_t fnid); + CFunction(uint32_t code_addr, + IPluginContext *pContext, + funcid_t fnid, + uint32_t pub_id); public: virtual int PushCell(cell_t cell); virtual int PushCellByRef(cell_t *cell, int flags); @@ -79,7 +82,7 @@ public: bool IsRunnable(); funcid_t GetFunctionID(); public: - void Set(uint32_t code_addr, IPluginContext *plugin, funcid_t fnid); + void Set(uint32_t code_addr, IPluginContext *plugin, funcid_t fnid, uint32_t pub_id); private: int _PushString(const char *string, int sz_flags, int cp_flags, size_t len); inline int SetError(int err) @@ -98,6 +101,7 @@ private: CFunction *m_pNext; bool m_Invalid; funcid_t m_FnId; + sp_public_t *m_pPublic; }; #endif //_INCLUDE_SOURCEMOD_BASEFUNCTION_H_ diff --git a/public/sourcepawn/sp_vm_api.h b/public/sourcepawn/sp_vm_api.h index 7920188b..b0f4b917 100644 --- a/public/sourcepawn/sp_vm_api.h +++ b/public/sourcepawn/sp_vm_api.h @@ -41,10 +41,10 @@ #include "sp_vm_types.h" /** SourcePawn Engine API Version */ -#define SOURCEPAWN_ENGINE_API_VERSION 2 +#define SOURCEPAWN_ENGINE_API_VERSION 3 /** SourcePawn VM API Version */ -#define SOURCEPAWN_VM_API_VERSION 5 +#define SOURCEPAWN_VM_API_VERSION 6 #if !defined SOURCEMOD_BUILD #define SOURCEMOD_BUILD @@ -688,6 +688,63 @@ namespace SourcePawn virtual void OnContextExecuteError(IPluginContext *ctx, IContextTrace *error) =0; }; + /** + * @brief Represents a code profiler for plugins. + */ + class IProfiler + { + public: + /** + * @brief Invoked by the JIT to notify that a native is being started. + * + * @param pContext Plugin context. + * @param native Native information. + */ + virtual void OnNativeBegin(IPluginContext *pContext, sp_native_t *native) =0; + + /** + * @brief Invoked by the JIT to notify that the last native on the stack + * is no longer being executed. + */ + virtual void OnNativeEnd() =0; + + /** + * @brief Invoked by the JIT to notify that a function call is starting. + * + * @param pContext Plugin context. + * @param name Function name, or NULL if not known. + * @param code_addr P-Code address. + */ + virtual void OnFunctionBegin(IPluginContext *pContext, const char *name) =0; + + /** + * @brief Invoked by the JIT to notify that the last function call has + * concluded. In the case of an error inside a function, this will not + * be called. Instead, the VM will call OnCallbackEnd() and the profiler + * stack must be unwound. + */ + virtual void OnFunctionEnd() =0; + + /** + * @brief Invoked by the VM to notify that a forward/callback is starting. + * + * @param pContext Plugin context. + * @param pubfunc Public function information. + * @return Unique number to pass to OnFunctionEnd(). + */ + virtual int OnCallbackBegin(IPluginContext *pContext, sp_public_t *pubfunc) =0; + + /** + * @brief Invoked by the JIT to notify that a callback has ended. + * + * As noted in OnFunctionEnd(), this my be called with a misaligned + * profiler stack. To correct this, the stack should be unwound + * (discarding data as appropriate) to a matching serial number. + * + * @param serial Unique number from OnCallbackBegin(). + */ + virtual void OnCallbackEnd(int serial) =0; + }; /** * @brief Contains helper functions used by VMs and the host app diff --git a/public/sourcepawn/sp_vm_types.h b/public/sourcepawn/sp_vm_types.h index a64efeaa..4b348a86 100644 --- a/public/sourcepawn/sp_vm_types.h +++ b/public/sourcepawn/sp_vm_types.h @@ -47,6 +47,13 @@ typedef uint32_t funcid_t; /**< Function index code */ #define SP_MAX_EXEC_PARAMS 32 /**< Maximum number of parameters in a function */ +#define SP_JITCONF_DEBUG "debug" /**< Configuration option for debugging. */ +#define SP_JITCONF_PROFILE "profile" /**< Configuration option for profiling. */ + +#define SP_PROF_NATIVES (1<<0) /**< Profile natives. */ +#define SP_PROF_CALLBACKS (1<<1) /**< Profile callbacks. */ +#define SP_PROF_FUNCTIONS (1<<2) /**< Profile functions. */ + /** * @brief Error codes for SourcePawn routines. */ @@ -139,6 +146,7 @@ namespace SourcePawn { class IPluginContext; class IVirtualMachine; + class IProfiler; }; struct sp_context_s; @@ -285,6 +293,8 @@ typedef struct sp_context_s sp_debug_file_t *files; /**< Files */ sp_debug_line_t *lines; /**< Lines */ sp_debug_symbol_t *symbols; /**< Symbols */ + SourcePawn::IProfiler *profiler; /**< Pointer to IProfiler */ + uint32_t prof_flags; /**< Profiling flags */ } sp_context_t; #endif //_INCLUDE_SOURCEPAWN_VM_TYPES_H diff --git a/sourcepawn/jit/x86/dll_exports.cpp b/sourcepawn/jit/x86/dll_exports.cpp index f5f4c552..c69666c1 100644 --- a/sourcepawn/jit/x86/dll_exports.cpp +++ b/sourcepawn/jit/x86/dll_exports.cpp @@ -25,7 +25,7 @@ EXPORTFUNC int GiveEnginePointer2(SourcePawn::ISourcePawnEngine *engine_p, unsig { engine = engine_p; - if (api_version > SOURCEPAWN_ENGINE_API_VERSION) + if (api_version > SOURCEPAWN_ENGINE_API_VERSION || api_version < 2) { return SP_ERROR_PARAM; } diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 05e48271..6f3d5138 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -1278,12 +1278,95 @@ inline void WriteOp_Retn(JitWriter *jit) IA32_Return(jit); } +void ProfCallGate_Begin(sp_context_t *ctx, const char *name) +{ + ctx->profiler->OnFunctionBegin(ctx->context, name); +} + +void ProfCallGate_End(sp_context_t *ctx) +{ + ctx->profiler->OnFunctionEnd(); +} + +const char *find_func_name(sp_plugin_t *plugin, uint32_t offs) +{ + uint32_t max, iter; + sp_fdbg_symbol_t *sym; + sp_fdbg_arraydim_t *arr; + uint8_t *cursor = (uint8_t *)(plugin->debug.symbols); + + max = plugin->debug.syms_num; + for (iter = 0; iter < max; iter++) + { + sym = (sp_fdbg_symbol_t *)cursor; + + if (sym->ident == SP_SYM_FUNCTION + && sym->codestart <= offs + && sym->codeend > offs) + { + return plugin->debug.stringbase + sym->name; + } + + if (sym->dimcount > 0) + { + cursor += sizeof(sp_fdbg_symbol_t); + arr = (sp_fdbg_arraydim_t *)cursor; + cursor += sizeof(sp_fdbg_arraydim_t) * sym->dimcount; + continue; + } + + cursor += sizeof(sp_fdbg_symbol_t); + } + + return NULL; +} + inline void WriteOp_Call(JitWriter *jit) { - cell_t offs = jit->read_cell(); + cell_t offs; + jitoffs_t jmp; + CompData *data; + + data = (CompData *)jit->data; + offs = jit->read_cell(); - jitoffs_t jmp = IA32_Call_Imm32(jit, 0); - IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false)); + if ((data->profile & SP_PROF_FUNCTIONS) == SP_PROF_FUNCTIONS) + { + const char *name; + + /* Find the function name */ + if ((name = find_func_name(data->plugin, offs)) == NULL) + { + name = "unknown"; + } + + //push name + //push [esi+context] + //call ProfCallGate_Begin + //add esp, 8 + IA32_Push_Imm32(jit, (jit_int32_t)(intptr_t)name); + IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT); + jmp = IA32_Call_Imm32(jit, 0); + IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_Begin); + IA32_Add_Rm_Imm8(jit, REG_ESP, 8, MOD_REG); + + //call <addr> + jmp = IA32_Call_Imm32(jit, 0); + IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false)); + + //push [esi+context] + //call ProfCallGate_End + //add esp, 4 + IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT); + jmp = IA32_Call_Imm32(jit, 0); + IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_End); + IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG); + } + else + { + jmp = IA32_Call_Imm32(jit, 0); + IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false)); + } } inline void WriteOp_Bounds(JitWriter *jit) @@ -1653,9 +1736,25 @@ inline void WriteOp_Sysreq_N(JitWriter *jit) jitoffs_t call = IA32_Call_Imm32(jit, 0); if (!data->debug) { - IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback); - } else { - IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback_Debug); + if ((data->profile & SP_PROF_NATIVES) == SP_PROF_NATIVES) + { + IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback_Profile); + } + else + { + IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback); + } + } + else + { + if ((data->profile & SP_PROF_NATIVES) == SP_PROF_NATIVES) + { + IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback_Debug_Profile); + } + else + { + IA32_Write_Jump32_Abs(jit, call, (void *)NativeCallback_Debug); + } } /* check for errors */ @@ -2122,7 +2221,9 @@ inline void WriteOp_FloatCompare(JitWriter *jit) cell_t NativeCallback(sp_context_t *ctx, ucell_t native_idx, cell_t *params) { - sp_native_t *native = &ctx->natives[native_idx]; + sp_native_t *native; + + native = &ctx->natives[native_idx]; ctx->n_idx = native_idx; @@ -2136,12 +2237,27 @@ cell_t NativeCallback(sp_context_t *ctx, ucell_t native_idx, cell_t *params) return native->pfn(ctx->context, params); } -static cell_t InvalidNative(IPluginContext *pCtx, const cell_t *params) +cell_t NativeCallback_Profile(sp_context_t *ctx, ucell_t native_idx, cell_t *params) { - sp_context_t *ctx = pCtx->GetContext(); - ctx->n_err = SP_ERROR_INVALID_NATIVE; + cell_t val; + sp_native_t *native; - return 0; + native = &ctx->natives[native_idx]; + + ctx->n_idx = native_idx; + + /* Technically both aren't needed, I guess */ + if (native->status == SP_NATIVE_UNBOUND) + { + ctx->n_err = SP_ERROR_INVALID_NATIVE; + return 0; + } + + ctx->profiler->OnNativeBegin(ctx->context, native); + val = native->pfn(ctx->context, params); + ctx->profiler->OnNativeEnd(); + + return val; } cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *params) @@ -2170,7 +2286,7 @@ cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *param } cell_t result = NativeCallback(ctx, native_idx, params); - + if (ctx->n_err != SP_ERROR_NONE) { return result; @@ -2180,7 +2296,9 @@ cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *param { ctx->n_err = SP_ERROR_STACKLEAK; return result; - } else if (save_hp != ctx->hp) { + } + else if (save_hp != ctx->hp) + { ctx->n_err = SP_ERROR_HEAPLEAK; return result; } @@ -2188,6 +2306,60 @@ cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *param return result; } +cell_t NativeCallback_Debug_Profile(sp_context_t *ctx, ucell_t native_idx, cell_t *params) +{ + cell_t save_sp = ctx->sp; + cell_t save_hp = ctx->hp; + + ctx->n_idx = native_idx; + + if (ctx->hp < ctx->heap_base) + { + ctx->n_err = SP_ERROR_HEAPMIN; + return 0; + } + + if (ctx->hp + STACK_MARGIN > ctx->sp) + { + ctx->n_err = SP_ERROR_STACKLOW; + return 0; + } + + if ((uint32_t)ctx->sp >= ctx->mem_size) + { + ctx->n_err = SP_ERROR_STACKMIN; + return 0; + } + + cell_t result = NativeCallback_Profile(ctx, native_idx, params); + + if (ctx->n_err != SP_ERROR_NONE) + { + return result; + } + + if (save_sp != ctx->sp) + { + ctx->n_err = SP_ERROR_STACKLEAK; + return result; + } + else if (save_hp != ctx->hp) + { + ctx->n_err = SP_ERROR_HEAPLEAK; + return result; + } + + return result; +} + +static cell_t InvalidNative(IPluginContext *pCtx, const cell_t *params) +{ + sp_context_t *ctx = pCtx->GetContext(); + ctx->n_err = SP_ERROR_INVALID_NATIVE; + + return 0; +} + jitoffs_t RelocLookup(JitWriter *jit, cell_t pcode_offs, bool relative) { if (jit->outptr) @@ -2204,7 +2376,9 @@ jitoffs_t RelocLookup(JitWriter *jit, cell_t pcode_offs, bool relative) assert(pcode_offs >= 0 && (uint32_t)pcode_offs <= data->codesize); /* Do the lookup in the native dictionary. */ return *(jitoffs_t *)(data->rebase + pcode_offs); - } else { + } + else + { return 0; } } @@ -2423,6 +2597,7 @@ jit_rewind: ctx->heap_base = plugin->data_size; ctx->hp = ctx->heap_base; ctx->sp = ctx->mem_size - sizeof(cell_t); + ctx->prof_flags = data->profile; const char *strbase = plugin->info.stringbase; uint32_t max, iter; @@ -2726,7 +2901,7 @@ bool JITX86::SetCompilationOption(ICompilation *co, const char *key, const char { CompData *data = (CompData *)co; - if (strcmp(key, "debug") == 0) + if (strcmp(key, SP_JITCONF_DEBUG) == 0) { if ((atoi(val) == 1) || !strcmp(val, "yes")) { @@ -2741,6 +2916,18 @@ bool JITX86::SetCompilationOption(ICompilation *co, const char *key, const char } return true; } + else if (strcmp(key, SP_JITCONF_PROFILE) == 0) + { + data->profile = atoi(val); + + /** Callbacks must be profiled to profile functions! */ + if ((data->profile & SP_PROF_FUNCTIONS) == SP_PROF_FUNCTIONS) + { + data->profile |= SP_PROF_CALLBACKS; + } + + return true; + } return false; } diff --git a/sourcepawn/jit/x86/jit_x86.h b/sourcepawn/jit/x86/jit_x86.h index 1bdc1311..a1d9dc0b 100644 --- a/sourcepawn/jit/x86/jit_x86.h +++ b/sourcepawn/jit/x86/jit_x86.h @@ -67,13 +67,14 @@ class CompData : public ICompilation { public: CompData() : plugin(NULL), - debug(false), inline_level(0), rebase(NULL), + debug(false), profile(0), inline_level(0), rebase(NULL), error_set(SP_ERROR_NONE), func_idx(0) { }; public: sp_plugin_t *plugin; /* plugin handle */ bool debug; /* whether to compile debug mode */ + int profile; /* profiling flags */ int inline_level; /* inline optimization level */ jitcode_t rebase; /* relocation map */ int error_set; /* error code to halt process */ @@ -121,6 +122,8 @@ public: cell_t NativeCallback(sp_context_t *ctx, ucell_t native_idx, cell_t *params); cell_t NativeCallback_Debug(sp_context_t *ctx, ucell_t native_idx, cell_t *params); +cell_t NativeCallback_Debug_Profile(sp_context_t *ctx, ucell_t native_idx, cell_t *params); +cell_t NativeCallback_Profile(sp_context_t *ctx, ucell_t native_idx, cell_t *params); jitoffs_t RelocLookup(JitWriter *jit, cell_t pcode_offs, bool relative=false); #define AMX_REG_PRI REG_EAX diff --git a/tools/profiler/csharp/Comparators.cs b/tools/profiler/csharp/Comparators.cs new file mode 100644 index 00000000..301aa70b --- /dev/null +++ b/tools/profiler/csharp/Comparators.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Text; +using System.Windows.Forms; + +namespace profviewer +{ + class LIStringComparator : IComparer + { + private int m_col; + + public LIStringComparator(int col) + { + m_col = col; + } + + public int Compare(object x, object y) + { + ListViewItem a = (ListViewItem)x; + ListViewItem b = (ListViewItem)y; + + return String.Compare(a.SubItems[m_col].Text, b.SubItems[m_col].Text); + } + } + + class LIIntComparator : IComparer + { + private int m_col; + + public LIIntComparator(int col) + { + m_col = col; + } + + public int Compare(object x, object y) + { + ListViewItem a = (ListViewItem)x; + ListViewItem b = (ListViewItem)y; + + int num1 = Int32.Parse(a.SubItems[m_col].Text); + int num2 = Int32.Parse(b.SubItems[m_col].Text); + + if (num1 > num2) + { + return -1; + } + else if (num1 < num2) + { + return 1; + } + + return 0; + } + } + + class LIDoubleComparator : IComparer + { + private int m_col; + + public LIDoubleComparator(int col) + { + m_col = col; + } + + public int Compare(object x, object y) + { + ListViewItem a = (ListViewItem)x; + ListViewItem b = (ListViewItem)y; + + double num1 = Double.Parse(a.SubItems[m_col].Text); + double num2 = Double.Parse(b.SubItems[m_col].Text); + + if (num1 > num2) + { + return -1; + } + else if (num1 < num2) + { + return 1; + } + + return 0; + } + } +} diff --git a/tools/profiler/csharp/Form1.Designer.cs b/tools/profiler/csharp/Form1.Designer.cs new file mode 100644 index 00000000..8b2cdd04 --- /dev/null +++ b/tools/profiler/csharp/Form1.Designer.cs @@ -0,0 +1,244 @@ +namespace profviewer +{ + partial class Main + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.report_list = new System.Windows.Forms.ListView(); + this.pr_type = new System.Windows.Forms.ColumnHeader(); + this.pr_name = new System.Windows.Forms.ColumnHeader(); + this.pr_calls = new System.Windows.Forms.ColumnHeader(); + this.pr_avg_time = new System.Windows.Forms.ColumnHeader(); + this.pr_min_time = new System.Windows.Forms.ColumnHeader(); + this.pr_max_time = new System.Windows.Forms.ColumnHeader(); + this.pr_total_time = new System.Windows.Forms.ColumnHeader(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menu_file_open = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.menu_file_exit = new System.Windows.Forms.ToolStripMenuItem(); + this.label1 = new System.Windows.Forms.Label(); + this.report_info_starttime = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.report_info_duration = new System.Windows.Forms.Label(); + this.dialog_open = new System.Windows.Forms.OpenFileDialog(); + this.panel1 = new System.Windows.Forms.Panel(); + this.menuStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // report_list + // + this.report_list.AllowColumnReorder = true; + this.report_list.AutoArrange = false; + this.report_list.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.pr_type, + this.pr_name, + this.pr_calls, + this.pr_avg_time, + this.pr_min_time, + this.pr_max_time, + this.pr_total_time}); + this.report_list.Dock = System.Windows.Forms.DockStyle.Fill; + this.report_list.Location = new System.Drawing.Point(0, 24); + this.report_list.MultiSelect = false; + this.report_list.Name = "report_list"; + this.report_list.Size = new System.Drawing.Size(759, 300); + this.report_list.TabIndex = 0; + this.report_list.UseCompatibleStateImageBehavior = false; + this.report_list.View = System.Windows.Forms.View.Details; + this.report_list.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.report_list_ColumnClick); + // + // pr_type + // + this.pr_type.Text = "Type"; + this.pr_type.Width = 71; + // + // pr_name + // + this.pr_name.Text = "Name"; + this.pr_name.Width = 270; + // + // pr_calls + // + this.pr_calls.Text = "Calls"; + this.pr_calls.Width = 61; + // + // pr_avg_time + // + this.pr_avg_time.Text = "Avg Time"; + this.pr_avg_time.Width = 74; + // + // pr_min_time + // + this.pr_min_time.Text = "Min Time"; + this.pr_min_time.Width = 78; + // + // pr_max_time + // + this.pr_max_time.Text = "Max Time"; + this.pr_max_time.Width = 77; + // + // pr_total_time + // + this.pr_total_time.Text = "Total Time"; + this.pr_total_time.Width = 84; + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(759, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menu_file_open, + this.toolStripMenuItem1, + this.menu_file_exit}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // menu_file_open + // + this.menu_file_open.Name = "menu_file_open"; + this.menu_file_open.Size = new System.Drawing.Size(100, 22); + this.menu_file_open.Text = "&Open"; + this.menu_file_open.Click += new System.EventHandler(this.menu_file_open_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(97, 6); + // + // menu_file_exit + // + this.menu_file_exit.Name = "menu_file_exit"; + this.menu_file_exit.Size = new System.Drawing.Size(100, 22); + this.menu_file_exit.Text = "E&xit"; + this.menu_file_exit.Click += new System.EventHandler(this.menu_file_exit_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(76, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Profile Started:"; + // + // report_info_starttime + // + this.report_info_starttime.AutoSize = true; + this.report_info_starttime.Location = new System.Drawing.Point(79, 13); + this.report_info_starttime.Name = "report_info_starttime"; + this.report_info_starttime.Size = new System.Drawing.Size(0, 13); + this.report_info_starttime.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(264, 13); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(82, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Profile Duration:"; + // + // report_info_duration + // + this.report_info_duration.AutoSize = true; + this.report_info_duration.Location = new System.Drawing.Point(346, 13); + this.report_info_duration.Name = "report_info_duration"; + this.report_info_duration.Size = new System.Drawing.Size(0, 13); + this.report_info_duration.TabIndex = 5; + // + // dialog_open + // + this.dialog_open.FileName = "openFileDialog1"; + this.dialog_open.Filter = "Profiler files|*.xml|All files|*.*"; + // + // panel1 + // + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.report_info_duration); + this.panel1.Controls.Add(this.report_info_starttime); + this.panel1.Controls.Add(this.label2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 324); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(759, 33); + this.panel1.TabIndex = 6; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(759, 357); + this.Controls.Add(this.report_list); + this.Controls.Add(this.menuStrip1); + this.Controls.Add(this.panel1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Main"; + this.Text = "SourceMod Profiler Report Viewer"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView report_list; + private System.Windows.Forms.ColumnHeader pr_type; + private System.Windows.Forms.ColumnHeader pr_name; + private System.Windows.Forms.ColumnHeader pr_calls; + private System.Windows.Forms.ColumnHeader pr_avg_time; + private System.Windows.Forms.ColumnHeader pr_min_time; + private System.Windows.Forms.ColumnHeader pr_max_time; + private System.Windows.Forms.ColumnHeader pr_total_time; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem menu_file_open; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem menu_file_exit; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label report_info_starttime; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label report_info_duration; + private System.Windows.Forms.OpenFileDialog dialog_open; + private System.Windows.Forms.Panel panel1; + } +} + diff --git a/tools/profiler/csharp/Form1.cs b/tools/profiler/csharp/Form1.cs new file mode 100644 index 00000000..d6af181e --- /dev/null +++ b/tools/profiler/csharp/Form1.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace profviewer +{ + public partial class Main : Form + { + private ProfileReport m_Report; + + public Main() + { + InitializeComponent(); + } + + private void menu_file_open_Click(object sender, EventArgs e) + { + DialogResult res; + + res = dialog_open.ShowDialog(this); + + if (res != DialogResult.OK) + { + return; + } + + m_Report = null; + + try + { + m_Report = new ProfileReport(dialog_open.FileName); + } + catch (System.Exception ex) + { + MessageBox.Show("Error opening or parsing file: " + ex.Message); + } + + UpdateListView(); + } + + private void UpdateListView() + { + ProfileItem atom; + ListViewItem item; + + if (m_Report == null) + { + report_list.Items.Clear(); + report_info_duration.Text = ""; + report_info_starttime.Text = ""; + return; + } + + report_info_duration.Text = m_Report.Duration.ToString() + " seconds"; + report_info_starttime.Text = m_Report.StartTime.ToString(); + + for (int i = 0; i < m_Report.Count; i++) + { + atom = m_Report.GetItem(i); + item = new ListViewItem(ProfileReport.TypeStrings[(int)atom.type]); + + item.SubItems.Add(atom.name); + item.SubItems.Add(atom.num_calls.ToString()); + item.SubItems.Add(atom.AverageTime.ToString("F6")); + item.SubItems.Add(atom.min_time.ToString("F6")); + item.SubItems.Add(atom.max_time.ToString("F6")); + item.SubItems.Add(atom.total_time.ToString("F6")); + + report_list.Items.Add(item); + } + } + + private void menu_file_exit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void report_list_ColumnClick(object sender, ColumnClickEventArgs e) + { + if (e.Column == 1) + { + report_list.ListViewItemSorter = new LIStringComparator(1); + } + else if (e.Column == 2) + { + report_list.ListViewItemSorter = new LIIntComparator(2); + } + else if (e.Column > 2) + { + report_list.ListViewItemSorter = new LIDoubleComparator(e.Column); + } + } + } +} \ No newline at end of file diff --git a/tools/profiler/csharp/Form1.resx b/tools/profiler/csharp/Form1.resx new file mode 100644 index 00000000..e0c7795c --- /dev/null +++ b/tools/profiler/csharp/Form1.resx @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="dialog_open.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>126, 17</value> + </metadata> +</root> \ No newline at end of file diff --git a/tools/profiler/csharp/ProfReport.cs b/tools/profiler/csharp/ProfReport.cs new file mode 100644 index 00000000..88073834 --- /dev/null +++ b/tools/profiler/csharp/ProfReport.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; + +namespace profviewer +{ + enum ProfileType : int + { + ProfType_Unknown = 0, + ProfType_Native, + ProfType_Callback, + ProfType_Function + } + + class ProfileItem + { + public string name; + public double total_time; + public uint num_calls; + public double min_time; + public double max_time; + public ProfileType type; + + public double AverageTime + { + get + { + return total_time / num_calls; + } + } + } + + class ProfileReport + { + public static string[] TypeStrings; + private DateTime m_start_time; + private double m_duration; + private List<ProfileItem> m_Items; + + public int Count + { + get + { + return m_Items.Count; + } + } + + static ProfileReport() + { + TypeStrings = new string[4]; + + TypeStrings[0] = "unknown"; + TypeStrings[1] = "native"; + TypeStrings[2] = "callback"; + TypeStrings[3] = "function"; + } + + public ProfileReport(string file) + { + bool in_profile; + ProfileType type; + string cur_report; + XmlTextReader xml; + + xml = new XmlTextReader(file); + xml.WhitespaceHandling = WhitespaceHandling.None; + + m_Items = new List<ProfileItem>(); + + type = ProfileType.ProfType_Unknown; + in_profile = false; + cur_report = null; + while (xml.Read()) + { + if (xml.NodeType == XmlNodeType.Element) + { + if (xml.Name.CompareTo("profile") == 0) + { + in_profile = true; + m_duration = Double.Parse(xml.GetAttribute("uptime")); + m_start_time = new DateTime(1970, 1, 1, 0, 0, 0); + m_start_time.AddSeconds(Int32.Parse(xml.GetAttribute("time"))); + } + else if (in_profile) + { + if (xml.Name.CompareTo("report") == 0) + { + cur_report = xml.GetAttribute("name"); + if (cur_report.CompareTo("natives") == 0) + { + type = ProfileType.ProfType_Native; + } + else if (cur_report.CompareTo("callbacks") == 0) + { + type = ProfileType.ProfType_Callback; + } + else if (cur_report.CompareTo("functions") == 0) + { + type = ProfileType.ProfType_Function; + } + else + { + type = ProfileType.ProfType_Unknown; + } + } + else if (xml.Name.CompareTo("item") == 0 && cur_report != null) + { + ProfileItem item; + + item = new ProfileItem(); + item.name = xml.GetAttribute("name"); + item.max_time = Double.Parse(xml.GetAttribute("maxtime")); + item.min_time = Double.Parse(xml.GetAttribute("mintime")); + item.num_calls = UInt32.Parse(xml.GetAttribute("numcalls")); + item.total_time = Double.Parse(xml.GetAttribute("totaltime")); + item.type = type; + m_Items.Add(item); + } + } + } + else if (xml.NodeType == XmlNodeType.EndElement) + { + if (xml.Name.CompareTo("profile") == 0) + { + break; + } + else if (xml.Name.CompareTo("report") == 0) + { + cur_report = null; + } + } + } + } + + public double Duration + { + get + { + return m_duration; + } + } + + public DateTime StartTime + { + get + { + return m_start_time; + } + } + + public ProfileItem GetItem(int i) + { + return m_Items[i]; + } + } +} diff --git a/tools/profiler/csharp/Program.cs b/tools/profiler/csharp/Program.cs new file mode 100644 index 00000000..a14aa1ae --- /dev/null +++ b/tools/profiler/csharp/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace profviewer +{ + static class Program + { + /// <summary> + /// The main entry point for the application. + /// </summary> + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} \ No newline at end of file diff --git a/tools/profiler/csharp/profviewer.csproj b/tools/profiler/csharp/profviewer.csproj new file mode 100644 index 00000000..04f791cf --- /dev/null +++ b/tools/profiler/csharp/profviewer.csproj @@ -0,0 +1,80 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}</ProjectGuid> + <OutputType>WinExe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>profviewer</RootNamespace> + <AssemblyName>profviewer</AssemblyName> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Deployment" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Comparators.cs" /> + <Compile Include="Form1.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Form1.Designer.cs"> + <DependentUpon>Form1.cs</DependentUpon> + </Compile> + <Compile Include="ProfReport.cs" /> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <EmbeddedResource Include="Form1.resx"> + <SubType>Designer</SubType> + <DependentUpon>Form1.cs</DependentUpon> + </EmbeddedResource> + <EmbeddedResource Include="Properties\Resources.resx"> + <Generator>ResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.cs</LastGenOutput> + <SubType>Designer</SubType> + </EmbeddedResource> + <Compile Include="Properties\Resources.Designer.cs"> + <AutoGen>True</AutoGen> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <None Include="Properties\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <LastGenOutput>Settings.Designer.cs</LastGenOutput> + </None> + <Compile Include="Properties\Settings.Designer.cs"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/tools/profiler/csharp/profviewer.sln b/tools/profiler/csharp/profviewer.sln new file mode 100644 index 00000000..80e570af --- /dev/null +++ b/tools/profiler/csharp/profviewer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "profviewer", "profviewer.csproj", "{1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EE11F57-B933-4D06-B0E6-EAFB60ACAC73}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/profiler/php/ProfFileParser.class.php b/tools/profiler/php/ProfFileParser.class.php new file mode 100644 index 00000000..88b5d472 --- /dev/null +++ b/tools/profiler/php/ProfFileParser.class.php @@ -0,0 +1,73 @@ +<?php + +class ProfReport +{ + public $time; + public $uptime; + public $items = array(); +} + +class ProfReportParser +{ + private $report; + private $curtype; + public $last_error; + + public function Parse($file) + { + $this->report = FALSE; + $this->curtype = FALSE; + + if (($contents = file_get_contents($file)) === FALSE) + { + $this->last_error = 'File not found'; + return FALSE; + } + + $xml = xml_parser_create(); + xml_set_object($xml, $this); + xml_set_element_handler($xml, 'tag_open', 'tag_close'); + xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, false); + + if (!xml_parse($xml, $contents)) + { + $this->last_error = 'Line: ' . xml_get_current_line_number($xml) . ' -- ' . xml_error_string(xml_get_error_code($xml)); + return FALSE; + } + + return $this->report; + } + + public function tag_open($parser, $tag, $attrs) + { + if ($tag == 'profile') + { + $this->report = new ProfReport(); + $this->report->time = $attrs['time']; + $this->report->uptime = $attrs['uptime']; + } + else if ($tag == 'report') + { + $this->curtype = $attrs['name']; + } + else if ($tag == 'item') + { + if ($this->report === FALSE || $this->curtype === FALSE) + { + return; + } + $attrs['type'] = $this->curtype; + $this->report->items[] = $attrs; + } + } + + public function tag_close($parser, $tag) + { + if ($tag == 'report') + { + $this->curtype = FALSE; + } + } +} + +?> From 0d9f3fb417e54609d6936d35b696e93d522321bb Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 07:15:28 +0000 Subject: [PATCH 225/263] fixed dialog box in profviewer showing nonsense file name --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401915 --- tools/profiler/csharp/Form1.Designer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/profiler/csharp/Form1.Designer.cs b/tools/profiler/csharp/Form1.Designer.cs index 8b2cdd04..9453cd3d 100644 --- a/tools/profiler/csharp/Form1.Designer.cs +++ b/tools/profiler/csharp/Form1.Designer.cs @@ -183,7 +183,6 @@ namespace profviewer // // dialog_open // - this.dialog_open.FileName = "openFileDialog1"; this.dialog_open.Filter = "Profiler files|*.xml|All files|*.*"; // // panel1 From c6dd96e2018c07174e41d5263149e7e02f03b7c2 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 07:28:24 +0000 Subject: [PATCH 226/263] fixed a bug with start time display --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401916 --- tools/profiler/csharp/ProfReport.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/profiler/csharp/ProfReport.cs b/tools/profiler/csharp/ProfReport.cs index 88073834..580e2094 100644 --- a/tools/profiler/csharp/ProfReport.cs +++ b/tools/profiler/csharp/ProfReport.cs @@ -77,10 +77,12 @@ namespace profviewer { if (xml.Name.CompareTo("profile") == 0) { + int t; in_profile = true; m_duration = Double.Parse(xml.GetAttribute("uptime")); m_start_time = new DateTime(1970, 1, 1, 0, 0, 0); - m_start_time.AddSeconds(Int32.Parse(xml.GetAttribute("time"))); + t = Int32.Parse(xml.GetAttribute("time")); + m_start_time = m_start_time.AddSeconds(t); } else if (in_profile) { From b3c7d4803ffe9fd76acf5ee26d27cd90ea8fad25 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 08:10:34 +0000 Subject: [PATCH 227/263] fixed linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401917 --- core/Makefile | 2 +- core/Profiler.cpp | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/Makefile b/core/Makefile index 5b4e3447..a49dc222 100644 --- a/core/Makefile +++ b/core/Makefile @@ -23,7 +23,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC sm_autonatives.cpp sm_memtable.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \ sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \ MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \ - frame_hooks.cpp concmd_cleaner.cpp + frame_hooks.cpp concmd_cleaner.cpp Profiler.cpp OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \ smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \ diff --git a/core/Profiler.cpp b/core/Profiler.cpp index 7f119144..b69341da 100644 --- a/core/Profiler.cpp +++ b/core/Profiler.cpp @@ -33,6 +33,10 @@ #include "PluginSys.h" #include "sm_stringutil.h" #include "Logger.h" +#if defined PLATFORM_POSIX +#include <sys/time.h> +#include <time.h> +#endif ProfileEngine g_Profiler; IProfiler *sm_profiler = &g_Profiler; @@ -123,14 +127,14 @@ inline double DiffProfPoints(const prof_point_t &start, const prof_point_t &end) #elif defined PLATFORM_POSIX seconds = (double)(end.value.tv_sec - start.value.tv_sec); - if (start.value.tv_usec > after.value.tv_usec) + if (start.value.tv_usec > end.value.tv_usec) { - seconds - 1.0; - seconds += (double)(1000000 - (before.value.tv_usec - after.tv_usec)) / 1000000.0; + seconds -= 1.0; + seconds += (double)(1000000 - (start.value.tv_usec - end.value.tv_usec)) / 1000000.0; } else { - seconds += (double)(after.value.tv_usec - before.value.tv_usec) / 1000000.0; + seconds += (double)(end.value.tv_usec - start.value.tv_usec) / 1000000.0; } #endif From 31a745422d935e0cfd21ecff082d2e88587e2b1f Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 18:01:49 +0000 Subject: [PATCH 228/263] added amb1377 - binary sql functions --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401918 --- core/smn_database.cpp | 16 ++++++- extensions/mysql/mysql/MyDatabase.cpp | 31 +++++++++++++ extensions/mysql/mysql/MyDatabase.h | 2 + extensions/sqlite/driver/SqDatabase.cpp | 61 +++++++++++++++++++++++-- extensions/sqlite/driver/SqDatabase.h | 3 ++ plugins/include/dbi.inc | 10 +++- public/IDBDriver.h | 28 +++++++++++- 7 files changed, 142 insertions(+), 9 deletions(-) diff --git a/core/smn_database.cpp b/core/smn_database.cpp index 34f30f5c..22f4b6a3 100644 --- a/core/smn_database.cpp +++ b/core/smn_database.cpp @@ -644,6 +644,11 @@ static cell_t SQL_FastQuery(IPluginContext *pContext, const cell_t *params) char *query; pContext->LocalToString(params[2], &query); + if (params[0] >= 3 && params[3] != -1) + { + return db->DoSimpleQueryEx(query, params[3]) ? 1 : 0; + } + return db->DoSimpleQuery(query) ? 1 : 0; } @@ -661,7 +666,16 @@ static cell_t SQL_Query(IPluginContext *pContext, const cell_t *params) char *query; pContext->LocalToString(params[2], &query); - IQuery *qr = db->DoQuery(query); + IQuery *qr; + + if (params[0] >= 3 && params[3] != -1) + { + qr = db->DoQueryEx(query, params[3]); + } + else + { + qr = db->DoQuery(query); + } if (!qr) { diff --git a/extensions/mysql/mysql/MyDatabase.cpp b/extensions/mysql/mysql/MyDatabase.cpp index d1c85bd7..b9f797a0 100644 --- a/extensions/mysql/mysql/MyDatabase.cpp +++ b/extensions/mysql/mysql/MyDatabase.cpp @@ -226,6 +226,37 @@ IQuery *MyDatabase::DoQuery(const char *query) return new MyQuery(this, res); } +bool MyDatabase::DoSimpleQueryEx(const char *query, size_t len) +{ + IQuery *pQuery = DoQueryEx(query, len); + if (!pQuery) + { + return false; + } + pQuery->Destroy(); + return true; +} + +IQuery *MyDatabase::DoQueryEx(const char *query, size_t len) +{ + if (mysql_real_query(m_mysql, query, len) != 0) + { + return NULL; + } + + MYSQL_RES *res = NULL; + if (mysql_field_count(m_mysql)) + { + res = mysql_store_result(m_mysql); + if (!res) + { + return NULL; + } + } + + return new MyQuery(this, res); +} + IPreparedQuery *MyDatabase::PrepareQuery(const char *query, char *error, size_t maxlength, int *errCode) { MYSQL_STMT *stmt = mysql_stmt_init(m_mysql); diff --git a/extensions/mysql/mysql/MyDatabase.h b/extensions/mysql/mysql/MyDatabase.h index 57d4b8a0..14ba739e 100644 --- a/extensions/mysql/mysql/MyDatabase.h +++ b/extensions/mysql/mysql/MyDatabase.h @@ -58,6 +58,8 @@ public: //IDatabase void UnlockFromFullAtomicOperation(); void IncReferenceCount(); IDBDriver *GetDriver(); + bool DoSimpleQueryEx(const char *query, size_t len); + IQuery *DoQueryEx(const char *query, size_t len); public: const DatabaseInfo &GetInfo(); private: diff --git a/extensions/sqlite/driver/SqDatabase.cpp b/extensions/sqlite/driver/SqDatabase.cpp index 450eb1b0..a008aca1 100644 --- a/extensions/sqlite/driver/SqDatabase.cpp +++ b/extensions/sqlite/driver/SqDatabase.cpp @@ -160,7 +160,36 @@ IQuery *SqDatabase::DoQuery(const char *query) return pQuery; } -IPreparedQuery *SqDatabase::PrepareQuery(const char *query, char *error, size_t maxlength, int *errCode/* =NULL */) +bool SqDatabase::DoSimpleQueryEx(const char *query, size_t len) +{ + IQuery *pQuery = DoQueryEx(query, len); + if (!pQuery) + { + return false; + } + pQuery->Destroy(); + return true; +} + +IQuery *SqDatabase::DoQueryEx(const char *query, size_t len) +{ + IPreparedQuery *pQuery = PrepareQueryEx(query, len, NULL, 0, NULL); + if (!pQuery) + { + return NULL; + } + if (!pQuery->Execute()) + { + pQuery->Destroy(); + return NULL; + } + return pQuery; +} + +IPreparedQuery *SqDatabase::PrepareQuery(const char *query, + char *error, + size_t maxlength, + int *errCode/* =NULL */) { sqlite3_stmt *stmt = NULL; if ((m_LastErrorCode = sqlite3_prepare_v2(m_sq3, query, -1, &stmt, NULL)) != SQLITE_OK @@ -179,12 +208,34 @@ IPreparedQuery *SqDatabase::PrepareQuery(const char *query, char *error, size_t strncopy(error, msg, maxlength); } m_LastError.assign(msg); - #if 0 /* This didn't really seem like a good idea... */ - if (stmt) + return NULL; + } + return new SqQuery(this, stmt); +} + +IPreparedQuery *SqDatabase::PrepareQueryEx(const char *query, + size_t len, + char *error, + size_t maxlength, + int *errCode/* =NULL */) +{ + sqlite3_stmt *stmt = NULL; + if ((m_LastErrorCode = sqlite3_prepare_v2(m_sq3, query, len, &stmt, NULL)) != SQLITE_OK + || !stmt) + { + const char *msg; + if (m_LastErrorCode != SQLITE_OK) { - sqlite3_finalize(stmt); + msg = sqlite3_errmsg(m_sq3); + } else { + msg = "Invalid query string"; + m_LastErrorCode = SQLITE_ERROR; } - #endif + if (error) + { + strncopy(error, msg, maxlength); + } + m_LastError.assign(msg); return NULL; } return new SqQuery(this, stmt); diff --git a/extensions/sqlite/driver/SqDatabase.h b/extensions/sqlite/driver/SqDatabase.h index 63f96e9f..6044a3f0 100644 --- a/extensions/sqlite/driver/SqDatabase.h +++ b/extensions/sqlite/driver/SqDatabase.h @@ -46,6 +46,7 @@ public: bool DoSimpleQuery(const char *query); IQuery *DoQuery(const char *query); IPreparedQuery *PrepareQuery(const char *query, char *error, size_t maxlength, int *errCode=NULL); + IPreparedQuery *PrepareQueryEx(const char *query, size_t len, char *error, size_t maxlength, int *errCode=NULL); bool QuoteString(const char *str, char buffer[], size_t maxlen, size_t *newSize); unsigned int GetAffectedRows(); unsigned int GetInsertID(); @@ -53,6 +54,8 @@ public: void UnlockFromFullAtomicOperation(); void IncReferenceCount(); IDBDriver *GetDriver(); + bool DoSimpleQueryEx(const char *query, size_t len); + IQuery *DoQueryEx(const char *query, size_t len); public: sqlite3 *GetDb(); private: diff --git a/plugins/include/dbi.inc b/plugins/include/dbi.inc index cba44810..084b6d4e 100644 --- a/plugins/include/dbi.inc +++ b/plugins/include/dbi.inc @@ -277,11 +277,14 @@ stock bool:SQL_QuoteString(Handle:database, * * @param database A database Handle. * @param query Query string. + * @param len Optional parameter to specify the query length, in + * bytes. This can be used to send binary queries that + * have a premature terminator. * @return True if query succeeded, false otherwise. Use * SQL_GetError to find the last error. * @error Invalid database Handle. */ -native bool:SQL_FastQuery(Handle:database, const String:query[]); +native bool:SQL_FastQuery(Handle:database, const String:query[], len=-1); /** * Executes a simple query and returns a new query Handle for @@ -289,11 +292,14 @@ native bool:SQL_FastQuery(Handle:database, const String:query[]); * * @param database A database Handle. * @param query Query string. + * @param len Optional parameter to specify the query length, in + * bytes. This can be used to send binary queries that + * have a premature terminator. * @return A new Query Handle on success, INVALID_HANDLE * otherwise. The Handle must be freed with CloseHandle(). * @error Invalid database Handle. */ -native Handle:SQL_Query(Handle:database, const String:query[]); +native Handle:SQL_Query(Handle:database, const String:query[], len=-1); /** * Creates a new prepared statement query. Prepared statements can diff --git a/public/IDBDriver.h b/public/IDBDriver.h index d4e35268..71d9fe2d 100644 --- a/public/IDBDriver.h +++ b/public/IDBDriver.h @@ -42,7 +42,7 @@ */ #define SMINTERFACE_DBI_NAME "IDBI" -#define SMINTERFACE_DBI_VERSION 5 +#define SMINTERFACE_DBI_VERSION 6 namespace SourceMod { @@ -547,6 +547,32 @@ namespace SourceMod * This function is thread safe. */ virtual IDBDriver *GetDriver() =0; + + /** + * @brief Prepares and executes a binary query in one step, and discards + * any return data. + * + * This function is not thread safe and must be included in any locks. + * + * @param query Query string. + * @param length Length of query string. + * @return True on success, false otherwise. + */ + virtual bool DoSimpleQueryEx(const char *query, size_t len) =0; + + /** + * @brief Prepares and executes a binary query in one step, and returns + * the resultant data set. + * + * Note: If a query contains more than one result set, each + * result set must be processed before a new query is started. + * + * This function is not thread safe and must be included in any locks. + * + * @param query Query string. + * @return IQuery pointer on success, NULL otherwise. + */ + virtual IQuery *DoQueryEx(const char *query, size_t len) =0; }; /** From e6d37a3850ad00e012be561ae9a381115b128883 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 18:18:42 +0000 Subject: [PATCH 229/263] fixed a serious codegen bug where profiled internal functions in plugins could have their return values smashed. this only affected plugins being internally profiled --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401919 --- sourcepawn/jit/x86/jit_x86.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 6f3d5138..6103f3da 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -1351,16 +1351,20 @@ inline void WriteOp_Call(JitWriter *jit) IA32_Add_Rm_Imm8(jit, REG_ESP, 8, MOD_REG); //call <addr> + //push eax jmp = IA32_Call_Imm32(jit, 0); IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false)); + IA32_Push_Reg(jit, REG_EAX); //push [esi+context] //call ProfCallGate_End //add esp, 4 + //pop eax IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT); jmp = IA32_Call_Imm32(jit, 0); IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_End); IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG); + IA32_Pop_Reg(jit, REG_EAX); } else { From e0b4b8b9f635da0e6217fbc392217564bbd22ae6 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 19:08:27 +0000 Subject: [PATCH 230/263] added amb1497 - log hooking --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401920 --- core/Logger.cpp | 15 +++- core/Logger.h | 3 + core/smn_filesystem.cpp | 102 ++++++++++++++++++++++- plugins/include/logging.inc | 153 ++++++++++++++++++++++++++++++++++ plugins/include/sourcemod.inc | 91 ++------------------ 5 files changed, 274 insertions(+), 90 deletions(-) create mode 100644 plugins/include/logging.inc diff --git a/core/Logger.cpp b/core/Logger.cpp index 031e5d96..bd8cbe8f 100644 --- a/core/Logger.cpp +++ b/core/Logger.cpp @@ -434,7 +434,7 @@ void Logger::_PrintToGameLog(const char *fmt, va_list ap) msg[len++] = '\n'; msg[len] = '\0'; - engine->LogPrint(msg); + Engine_LogPrintWrapper(msg); } const char *Logger::GetLogFileName(LogType type) const @@ -505,3 +505,16 @@ void Logger::LogFatal(const char *msg, ...) } } +bool g_in_game_log_hook = false; + +void Engine_LogPrintWrapper(const char *msg) +{ + if (g_in_game_log_hook) + { + ENGINE_CALL(LogPrint)(msg); + } + else + { + engine->LogPrint(msg); + } +} diff --git a/core/Logger.h b/core/Logger.h index 0f6e22ed..fb643a2e 100644 --- a/core/Logger.h +++ b/core/Logger.h @@ -98,6 +98,9 @@ private: bool m_InitialState; }; +void Engine_LogPrintWrapper(const char *msg); + +extern bool g_in_game_log_hook; extern Logger g_Logger; #endif // _INCLUDE_SOURCEMOD_CLOGGER_H_ diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index 124371a4..08630af3 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -37,22 +37,40 @@ #include "Logger.h" #include "PluginSys.h" #include "sourcemm_api.h" +#include "ForwardSys.h" + +SH_DECL_HOOK1_void(IVEngineServer, LogPrint, SH_NOATTRIB, false, const char *); HandleType_t g_FileType; HandleType_t g_DirType; +IChangeableForward *g_pLogHook = NULL; class FileNatives : public SMGlobalClass, - public IHandleTypeDispatch + public IHandleTypeDispatch, + public IPluginsListener { public: + FileNatives() + { + m_bIsLoggingHooked = false; + } virtual void OnSourceModAllInitialized() { g_FileType = g_HandleSys.CreateType("File", this, 0, NULL, NULL, g_pCoreIdent, NULL); g_DirType = g_HandleSys.CreateType("Directory", this, 0, NULL, NULL, g_pCoreIdent, NULL); + g_pLogHook = g_Forwards.CreateForwardEx(NULL, ET_Hook, 1, NULL, Param_String); + g_PluginSys.AddPluginsListener(this); } virtual void OnSourceModShutdown() { + g_PluginSys.RemovePluginsListener(this); + if (m_bIsLoggingHooked) + { + SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false); + m_bIsLoggingHooked = false; + } + g_Forwards.ReleaseForward(g_pLogHook); g_HandleSys.RemoveType(g_DirType, g_pCoreIdent); g_HandleSys.RemoveType(g_FileType, g_pCoreIdent); g_DirType = 0; @@ -64,11 +82,59 @@ public: { FILE *fp = (FILE *)object; fclose(fp); - } else if (type == g_DirType) { + } + else if (type == g_DirType) + { IDirectory *pDir = (IDirectory *)object; g_LibSys.CloseDirectory(pDir); } } + virtual void OnPluginDestroyed(IPlugin *plugin) + { + if (m_bIsLoggingHooked && g_pLogHook->GetFunctionCount() == 0) + { + SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false); + m_bIsLoggingHooked = false; + } + } + virtual void AddLogHook(IPluginFunction *pFunc) + { + if (!m_bIsLoggingHooked) + { + SH_ADD_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false); + m_bIsLoggingHooked = true; + } + + g_pLogHook->AddFunction(pFunc); + } + virtual void RemoveLogHook(IPluginFunction *pFunc) + { + g_pLogHook->RemoveFunction(pFunc); + + if (m_bIsLoggingHooked && g_pLogHook->GetFunctionCount() == 0) + { + SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false); + m_bIsLoggingHooked = false; + } + } + virtual void LogPrint(const char *msg) + { + cell_t result; + + result = 0; + + g_in_game_log_hook = true; + g_pLogHook->PushString(msg); + g_pLogHook->Execute(&result); + g_in_game_log_hook = false; + + if (result >= Pl_Handled) + { + RETURN_META(MRES_SUPERCEDE); + } + } +private: + bool m_bIsLoggingHooked; } s_FileNatives; static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params) @@ -521,7 +587,7 @@ static cell_t sm_LogToGame(IPluginContext *pContext, const cell_t *params) buffer[len] = '\0'; } - engine->LogPrint(buffer); + Engine_LogPrintWrapper(buffer); return 1; } @@ -835,6 +901,34 @@ static cell_t sm_WriteFileString(IPluginContext *pContext, const cell_t *params) return (fwrite(buffer, sizeof(char), len, pFile) == len) ? 1 : 0; } +static cell_t sm_AddGameLogHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunction; + + if ((pFunction=pContext->GetFunctionById(params[1])) == NULL) + { + return pContext->ThrowNativeError("Function id %x is invalid", params[1]); + } + + s_FileNatives.AddLogHook(pFunction); + + return 1; +} + +static cell_t sm_RemoveGameLogHook(IPluginContext *pContext, const cell_t *params) +{ + IPluginFunction *pFunction; + + if ((pFunction=pContext->GetFunctionById(params[1])) == NULL) + { + return pContext->ThrowNativeError("Function id %x is invalid", params[1]); + } + + s_FileNatives.RemoveLogHook(pFunction); + + return 1; +} + REGISTER_NATIVES(filesystem) { {"OpenDirectory", sm_OpenDirectory}, @@ -863,5 +957,7 @@ REGISTER_NATIVES(filesystem) {"ReadFileString", sm_ReadFileString}, {"WriteFile", sm_WriteFile}, {"WriteFileString", sm_WriteFileString}, + {"AddGameLogHook", sm_AddGameLogHook}, + {"RemoveGameLogHook", sm_RemoveGameLogHook}, {NULL, NULL}, }; diff --git a/plugins/include/logging.inc b/plugins/include/logging.inc new file mode 100644 index 00000000..14b0e906 --- /dev/null +++ b/plugins/include/logging.inc @@ -0,0 +1,153 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _sm_logging_included + #endinput +#endif +#define _sm_logging_included + +/** + * Logs a plugin message to the SourceMod logs. The log message will be + * prefixed by the plugin's logtag (filename). + * + * @param format String format. + * @param ... Format arguments. + * @noreturn + */ +native LogMessage(const String:format[], any:...); + +/** + * Logs a message to the SourceMod logs without any plugin logtag. This is + * useful for re-routing messages from other plugins, for example, messages + * from LogAction(). + * + * @param format String format. + * @param ... Format arguments. + * @noreturn + */ +native LogMessageEx(const String:format[], any:...); + +/** + * Logs a message to any file. The log message will be in the normal + * SourceMod format, with the plugin logtag prepended. + * + * @param file File to write the log message in. + * @param format String format. + * @param ... Format arguments. + * @noreturn + * @error File could not be opened/written. + */ +native LogToFile(const String:file[], const String:format[], any:...); + +/** + * Same as LogToFile(), except no plugin logtag is prepended. + * + * @param file File to write the log message in. + * @param format String format. + * @param ... Format arguments. + * @noreturn + * @error File could not be opened/written. + */ +native LogToFileEx(const String:file[], const String:format[], any:...); + +/** + * Logs an action from a command or event whereby interception and routing may + * be important. This is intended to be a logging version of ShowActivity(). + * + * @param client Client performing the action, 0 for server, or -1 if not + * applicable. + * @param target Client being targetted, or -1 if not applicable. + * @param message Message format. + * @param ... Message formatting parameters. + * @noreturn + */ +native LogAction(client, target, const String:message[], any:...); + +/** + * Logs a plugin error message to the SourceMod logs. + * + * @param format String format. + * @param ... Format arguments. + * @noreturn + */ +native LogError(const String:format[], any:...); + +/** + * Called when an action is going to be logged. + * + * @param source Handle to the object logging the action, or INVALID_HANDLE + * if Core is logging the action. + * @param ident Type of object logging the action (plugin, ext, or core). + * @param client Client the action is from; 0 for server, -1 if not applicable. + * @param target Client the action is targetting, or -1 if not applicable. + * @param message Message that is being logged. + * @return Plugin_Continue will cause Core to defaulty log the message. + * Plugin_Handled will stop Core from logging the message. + * Plugin_Stop is the same as Handled, but prevents any other + * plugins from handling the message. + */ +forward Action:OnLogAction(Handle:source, + Identity:ident, + client, + target, + const String:message[]); + +/** + * Called when a game log message is received. + * + * Any Log*() functions called within this callback will not recursively + * pass through. That is, they will log directly, bypassing this callback. + * + * Note that this does not capture log messages from the engine. It only + * captures log messages being sent from the game/mod itself. + * + * @param message Message contents. + * @return Plugin_Handled or Plugin_Stop will prevent the message + * from being written to the log file. + */ +functag GameLogHook Action:public(const String:message[]); + +/** + * Adds a game log hook. + * + * @param hook Hook function. + * @noreturn + */ +native AddGameLogHook(GameLogHook:hook); + +/** + * Removes a game log hook. + * + * @param hook Hook function. + * @noreturn + */ +native RemoveGameLogHook(GameLogHook:hook); diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index afc93521..dea00ddb 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -54,6 +54,7 @@ struct Plugin #include <handles> #include <functions> #include <files> +#include <logging> #include <timers> #include <admin> #include <dbi> @@ -92,6 +93,10 @@ public Plugin:myinfo; * If any run-time error is thrown during this callback, the plugin will be marked * as failed. * + * It is not necessary to close any handles or remove hooks in this function. + * SourceMod guarantees that plugin shutdown automatically and correctly releases + * all resources. + * * @noreturn */ forward OnPluginStart(); @@ -176,26 +181,6 @@ forward OnServerCfg(); */ forward OnAllPluginsLoaded(); -/** - * Called when an action is going to be logged. - * - * @param source Handle to the object logging the action, or INVALID_HANDLE - * if Core is logging the action. - * @param ident Type of object logging the action (plugin, ext, or core). - * @param client Client the action is from; 0 for server, -1 if not applicable. - * @param target Client the action is targetting, or -1 if not applicable. - * @param message Message that is being logged. - * @return Plugin_Continue will cause Core to defaulty log the message. - * Plugin_Handled will stop Core from logging the message. - * Plugin_Stop is the same as Handled, but prevents any other - * plugins from handling the message. - */ -forward Action:OnLogAction(Handle:source, - Identity:ident, - client, - target, - const String:message[]); - /** * Returns the calling plugin's Handle. * @@ -315,72 +300,6 @@ native SetFailState(const String:string[], any:...); */ native ThrowError(const String:fmt[], any:...); -/** - * Logs a plugin message to the SourceMod logs. The log message will be - * prefixed by the plugin's logtag (filename). - * - * @param format String format. - * @param ... Format arguments. - * @noreturn - */ -native LogMessage(const String:format[], any:...); - -/** - * Logs a message to the SourceMod logs without any plugin logtag. This is - * useful for re-routing messages from other plugins, for example, messages - * from LogAction(). - * - * @param format String format. - * @param ... Format arguments. - * @noreturn - */ -native LogMessageEx(const String:format[], any:...); - -/** - * Logs a message to any file. The log message will be in the normal - * SourceMod format, with the plugin logtag prepended. - * - * @param file File to write the log message in. - * @param format String format. - * @param ... Format arguments. - * @noreturn - * @error File could not be opened/written. - */ -native LogToFile(const String:file[], const String:format[], any:...); - -/** - * Same as LogToFile(), except no plugin logtag is prepended. - * - * @param file File to write the log message in. - * @param format String format. - * @param ... Format arguments. - * @noreturn - * @error File could not be opened/written. - */ -native LogToFileEx(const String:file[], const String:format[], any:...); - -/** - * Logs an action from a command or event whereby interception and routing may - * be important. This is intended to be a logging version of ShowActivity(). - * - * @param client Client performing the action, 0 for server, or -1 if not - * applicable. - * @param target Client being targetted, or -1 if not applicable. - * @param message Message format. - * @param ... Message formatting parameters. - * @noreturn - */ -native LogAction(client, target, const String:message[], any:...); - -/** - * Logs a plugin error message to the SourceMod logs. - * - * @param format String format. - * @param ... Format arguments. - * @noreturn - */ -native LogError(const String:format[], any:...); - /** * Gets the system time as a unix timestamp. * From e7f8d1b2f53a70a4fc718244eb45e959c541f0bf Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 23:54:38 +0000 Subject: [PATCH 231/263] added amb1424 - hudtext functions for mods that support them --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401921 --- core/PlayerManager.cpp | 1 + core/msvc8/sourcemod_mm.vcproj | 4 + core/sm_globals.h | 9 +- core/smn_hudtext.cpp | 475 +++++++++++++++++++++++++++++++++ core/sourcemod.cpp | 8 + gamedata/core.games.txt | 18 ++ plugins/include/halflife.inc | 147 +++++++++- 7 files changed, 658 insertions(+), 4 deletions(-) create mode 100644 core/smn_hudtext.cpp diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index ac1fc427..b6f37ca5 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -90,6 +90,7 @@ PlayerManager::PlayerManager() { m_AuthQueue = NULL; m_FirstPass = false; + m_maxClients = 0; m_UserIdLookUp = new int[USHRT_MAX+1]; memset(m_UserIdLookUp, 0, sizeof(int) * (USHRT_MAX+1)); diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index c3efbe2c..3c5985a0 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -1424,6 +1424,10 @@ RelativePath="..\smn_handles.cpp" > </File> + <File + RelativePath="..\smn_hudtext.cpp" + > + </File> <File RelativePath="..\smn_keyvalues.cpp" > diff --git a/core/sm_globals.h b/core/sm_globals.h index b761fabf..42fa6b15 100644 --- a/core/sm_globals.h +++ b/core/sm_globals.h @@ -85,12 +85,19 @@ public: } /** - * @brief Called after all global classes have initialized + * @brief Called after all global classes have been started up */ virtual void OnSourceModAllInitialized() { } + /** + * @brief Called after all global classes have initialized + */ + virtual void OnSourceModAllInitialized_Post() + { + } + /** * @brief Called when SourceMod is shutting down */ diff --git a/core/smn_hudtext.cpp b/core/smn_hudtext.cpp new file mode 100644 index 00000000..50d1923a --- /dev/null +++ b/core/smn_hudtext.cpp @@ -0,0 +1,475 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "sm_globals.h" +#include "GameConfigs.h" +#include "UserMessages.h" +#include "TimerSys.h" +#include "PlayerManager.h" +#include "HandleSys.h" + +#define MAX_HUD_CHANNELS 6 + +int g_HudMsgNum = -1; + +struct hud_syncobj_t +{ + int *player_channels; +}; + +struct player_chaninfo_t +{ + double chan_times[MAX_HUD_CHANNELS]; + hud_syncobj_t *chan_syncobjs[MAX_HUD_CHANNELS]; +}; + +struct hud_text_parms +{ + float x; + float y; + int effect; + byte r1, g1, b1, a1; + byte r2, g2, b2, a2; + float fadeinTime; + float fadeoutTime; + float holdTime; + float fxTime; + int channel; +}; + +class HudMsgHelpers : + public SMGlobalClass, + public IHandleTypeDispatch, + public IClientListener +{ +public: + bool IsSupported() + { + return (g_HudMsgNum != -1); + } + + virtual void OnSourceModAllInitialized_Post() + { + const char *key; + + key = g_pGameConf->GetKeyValue("HudTextMsg"); + if (key != NULL) + { + g_HudMsgNum = g_UserMsgs.GetMessageIndex(key); + } + + if (!IsSupported()) + { + m_hHudSyncObj = 0; + m_PlayerHuds = NULL; + return; + } + + m_PlayerHuds = new player_chaninfo_t[256+1]; + m_hHudSyncObj = g_HandleSys.CreateType("HudSyncObj", this, 0, NULL, NULL, g_pCoreIdent, NULL); + + g_Players.AddClientListener(this); + } + + virtual void OnSourceModShutdown() + { + if (!IsSupported()) + { + return; + } + + delete [] m_PlayerHuds; + g_HandleSys.RemoveType(m_hHudSyncObj, g_pCoreIdent); + + g_Players.RemoveClientListener(this); + } + + virtual void OnHandleDestroy(HandleType_t type, void *object) + { + hud_syncobj_t *obj = (hud_syncobj_t *)object; + + delete [] obj->player_channels; + delete obj; + } + + virtual bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize) + { + *pSize = sizeof(unsigned int) * g_Players.GetMaxClients(); + return true; + } + + virtual void OnClientConnected(int client) + { + player_chaninfo_t *player; + + player = &m_PlayerHuds[client]; + memset(player->chan_syncobjs, 0, sizeof(player->chan_syncobjs)); + memset(player->chan_times, 0, sizeof(player->chan_times)); + } + + Handle_t CreateHudSyncObj(IdentityToken_t *pIdent) + { + Handle_t hndl; + int max_clients; + HandleError err; + hud_syncobj_t *obj; + HandleSecurity sec; + + if ((max_clients = g_Players.MaxClients()) == 0) + { + max_clients = 256+1; + } + + obj = new hud_syncobj_t; + obj->player_channels = new int[max_clients]; + + memset(obj->player_channels, 0, sizeof(int) * max_clients); + + sec = HandleSecurity(pIdent, g_pCoreIdent); + + if ((hndl = g_HandleSys.CreateHandleEx(m_hHudSyncObj, obj, &sec, NULL, &err)) + == BAD_HANDLE) + { + delete [] obj->player_channels; + delete obj; + } + + return hndl; + } + + HandleError ReadHudSyncObj(Handle_t hndl, + IdentityToken_t *pOwner, + hud_syncobj_t **pObj) + { + HandleSecurity sec(pOwner, g_pCoreIdent); + return g_HandleSys.ReadHandle(hndl, m_hHudSyncObj, &sec, (void **)pObj); + } + + unsigned int AutoSelectChannel(unsigned int client) + { + int last_channel; + player_chaninfo_t *player; + + player = &m_PlayerHuds[client]; + + last_channel = 0; + for (unsigned int i = 1; i < MAX_HUD_CHANNELS; i++) + { + if (player->chan_times[i] < player->chan_times[last_channel]) + { + last_channel = i; + } + } + + ManualSelectChannel(client, last_channel); + + return last_channel; + } + + int TryReuseLastChannel(unsigned int client, hud_syncobj_t *obj) + { + int last_channel; + player_chaninfo_t *player; + + player = &m_PlayerHuds[client]; + + /* First, see if we can re-use the previous channel. */ + last_channel = obj->player_channels[client]; + + if (player->chan_syncobjs[last_channel] == obj) + { + player->chan_times[last_channel] = *g_pUniversalTime; + return last_channel; + } + + return -1; + } + + int AutoSelectChannel(unsigned int client, hud_syncobj_t *obj) + { + int last_channel; + player_chaninfo_t *player; + + player = &m_PlayerHuds[client]; + + /* First, see if we can re-use the previous channel. */ + last_channel = obj->player_channels[client]; + + if (player->chan_syncobjs[last_channel] == obj) + { + player->chan_times[last_channel] = *g_pUniversalTime; + return last_channel; + } + + last_channel = 0; + for (unsigned int i = 1; i < MAX_HUD_CHANNELS; i++) + { + if (player->chan_times[i] < player->chan_times[last_channel]) + { + last_channel = i; + } + } + + obj->player_channels[client] = last_channel; + player->chan_syncobjs[last_channel] = obj; + player->chan_times[last_channel] = *g_pUniversalTime; + + return last_channel; + } + + int ManualSelectChannel(unsigned int client, int channel) + { + player_chaninfo_t *player; + + player = &m_PlayerHuds[client]; + player->chan_times[channel] = *g_pUniversalTime; + player->chan_syncobjs[channel] = NULL; + + return channel; + } +private: + HandleType_t m_hHudSyncObj; + player_chaninfo_t *m_PlayerHuds; +} s_HudMsgHelpers; + +hud_text_parms g_hud_params; + +static cell_t CreateHudSynchronizer(IPluginContext *pContext, const cell_t *params) +{ + return s_HudMsgHelpers.CreateHudSyncObj(pContext->GetIdentity()); +} + +static cell_t SetHudTextParams(IPluginContext *pContext, const cell_t *params) +{ + g_hud_params.x = sp_ctof(params[1]); + g_hud_params.y = sp_ctof(params[2]); + g_hud_params.holdTime = sp_ctof(params[3]); + g_hud_params.r1 = static_cast<byte>(params[4]); + g_hud_params.g1 = static_cast<byte>(params[5]); + g_hud_params.b1 = static_cast<byte>(params[6]); + g_hud_params.a1 = static_cast<byte>(params[7]); + g_hud_params.effect = params[8]; + g_hud_params.fxTime = sp_ctof(params[9]); + g_hud_params.fadeinTime = sp_ctof(params[10]); + g_hud_params.fadeoutTime = sp_ctof(params[11]); + g_hud_params.r2 = 255; + g_hud_params.g2 = 255; + g_hud_params.b2 = 250; + g_hud_params.a2 = 0; + + return 1; +} + +static cell_t SetHudTextParamsEx(IPluginContext *pContext, const cell_t *params) +{ + cell_t *color1, *color2; + + pContext->LocalToPhysAddr(params[4], &color1); + pContext->LocalToPhysAddr(params[5], &color2); + + g_hud_params.x = sp_ctof(params[1]); + g_hud_params.y = sp_ctof(params[2]); + g_hud_params.holdTime = sp_ctof(params[3]); + g_hud_params.r1 = static_cast<byte>(color1[0]); + g_hud_params.g1 = static_cast<byte>(color1[1]); + g_hud_params.b1 = static_cast<byte>(color1[2]); + g_hud_params.a1 = static_cast<byte>(color1[3]); + g_hud_params.effect = params[6]; + g_hud_params.fxTime = sp_ctof(params[7]); + g_hud_params.fadeinTime = sp_ctof(params[8]); + g_hud_params.fadeoutTime = sp_ctof(params[9]); + g_hud_params.r2 = static_cast<byte>(color2[0]); + g_hud_params.g2 = static_cast<byte>(color2[1]); + g_hud_params.b2 = static_cast<byte>(color2[2]); + g_hud_params.a2 = static_cast<byte>(color2[3]); + + return 1; +} + +void UTIL_SendHudText(int client, const hud_text_parms &textparms, const char *pMessage) +{ + bf_write *bf; + cell_t players[1]; + + players[0] = client; + + bf = g_UserMsgs.StartMessage(g_HudMsgNum, players, 1, 0); + bf->WriteByte(textparms.channel & 0xFF ); + bf->WriteFloat(textparms.x); + bf->WriteFloat(textparms.y); + bf->WriteByte(textparms.r1); + bf->WriteByte(textparms.g1); + bf->WriteByte(textparms.b1); + bf->WriteByte(textparms.a1); + bf->WriteByte(textparms.r2); + bf->WriteByte(textparms.g2); + bf->WriteByte(textparms.b2); + bf->WriteByte(textparms.a2); + bf->WriteByte(textparms.effect); + bf->WriteFloat(textparms.fadeinTime); + bf->WriteFloat(textparms.fadeoutTime); + bf->WriteFloat(textparms.holdTime); + bf->WriteFloat(textparms.fxTime); + bf->WriteString(pMessage); + g_UserMsgs.EndMessage(); +} + +static cell_t ShowSyncHudText(IPluginContext *pContext, const cell_t *params) +{ + int client; + Handle_t err; + CPlayer *pPlayer; + hud_syncobj_t *obj; + char message_buffer[255-36]; + + if (!s_HudMsgHelpers.IsSupported()) + { + return -1; + } + + if ((err = s_HudMsgHelpers.ReadHudSyncObj(params[2], pContext->GetIdentity(), &obj)) != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[2], err); + } + + client = params[1]; + if ((pPlayer = g_Players.GetPlayerByIndex(client)) == NULL) + { + return pContext->ThrowNativeError("Invalid client index %d", client); + } + else if (!pPlayer->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in-game", client); + } + + g_SourceMod.FormatString(message_buffer, sizeof(message_buffer), pContext, params, 3); + if (pContext->GetContext()->n_err != SP_ERROR_NONE) + { + return 0; + } + + g_hud_params.channel = s_HudMsgHelpers.AutoSelectChannel(client, obj); + UTIL_SendHudText(client, g_hud_params, message_buffer); + + return 1; +} + +static cell_t ClearSyncHud(IPluginContext *pContext, const cell_t *params) +{ + int client; + int channel; + Handle_t err; + CPlayer *pPlayer; + hud_syncobj_t *obj; + + if (!s_HudMsgHelpers.IsSupported()) + { + return -1; + } + + if ((err = s_HudMsgHelpers.ReadHudSyncObj(params[2], pContext->GetIdentity(), &obj)) != HandleError_None) + { + return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[2], err); + } + + client = params[1]; + if ((pPlayer = g_Players.GetPlayerByIndex(client)) == NULL) + { + return pContext->ThrowNativeError("Invalid client index %d", client); + } + else if (!pPlayer->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in-game", client); + } + + if ((channel = s_HudMsgHelpers.TryReuseLastChannel(client, obj)) == -1) + { + return -1; + } + + g_hud_params.channel = channel; + UTIL_SendHudText(client, g_hud_params, ""); + + return g_hud_params.channel; +} + +static cell_t ShowHudText(IPluginContext *pContext, const cell_t *params) +{ + int client; + CPlayer *pPlayer; + char message_buffer[255-36]; + + if (!s_HudMsgHelpers.IsSupported()) + { + return -1; + } + + client = params[1]; + if ((pPlayer = g_Players.GetPlayerByIndex(client)) == NULL) + { + return pContext->ThrowNativeError("Invalid client index %d", client); + } + else if (!pPlayer->IsInGame()) + { + return pContext->ThrowNativeError("Client %d is not in-game", client); + } + + g_SourceMod.FormatString(message_buffer, sizeof(message_buffer), pContext, params, 3); + if (pContext->GetContext()->n_err != SP_ERROR_NONE) + { + return 0; + } + + if (params[2] == -1) + { + g_hud_params.channel = s_HudMsgHelpers.AutoSelectChannel(client); + } + else + { + g_hud_params.channel = params[2] % MAX_HUD_CHANNELS; + s_HudMsgHelpers.ManualSelectChannel(client, g_hud_params.channel); + } + + UTIL_SendHudText(client, g_hud_params, message_buffer); + + return g_hud_params.channel; +} + +REGISTER_NATIVES(hudNatives) +{ + {"ClearSyncHud", ClearSyncHud}, + {"CreateHudSynchronizer", CreateHudSynchronizer}, + {"SetHudTextParams", SetHudTextParams}, + {"SetHudTextParamsEx", SetHudTextParamsEx}, + {"ShowHudText", ShowHudText}, + {"ShowSyncHudText", ShowSyncHudText}, + {NULL, NULL}, +}; diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 5a44e775..695e9933 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -302,6 +302,14 @@ void SourceModBase::StartSourceMod(bool late) pBase = pBase->m_pGlobalClassNext; } + /* Notify! */ + pBase = SMGlobalClass::head; + while (pBase) + { + pBase->OnSourceModAllInitialized_Post(); + pBase = pBase->m_pGlobalClassNext; + } + /* Add us now... */ g_ShareSys.AddInterface(NULL, this); diff --git a/gamedata/core.games.txt b/gamedata/core.games.txt index f598813a..2d91a614 100644 --- a/gamedata/core.games.txt +++ b/gamedata/core.games.txt @@ -63,6 +63,24 @@ "HudRadioMenuMsg" "ShowMenu" } } + + /** + * Which games support HudMsg? + */ + "#default" + { + "#supported" + { + "game" "hl2mp" + "game" "sourceforts" + "game" "tf" + } + + "Keys" + { + "HudTextMsg" "HudMsg" + } + } /** * Which games use an extra byte in the HintText diff --git a/plugins/include/halflife.inc b/plugins/include/halflife.inc index c9f1fbba..35fd7f74 100644 --- a/plugins/include/halflife.inc +++ b/plugins/include/halflife.inc @@ -353,21 +353,162 @@ stock PrintHintTextToAll(const String:format[], any:...) * Shows a VGUI panel to a specific client. * * @param client Client index. - * @param name Panel type name (Check viewport_panel_names.h to see a list of some panel names). - * @param Kv KeyValues handle with all the data for the panel setup (Depends on the panel type and may be unused). + * @param name Panel type name (Check viewport_panel_names.h to see a list of + * some panel names). + * @param Kv KeyValues handle with all the data for the panel setup (Depends + * on the panel type and may be unused). * @param show True to show the panel, or false to remove it from the client screen. * @noreturn * @error If the client is not connected an error will be thrown. */ native ShowVGUIPanel(client, const String:name[], Handle:Kv=INVALID_HANDLE, bool:show=true); +/** + * Creates a HUD synchronization object. This object is used to automatically assign and + * re-use channels for a set of messages. + * + * The HUD has a hardcoded number of channels (usually 6) for displaying + * text. You can use any channel for any area of the screen. Text on + * different channels can overlap, but text on the same channel will + * erase the old text first. This overlapping and overwriting gets problematic. + * + * A HUD synchronization object automatically selects channels for you based on + * the following heuristics: + * - If channel X was last used by the object, and hasn't been modified again, + * channel X gets re-used. + * - Otherwise, a new channel is chosen based on the least-recently-used channel. + * + * This ensures that if you display text on a sync object, that the previous text + * displayed on it will always be cleared first. This is because your new text + * will either overwrite the old text on the same channel, or because another + * channel has already erased your text. + * + * Note that messages can still overlap if they are on different synchronization + * objects, or they are displayed to manual channels. + * + * These are particularly useful for displaying repeating or refreshing HUD text, in + * addition to displaying multiple message sets in one area of the screen (for example, + * center-say messages that may pop up randomly that you don't want to overlap each + * other). + * + * @return New HUD synchronization object. + * The Handle can be closed with CloseHandle(). + * If HUD text is not supported on this mod, then + * INVALID_HANDLE is returned. + */ +native Handle:CreateHudSynchronizer(); + +/** + * Sets the HUD parameters for drawing text. These parameters are stored + * globally, although nothing other than this function and SetHudTextParamsEx + * modify them. + * + * You must call this function before drawing text. If you are drawing + * text to multiple clients, you can set the parameters once, since + * they won't be modified. However, as soon as you pass control back + * to other plugins, you must reset the parameters next time you draw. + * + * @param x x coordinate, from 0 to 1. -1.0 is the center. + * @param y y coordinate, from 0 to 1. -1.0 is the center. + * @param holdTime Number of seconds to hold the text. + * @param r Red color value. + * @param g Green color value. + * @param b Blue color value. + * @param a Alpha transparency value. + * @param effect 0/1 causes the text to fade in and fade out. + * 2 causes the text to flash[?]. + * @param fxTime Duration of chosen effect (may not apply to all effects). + * @param fadeIn Number of seconds to spend fading in. + * @param fadeOut Number of seconds to spend fading out. + * @noreturn + */ +native SetHudTextParams(Float:x, Float:y, Float:holdTime, r, g, b, a, effect = 0, + Float:fxTime=6.0, Float:fadeIn=0.1, Float:fadeOut=0.2); + +/** + * Sets the HUD parameters for drawing text. These parameters are stored + * globally, although nothing other than this function and SetHudTextParams + * modify them. + * + * This is the same as SetHudTextParams(), except it lets you set the alternate + * color for when effects require it. + * + * @param x x coordinate, from 0 to 1. -1.0 is the center. + * @param y y coordinate, from 0 to 1. -1.0 is the center. + * @param holdTime Number of seconds to hold the text. + * @param color1 First color set, array values being [red, green, blue, alpha] + * @param color2 Second color set, array values being [red, green, blue, alpha] + * @param effect 0/1 causes the text to fade in and fade out. + * 2 causes the text to flash[?]. + * @param fxTime Duration of chosen effect (may not apply to all effects). + * @param fadeIn Number of seconds to spend fading in. + * @param fadeOut Number of seconds to spend fading out. + * @noreturn + */ +native SetHudTextParamsEx(Float:x, Float:y, Float:holdTime, color1[4], + color2[4]={255,255,255,0}, effect = 0, Float:fxTime=6.0, + Float:fadeIn=0.1, Float:fadeOut=0.2); + +/** + * Shows a synchronized HUD message to a client. + * + * As of this writing, only TF, HL2MP, and SourceForts support HUD Text. + * + * @param client Client index to send the message to. + * @param sync Synchronization object. + * @param message Message text or formatting rules. + * @param ... Message formatting parameters. + * @return -1 on failure, anything else on success. + * This function fails if the mod does not support it. + * @error Client not in-game, or sync object not valid. + */ +native ShowSyncHudText(client, Handle:sync, const String:message[], any:...); + +/** + * Clears the text on a synchronized HUD channel. + * + * This is not the same as sending "" because it guarantees that it won't + * overwrite text on another channel. For example, consider the scenario: + * + * 1. Your synchronized message goes to channel 3. + * 2. Someone else's non-synchronized message goes to channel 3. + * + * If you were to simply send "" on your synchronized message, + * then someone else's text could be overwritten. + * + * @param client Client index to send the message to. + * @param sync Synchronization object. + * @noreturn + * @error Client not in-game, or sync object not valid. + */ +native ClearSyncHud(client, Handle:sync); + +/** + * Shows a HUD message to a client on the given channel. + * + * As of this writing, only TF, HL2MP, and SourceForts support HUD Text. + * + * @param client Client index to send the message to. + * @param channel A channel number. + * If -1, then a channel will automatically be selected + * based on the least-recently-used channel. If the + * channel is any other number, it will be modulo'd with + * the channel count to get a final channel number. + * @param message Message text or formatting rules. + * @param ... Message formatting parameters. + * @return -1 on failure (lack of mod support). + * Any other return value is the channel number that was + * used to render the text. + */ +native ShowHudText(client, channel, const String:message[], any:...); + /** * Shows a MOTD panel to a specific client. * * @param client Client index. * @param title Title of the panel (printed on the top border of the window). * @param msg Contents of the panel, it can be treated as an url, filename or plain text - * depending on the type parameter (WARNING: msg has to be 192 bytes maximum!) + * depending on the type parameter (WARNING: msg has to be 192 bytes maximum!) * @param type Determines the way to treat the message body of the panel. * @noreturn * @error If the client is not connected an error will be thrown. From 1f96e25121c8c8b81286c16f7fadea8bb29d0005 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 2 Mar 2008 23:58:33 +0000 Subject: [PATCH 232/263] updated linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401922 --- core/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/Makefile b/core/Makefile index a49dc222..c7ac052c 100644 --- a/core/Makefile +++ b/core/Makefile @@ -30,7 +30,7 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \ smn_handles.cpp smn_keyvalues.cpp smn_banning.cpp smn_maplists.cpp \ smn_lang.cpp smn_player.cpp smn_string.cpp smn_sorting.cpp smn_textparse.cpp smn_timers.cpp \ smn_usermsgs.cpp smn_menus.cpp smn_database.cpp smn_vector.cpp smn_adt_array.cpp \ - smn_adt_trie.cpp + smn_adt_trie.cpp smn_hudtext.cpp OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \ systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \ systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_function.cpp From 211b0159e5c92626c042f05dd6bf2de83b951731 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Mon, 3 Mar 2008 06:28:41 +0000 Subject: [PATCH 233/263] Added amb466 - Random Sorting --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401923 --- core/smn_sorting.cpp | 64 +++++++++++++++++++++++++++++++++-- plugins/include/sorting.inc | 1 + plugins/testsuite/sorttest.sp | 32 +++++++++++++++--- 3 files changed, 90 insertions(+), 7 deletions(-) diff --git a/core/smn_sorting.cpp b/core/smn_sorting.cpp index e300e282..2e1bf330 100644 --- a/core/smn_sorting.cpp +++ b/core/smn_sorting.cpp @@ -86,8 +86,26 @@ enum SortOrder { Sort_Ascending = 0, Sort_Descending = 1, + Sort_Random = 2, }; +void sort_random(cell_t *array, cell_t size) +{ + srand((unsigned int)time(NULL)); + + for (int i = size-1; i > 0; i--) + { + int n = (rand() % i) + 1; + + if (array[i] != array[n]) + { + array[i] ^= array[n]; + array[n] ^= array[i]; + array[i] ^= array[n]; + } + } +} + int sort_ints_asc(const void *int1, const void *int2) { return (*(int *)int1) - (*(int *)int2); @@ -109,9 +127,15 @@ static cell_t sm_SortIntegers(IPluginContext *pContext, const cell_t *params) if (type == Sort_Ascending) { qsort(array, array_size, sizeof(cell_t), sort_ints_asc); - } else { + } + else if (type == Sort_Descending) + { qsort(array, array_size, sizeof(cell_t), sort_ints_desc); } + else + { + sort_random(array, array_size); + } return 1; } @@ -157,9 +181,15 @@ static cell_t sm_SortFloats(IPluginContext *pContext, const cell_t *params) if (type == Sort_Ascending) { qsort(array, array_size, sizeof(cell_t), sort_floats_asc); - } else { + } + else if (type == Sort_Descending) + { qsort(array, array_size, sizeof(cell_t), sort_floats_desc); } + else + { + sort_random(array, array_size); + } return 1; } @@ -217,9 +247,15 @@ static cell_t sm_SortStrings(IPluginContext *pContext, const cell_t *params) if (type == Sort_Ascending) { qsort(array, array_size, sizeof(cell_t), sort_strings_asc); - } else { + } + else if (type == Sort_Descending) + { qsort(array, array_size, sizeof(cell_t), sort_strings_desc); } + else + { + sort_random(array, array_size); + } /* END HACKHACK - restore what we damaged so Pawn doesn't throw up. * We'll browse through each index of the array and patch up the distance. @@ -392,6 +428,20 @@ int sort_adtarray_strings_desc(const void *str1, const void *str2) return strcmp((char *) str2, (char *) str1); } +void sort_adt_random(CellArray *cArray) +{ + size_t arraysize = cArray->size(); + + srand((unsigned int)time(NULL)); + + for (int i = arraysize-1; i > 0; i--) + { + int n = (rand() % i) + 1; + + cArray->swap(i, n); + } +} + static cell_t sm_SortADTArray(IPluginContext *pContext, const cell_t *params) { CellArray *cArray; @@ -405,6 +455,14 @@ static cell_t sm_SortADTArray(IPluginContext *pContext, const cell_t *params) } cell_t order = params[2]; + + if (order == Sort_Random) + { + sort_adt_random(cArray); + + return 1; + } + cell_t type = params[3]; size_t arraysize = cArray->size(); size_t blocksize = cArray->blocksize(); diff --git a/plugins/include/sorting.inc b/plugins/include/sorting.inc index 9cb395d6..7fd59687 100644 --- a/plugins/include/sorting.inc +++ b/plugins/include/sorting.inc @@ -43,6 +43,7 @@ enum SortOrder { Sort_Ascending = 0, /**< Ascending order */ Sort_Descending = 1, /**< Descending order */ + Sort_Random = 2 /**< Random order */ }; /** diff --git a/plugins/testsuite/sorttest.sp b/plugins/testsuite/sorttest.sp index bd9d4d87..c8423fa9 100644 --- a/plugins/testsuite/sorttest.sp +++ b/plugins/testsuite/sorttest.sp @@ -47,6 +47,10 @@ public Action:Command_TestSortInts(args) SortIntegers(array, 10, Sort_Descending) PrintIntegers(array, 10) + PrintToServer("Testing random sort:") + SortIntegers(array, 10, Sort_Random) + PrintIntegers(array, 10) + return Plugin_Handled } @@ -74,6 +78,10 @@ public Action:Command_TestSortFloats(args) SortFloats(array, 10, Sort_Descending) PrintFloats(array, 10) + PrintToServer("Testing random sort:") + SortFloats(array, 10, Sort_Random) + PrintFloats(array, 10) + return Plugin_Handled } @@ -125,7 +133,7 @@ public Action:Command_TestSortStrings(args) "sidluke", "johnny got his gun", "gabe newell", - "hello", + "pRED*'s awesome", "WHAT?!" } @@ -137,6 +145,10 @@ public Action:Command_TestSortStrings(args) SortStrings(strarray, 10, Sort_Descending) PrintStrings(strarray, 10) + PrintToServer("Testing random sort:") + SortStrings(strarray, 10, Sort_Random) + PrintStrings(strarray, 10) + return Plugin_Handled } @@ -157,7 +169,7 @@ public Action:Command_TestSort2D(args) "sidluke", "johnny got his gun", "gabe newell", - "hello", + "pred is a crab", "WHAT?!" } @@ -204,6 +216,10 @@ public Action:Command_TestSortADTInts(args) SortADTArray(array, Sort_Descending, Sort_Integer) PrintADTArrayIntegers(array) + PrintToServer("Testing random sort:") + SortADTArray(array, Sort_Random, Sort_Integer) + PrintADTArrayIntegers(array) + return Plugin_Handled } @@ -239,6 +255,10 @@ public Action:Command_TestSortADTFloats(args) SortADTArray(array, Sort_Descending, Sort_Float) PrintADTArrayFloats(array) + PrintToServer("Testing random sort:") + SortADTArray(array, Sort_Random, Sort_Float) + PrintADTArrayFloats(array) + return Plugin_Handled } @@ -264,7 +284,7 @@ public Action:Command_TestSortADTStrings(args) PushArrayString(array, "sidluke"); PushArrayString(array, "johnny got his gun"); PushArrayString(array, "gabe newell"); - PushArrayString(array, "hello"); + PushArrayString(array, "Hello pRED*"); PushArrayString(array, "WHAT?!"); PrintToServer("Testing ascending sort:") @@ -275,6 +295,10 @@ public Action:Command_TestSortADTStrings(args) SortADTArray(array, Sort_Descending, Sort_String) PrintADTArrayStrings(array) + PrintToServer("Testing random sort:") + SortADTArray(array, Sort_Random, Sort_String) + PrintADTArrayStrings(array) + return Plugin_Handled } @@ -298,7 +322,7 @@ public Action:Command_TestSortADTCustom(args) PushArrayString(array, "sidluke"); PushArrayString(array, "johnny got his gun"); PushArrayString(array, "gabe newell"); - PushArrayString(array, "hello"); + PushArrayString(array, "pRED*'s running out of ideas"); PushArrayString(array, "WHAT?!"); PrintToServer("Testing custom sort:") From 54640a1fd04b3a4f16ba500e7302a446a6b7121b Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 3 Mar 2008 15:27:27 +0000 Subject: [PATCH 234/263] amb1502 - fixed typo --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401924 --- plugins/include/sdktools_functions.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/include/sdktools_functions.inc b/plugins/include/sdktools_functions.inc index 61eb4754..e85f544a 100644 --- a/plugins/include/sdktools_functions.inc +++ b/plugins/include/sdktools_functions.inc @@ -124,7 +124,7 @@ native SlapPlayer(client, health=5, bool:sound=true); /** * Searches for an entity by classname. * - * @param startEnt The entity index to begin searching from. + * @param startEnt The entity index after which to begin searching from. * Use -1 to start from the first entity. * @param classname Classname of the entity to find. * @return Entity index >= 0 if found, -1 otherwise. From c6868c213e0eb69f287f340049365bcc63529daf Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Tue, 11 Mar 2008 19:25:19 +0000 Subject: [PATCH 235/263] Added Load Failures to sm plugins list --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401926 --- core/systems/PluginSys.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 91977bdd..06d6bb88 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -2149,6 +2149,8 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c g_RootMenu.ConsolePrint("[SM] Listing %d plugin%s:", GetPluginCount(), (plnum > 1) ? "s" : ""); } + SourceHook::List<IPlugin *> m_FailList; + IPluginIterator *iter = GetPluginIterator(); for (; iter->MorePlugins(); iter->NextPlugin(), id++) { @@ -2159,6 +2161,12 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c if (pl->GetStatus() != Plugin_Running) { len += UTIL_Format(buffer, sizeof(buffer), " %02d <%s>", id, GetStatusText(pl->GetStatus())); + + if (pl->GetStatus() <= Plugin_Error) + { + /* Plugin has failed to load. */ + m_FailList.push_back(pl); + } } else { @@ -2177,6 +2185,22 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c } iter->Release(); + + if (!m_FailList.empty()) + { + g_RootMenu.ConsolePrint("Load Errors:"); + + SourceHook::List<IPlugin *>::iterator _iter; + + CPlugin *pl; + + for (_iter=m_FailList.begin(); _iter!=m_FailList.end(); _iter++) + { + pl = (CPlugin *)*_iter; + g_RootMenu.ConsolePrint("%s: %s",(IS_STR_FILLED(pl->GetPublicInfo()->name)) ? pl->GetPublicInfo()->name : pl->GetFilename(), pl->m_errormsg); + } + } + return; } else if (strcmp(cmd, "load") == 0) From b1da7e1cf811724d9f502b6ebb3cf9bd4c68015a Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Tue, 11 Mar 2008 23:52:56 +0000 Subject: [PATCH 236/263] Fixed bug in GetAdjustedTime() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401927 --- core/sourcemod.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 695e9933..06ba14d6 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -675,7 +675,7 @@ void SourceModBase::AllPluginsLoaded() time_t SourceModBase::GetAdjustedTime() { - return GetAdjustedTime(); + return ::GetAdjustedTime(); } void SourceModBase::AddGameFrameHook(GAME_FRAME_HOOK hook) From 352b131c35c69222fc2b4ee53bab0cecf16734b2 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 12 Mar 2008 00:43:35 +0000 Subject: [PATCH 237/263] Added sm_dump_classes command --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401928 --- extensions/sdktools/util.h | 102 +++++++++++++++++++++++++++ extensions/sdktools/vhelpers.cpp | 114 +++++++++++++++++++++++++++++++ gamedata/sdktools.games.ep2.txt | 13 ++++ gamedata/sdktools.games.txt | 14 ++++ 4 files changed, 243 insertions(+) create mode 100644 extensions/sdktools/util.h diff --git a/extensions/sdktools/util.h b/extensions/sdktools/util.h new file mode 100644 index 00000000..12404557 --- /dev/null +++ b/extensions/sdktools/util.h @@ -0,0 +1,102 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SDKTools Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id: vcallbuilder.h 1566 2007-10-14 22:12:46Z faluco $ + */ + +#ifndef _INCLUDE_SOURCEMOD_UTIL_H_ +#define _INCLUDE_SOURCEMOD_UTIL_H_ + +#include "utldict.h" + +abstract_class IEntityFactory +{ +public: + virtual IServerNetworkable *Create( const char *pClassName ) = 0; + virtual void Destroy( IServerNetworkable *pNetworkable ) = 0; + virtual size_t GetEntitySize() = 0; +}; + +template <class T> +class CEntityFactory : public IEntityFactory +{ +public: + CEntityFactory( const char *pClassName ) + { + EntityFactoryDictionary()->InstallFactory( this, pClassName ); + } + + IServerNetworkable *Create( const char *pClassName ) + { + T* pEnt = _CreateEntityTemplate((T*)NULL, pClassName); + return pEnt->NetworkProp(); + } + + void Destroy( IServerNetworkable *pNetworkable ) + { + if ( pNetworkable ) + { + pNetworkable->Release(); + } + } + + virtual size_t GetEntitySize() + { + return sizeof(T); + } +}; + +abstract_class IEntityFactoryDictionary +{ +public: + virtual void InstallFactory( IEntityFactory *pFactory, const char *pClassName ) = 0; + virtual IServerNetworkable *Create( const char *pClassName ) = 0; + virtual void Destroy( const char *pClassName, IServerNetworkable *pNetworkable ) = 0; + virtual IEntityFactory *FindFactory( const char *pClassName ) = 0; + virtual const char *GetCannonicalName( const char *pClassName ) = 0; +}; + + +class CEntityFactoryDictionary : public IEntityFactoryDictionary +{ +public: + CEntityFactoryDictionary(); + + virtual void InstallFactory( IEntityFactory *pFactory, const char *pClassName ); + virtual IServerNetworkable *Create( const char *pClassName ); + virtual void Destroy( const char *pClassName, IServerNetworkable *pNetworkable ); + virtual const char *GetCannonicalName( const char *pClassName ); + void ReportEntitySizes(); + +private: + IEntityFactory *FindFactory( const char *pClassName ); +public: + CUtlDict< IEntityFactory *, unsigned short > m_Factories; +}; + +#endif //_INCLUDE_SOURCEMOD_UTIL_H_ diff --git a/extensions/sdktools/vhelpers.cpp b/extensions/sdktools/vhelpers.cpp index 571abdd0..49a83b3d 100644 --- a/extensions/sdktools/vhelpers.cpp +++ b/extensions/sdktools/vhelpers.cpp @@ -30,6 +30,7 @@ */ #include "extension.h" +#include "util.h" #include "vhelpers.h" CallHelper s_Teleport; @@ -501,3 +502,116 @@ CON_COMMAND(sm_dump_netprops, "Dumps the networkable property table as a text fi fclose(fp); } +#if defined SUBPLATFORM_SECURECRT +void _ignore_invalid_parameter( + const wchar_t * expression, + const wchar_t * function, + const wchar_t * file, + unsigned int line, + uintptr_t pReserved + ) +{ + /* Wow we don't care, thanks Microsoft. */ +} +#endif + +CON_COMMAND(sm_dump_classes, "Dumps the class list as a text file") +{ +#if !defined ORANGEBOX_BUILD + CCommand args; +#endif + + if (args.ArgC() < 2) + { + META_CONPRINT("Usage: sm_dump_classes <file>\n"); + return; + } + + const char *file = args.Arg(1); + if (!file || file[0] == '\0') + { + META_CONPRINT("Usage: sm_dump_classes <file>\n"); + return; + } + + ICallWrapper *pWrapper = NULL; + + if (!pWrapper) + { + PassInfo retData; + retData.flags = PASSFLAG_BYVAL; + retData.size = sizeof(void *); + retData.type = PassType_Basic; + + void *addr; + if (!g_pGameConf->GetMemSig("EntityFactory", &addr) || addr == NULL) + { + META_CONPRINT("Failed to locate function\n"); + return; + } + + pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retData, NULL, 0); + } + + + void *returnData = NULL; + + pWrapper->Execute(NULL, &returnData); + + pWrapper->Destroy(); + + if (returnData == NULL) + { + return; + } + + CEntityFactoryDictionary *dict = ( CEntityFactoryDictionary * )returnData; + + if ( !dict ) + { + return; + } + + char path[PLATFORM_MAX_PATH]; + g_pSM->BuildPath(Path_Game, path, sizeof(path), "%s", file); + + FILE *fp = NULL; + if ((fp = fopen(path, "wt")) == NULL) + { + META_CONPRINTF("Could not open file \"%s\"\n", path); + return; + } + + char buffer[80]; + buffer[0] = 0; + +#if defined SUBPLATFORM_SECURECRT + _invalid_parameter_handler handler = _set_invalid_parameter_handler(_ignore_invalid_parameter); +#endif + + time_t t = g_pSM->GetAdjustedTime(); + size_t written = strftime(buffer, sizeof(buffer), "%d/%m/%Y", localtime(&t)); + +#if defined SUBPLATFORM_SECURECRT + _set_invalid_parameter_handler(handler); +#endif + + fprintf(fp, "// Dump of all classes for \"%s\" as at %s\n//\n\n", g_pSM->GetGameFolderName(), buffer); + + for ( int i = dict->m_Factories.First(); i != dict->m_Factories.InvalidIndex(); i = dict->m_Factories.Next( i ) ) + { + IServerNetworkable *entity = dict->Create(dict->m_Factories.GetElementName(i)); + ServerClass *sclass = entity->GetServerClass(); + fprintf(fp,"%s - %s\n",sclass->GetName(), dict->m_Factories.GetElementName(i)); + + typedescription_t *datamap = gamehelpers->FindInDataMap(gamehelpers->GetDataMap(entity->GetBaseEntity()), "m_iEFlags"); + + int *eflags = (int *)((char *)entity->GetBaseEntity() + datamap->fieldOffset[TD_OFFSET_NORMAL]); + *eflags |= (1<<0); // EFL_KILLME + } + + fclose(fp); + +} + + diff --git a/gamedata/sdktools.games.ep2.txt b/gamedata/sdktools.games.ep2.txt index 93afb06d..65a430be 100644 --- a/gamedata/sdktools.games.ep2.txt +++ b/gamedata/sdktools.games.ep2.txt @@ -278,4 +278,17 @@ } } } + /* EntityFactoryDictionary function */ + "#default" + { + "Signatures" + { + "EntityFactory" + { + "library" "server" + "windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3" + "linux" "@_Z23EntityFactoryDictionaryv" + } + } + } } diff --git a/gamedata/sdktools.games.txt b/gamedata/sdktools.games.txt index 9ce214c5..cd53d356 100644 --- a/gamedata/sdktools.games.txt +++ b/gamedata/sdktools.games.txt @@ -1679,5 +1679,19 @@ } } } + + /* EntityFactoryDictionary function */ + "#default" + { + "Signatures" + { + "EntityFactory" + { + "library" "server" + "windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3" + "linux" "@_Z23EntityFactoryDictionaryv" + } + } + } } From f5c9a0c3e530c39612b9d735607bb6356e5243ab Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 02:12:47 +0000 Subject: [PATCH 238/263] updated comment at top of pluginsys header --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401929 --- core/systems/PluginSys.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index 6a607797..6fa4b7e4 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -59,6 +59,10 @@ using namespace SourceHook; /** * NOTES: * + * UPDATE 2008-03-11: These comments are horribly out of date. They paint a good overall + * picture of how PluginSys works, but things like dependencies and fake natives have + * complicated things quite a bit. + * * Currently this system needs a lot of work but it's good skeletally. Plugin creation * is done without actually compiling anything. This is done by Load functions in the * manager. This will need a rewrite when we add context switching. From b10bf9d31a04ec63cdccb6a4bbcb96bf53cee0f6 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Wed, 12 Mar 2008 02:13:08 +0000 Subject: [PATCH 239/263] Fixed linux build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401930 --- extensions/sdktools/util.h | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/extensions/sdktools/util.h b/extensions/sdktools/util.h index 12404557..2aa42160 100644 --- a/extensions/sdktools/util.h +++ b/extensions/sdktools/util.h @@ -42,35 +42,6 @@ public: virtual size_t GetEntitySize() = 0; }; -template <class T> -class CEntityFactory : public IEntityFactory -{ -public: - CEntityFactory( const char *pClassName ) - { - EntityFactoryDictionary()->InstallFactory( this, pClassName ); - } - - IServerNetworkable *Create( const char *pClassName ) - { - T* pEnt = _CreateEntityTemplate((T*)NULL, pClassName); - return pEnt->NetworkProp(); - } - - void Destroy( IServerNetworkable *pNetworkable ) - { - if ( pNetworkable ) - { - pNetworkable->Release(); - } - } - - virtual size_t GetEntitySize() - { - return sizeof(T); - } -}; - abstract_class IEntityFactoryDictionary { public: @@ -81,7 +52,6 @@ public: virtual const char *GetCannonicalName( const char *pClassName ) = 0; }; - class CEntityFactoryDictionary : public IEntityFactoryDictionary { public: From aed775162c9464e94eab1441fabfe96a415d7340 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 03:33:52 +0000 Subject: [PATCH 240/263] reworked antiflood. it now has some logic in core to take care of loading order nastiness, and to fully prevent trigger spamming --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401931 --- core/ChatTriggers.cpp | 87 ++++++++++++++++++++++++++++++++++- core/ChatTriggers.h | 8 ++++ core/ConCmdManager.cpp | 24 ++++++++-- core/Translator.cpp | 39 ++++++++++------ core/Translator.h | 7 +++ plugins/antiflood.sp | 80 +++++++++++++++++++------------- plugins/include/sourcemod.inc | 26 +++++++++++ 7 files changed, 219 insertions(+), 52 deletions(-) diff --git a/core/ChatTriggers.cpp b/core/ChatTriggers.cpp index e7526b94..c0b00aae 100644 --- a/core/ChatTriggers.cpp +++ b/core/ChatTriggers.cpp @@ -34,6 +34,8 @@ #include "sm_stringutil.h" #include "ConCmdManager.h" #include "PlayerManager.h" +#include "Translator.h" +#include "HalfLife2.h" /* :HACKHACK: We can't SH_DECL here because ConCmdManager.cpp does. * While the OB build only runs on MM:S 1.6.0+ (SH 5+), the older one @@ -55,6 +57,7 @@ extern bool __SourceHook_FHAddConCommandDispatch(void *, bool, class fastdelegat ChatTriggers g_ChatTriggers; bool g_bSupressSilentFails = false; +CPhraseFile *g_pFloodPhrases = NULL; ChatTriggers::ChatTriggers() : m_pSayCmd(NULL), m_bWillProcessInPost(false), m_bTriggerWasSilent(false), m_ReplyTo(SM_REPLY_CONSOLE) @@ -103,6 +106,20 @@ ConfigResult ChatTriggers::OnSourceModConfigChanged(const char *key, return ConfigResult_Ignore; } +void ChatTriggers::OnSourceModAllInitialized() +{ + m_pShouldFloodBlock = g_Forwards.CreateForward("OnClientFloodCheck", ET_Event, 1, NULL, Param_Cell); + m_pDidFloodBlock = g_Forwards.CreateForward("OnClientFloodResult", ET_Event, 2, NULL, Param_Cell, Param_Cell); +} + +void ChatTriggers::OnSourceModAllInitialized_Post() +{ + unsigned int file_id; + + file_id = g_Translator.FindOrAddPhraseFile("antiflood.phrases.txt"); + g_pFloodPhrases = g_Translator.GetFileByIndex(file_id); +} + void ChatTriggers::OnSourceModGameInitialized() { unsigned int total = 2; @@ -155,6 +172,9 @@ void ChatTriggers::OnSourceModShutdown() SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Post, true); SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Pre, false); } + + g_Forwards.ReleaseForward(m_pShouldFloodBlock); + g_Forwards.ReleaseForward(m_pDidFloodBlock); } #if defined ORANGEBOX_BUILD @@ -167,6 +187,7 @@ void ChatTriggers::OnSayCommand_Pre() #endif int client = g_ConCmds.GetCommandClient(); m_bIsChatTrigger = false; + m_bWasFloodedMessage = false; /* The server console cannot do this */ if (client == 0) @@ -181,6 +202,35 @@ void ChatTriggers::OnSayCommand_Pre() RETURN_META(MRES_IGNORED); } + /* Check if we need to block this message from being sent */ + if (ClientIsFlooding(client)) + { + char buffer[128]; + + /* :TODO: log an error? */ + if (g_Translator.CoreTransEx(g_pFloodPhrases, + client, + buffer, + sizeof(buffer), + "Flooding the server", + NULL, + NULL) + != Trans_Okay) + { + UTIL_Format(buffer, sizeof(buffer), "You are flooding the server!"); + } + + /* :TODO: we should probably kick people who spam too much. */ + + char fullbuffer[192]; + UTIL_Format(fullbuffer, sizeof(fullbuffer), "[SM] %s", buffer); + g_HL2.TextMsg(client, HUD_PRINTTALK, fullbuffer); + + m_bWasFloodedMessage = true; + + RETURN_META(MRES_SUPERCEDE); + } + /* Handle quoted string sets */ bool is_quoted = false; if (args[0] == '"') @@ -197,7 +247,9 @@ void ChatTriggers::OnSayCommand_Pre() { is_trigger = true; args = &args[m_PubTriggerSize]; - } else if (m_PrivTriggerSize && strncmp(args, m_PrivTrigger, m_PrivTriggerSize) == 0) { + } + else if (m_PrivTriggerSize && strncmp(args, m_PrivTrigger, m_PrivTriggerSize) == 0) + { is_trigger = true; is_silent = true; args = &args[m_PrivTriggerSize]; @@ -250,6 +302,7 @@ void ChatTriggers::OnSayCommand_Post() #endif { m_bIsChatTrigger = false; + m_bWasFloodedMessage = false; if (m_bWillProcessInPost) { /* Reset this for re-entrancy */ @@ -355,3 +408,35 @@ bool ChatTriggers::IsChatTrigger() { return m_bIsChatTrigger; } + +bool ChatTriggers::ClientIsFlooding(int client) +{ + bool is_flooding = false; + + if (m_pShouldFloodBlock->GetFunctionCount() != 0) + { + cell_t res = 0; + + m_pShouldFloodBlock->PushCell(client); + m_pShouldFloodBlock->Execute(&res); + + if (res != 0) + { + is_flooding = true; + } + } + + if (m_pDidFloodBlock->GetFunctionCount() != 0) + { + m_pDidFloodBlock->PushCell(client); + m_pDidFloodBlock->PushCell(is_flooding ? 1 : 0); + m_pDidFloodBlock->Execute(NULL); + } + + return is_flooding; +} + +bool ChatTriggers::WasFloodedMessage() +{ + return m_bWasFloodedMessage; +} diff --git a/core/ChatTriggers.h b/core/ChatTriggers.h index c4adbb4a..0da7e549 100644 --- a/core/ChatTriggers.h +++ b/core/ChatTriggers.h @@ -36,6 +36,7 @@ #include "sourcemm_api.h" #include <IGameHelpers.h> #include <compat_wrappers.h> +#include <IForwardSys.h> class ChatTriggers : public SMGlobalClass { @@ -43,6 +44,8 @@ public: ChatTriggers(); ~ChatTriggers(); public: //SMGlobalClass + void OnSourceModAllInitialized(); + void OnSourceModAllInitialized_Post(); void OnSourceModGameInitialized(); void OnSourceModShutdown(); ConfigResult OnSourceModConfigChanged(const char *key, @@ -62,8 +65,10 @@ public: unsigned int GetReplyTo(); unsigned int SetReplyTo(unsigned int reply); bool IsChatTrigger(); + bool WasFloodedMessage(); private: bool PreProcessTrigger(edict_t *pEdict, const char *args, bool is_quoted); + bool ClientIsFlooding(int client); private: ConCommand *m_pSayCmd; ConCommand *m_pSayTeamCmd; @@ -74,8 +79,11 @@ private: bool m_bWillProcessInPost; bool m_bTriggerWasSilent; bool m_bIsChatTrigger; + bool m_bWasFloodedMessage; unsigned int m_ReplyTo; char m_ToExecute[300]; + IForward *m_pShouldFloodBlock; + IForward *m_pDidFloodBlock; }; extern ChatTriggers g_ChatTriggers; diff --git a/core/ConCmdManager.cpp b/core/ConCmdManager.cpp index 8e27b477..9c7c5d92 100644 --- a/core/ConCmdManager.cpp +++ b/core/ConCmdManager.cpp @@ -299,6 +299,16 @@ void ConCmdManager::InternalDispatch(const CCommand &command) return; } + /* This is a hack to prevent say triggers from firing on messages that were + * blocked because of flooding. We won't remove this, but the hack will get + * "nicer" when we expose explicit say hooks. + */ + if (META_RESULT_STATUS == MRES_SUPERCEDE + && g_ChatTriggers.WasFloodedMessage()) + { + return; + } + cell_t result = Pl_Continue; int args = command.ArgC() - 1; @@ -456,7 +466,9 @@ bool ConCmdManager::CheckCommandAccess(int client, const char *cmd, FlagBits cmd if (rule == Command_Allow) { return true; - } else if (rule == Command_Deny) { + } + else if (rule == Command_Deny) + { return false; } } @@ -486,18 +498,20 @@ bool ConCmdManager::CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmi if (g_Translator.CoreTrans(client, buffer, sizeof(buffer), "No Access", NULL, NULL) != Trans_Okay) { - snprintf(buffer, sizeof(buffer), "You do not have access to this command"); + UTIL_Format(buffer, sizeof(buffer), "You do not have access to this command"); } unsigned int replyto = g_ChatTriggers.GetReplyTo(); if (replyto == SM_REPLY_CONSOLE) { char fullbuffer[192]; - snprintf(fullbuffer, sizeof(fullbuffer), "[SM] %s.\n", buffer); + UTIL_Format(fullbuffer, sizeof(fullbuffer), "[SM] %s.\n", buffer); engine->ClientPrintf(pEdict, fullbuffer); - } else if (replyto == SM_REPLY_CHAT) { + } + else if (replyto == SM_REPLY_CHAT) + { char fullbuffer[192]; - snprintf(fullbuffer, sizeof(fullbuffer), "[SM] %s.", buffer); + UTIL_Format(fullbuffer, sizeof(fullbuffer), "[SM] %s.", buffer); g_HL2.TextMsg(client, HUD_PRINTTALK, fullbuffer); } diff --git a/core/Translator.cpp b/core/Translator.cpp index 938ad8af..004d8903 100644 --- a/core/Translator.cpp +++ b/core/Translator.cpp @@ -949,25 +949,19 @@ size_t Translator::Translate(char *buffer, size_t maxlength, void **params, cons return gnprintf(buffer, maxlength, pTrans->szPhrase, new_params); } -TransError Translator::CoreTrans(int client, - char *buffer, - size_t maxlength, - const char *phrase, - void **params, - size_t *outlen) +TransError Translator::CoreTransEx(CPhraseFile *pFile, + int client, + char *buffer, + size_t maxlength, + const char *phrase, + void **params, + size_t *outlen) { - /* :TODO: do language stuff here */ - - if (!g_pCorePhrases) - { - return Trans_BadPhraseFile; - } - Translation trans; TransError err; - + /* Using server lang temporarily until client lang stuff is implemented */ - if ((err=g_pCorePhrases->GetTranslation(phrase, m_ServerLang, &trans)) != Trans_Okay) + if ((err = pFile->GetTranslation(phrase, m_ServerLang, &trans)) != Trans_Okay) { return err; } @@ -982,6 +976,21 @@ TransError Translator::CoreTrans(int client, return Trans_Okay; } +TransError Translator::CoreTrans(int client, + char *buffer, + size_t maxlength, + const char *phrase, + void **params, + size_t *outlen) +{ + if (!g_pCorePhrases) + { + return Trans_BadPhraseFile; + } + + return CoreTransEx(g_pCorePhrases, client, buffer, maxlength, phrase, params, outlen); +} + unsigned int Translator::GetServerLanguage() { return m_ServerLang; diff --git a/core/Translator.h b/core/Translator.h index 6ae3b13f..cd3f835d 100644 --- a/core/Translator.h +++ b/core/Translator.h @@ -140,6 +140,13 @@ public: bool GetLanguageByName(const char *name, unsigned int *index); size_t Translate(char *buffer, size_t maxlength, void **params, const Translation *pTrans); CPhraseFile *GetFileByIndex(unsigned int index); + TransError CoreTransEx(CPhraseFile *pFile, + int client, + char *buffer, + size_t maxlength, + const char *phrase, + void **params, + size_t *outlen=NULL); TransError CoreTrans(int client, char *buffer, size_t maxlength, diff --git a/plugins/antiflood.sp b/plugins/antiflood.sp index b74d71c4..c965745a 100644 --- a/plugins/antiflood.sp +++ b/plugins/antiflood.sp @@ -51,10 +51,6 @@ new Handle:sm_flood_time; /* Handle to sm_flood_time convar */ public OnPluginStart() { - LoadTranslations("antiflood.phrases"); - - RegConsoleCmd("say", CheckChatFlood); - RegConsoleCmd("say_team", CheckChatFlood); sm_flood_time = CreateConVar("sm_flood_time", "0.75", "Amount of time allowed between chat messages"); } @@ -64,41 +60,63 @@ public OnClientPutInServer(client) g_FloodTokens[client] = 0; } -public Action:CheckChatFlood(client, args) +new Float:max_chat; + +public bool:OnClientFloodCheck(client) { - /* Chat from server console shouldn't be checked for flooding */ - if (client == 0) + max_chat = GetConVarFloat(sm_flood_time); + + if (max_chat <= 0.0 + || (GetUserFlagBits(client) & ADMFLAG_ROOT) == ADMFLAG_ROOT) { - return Plugin_Continue; + return false; } - new Float:maxChat = GetConVarFloat(sm_flood_time); + PrintToServer("OCFC: %f %f %d", g_LastTime[client], GetGameTime(), g_FloodTokens[client]); - if (maxChat > 0.0) + if (g_LastTime[client] > GetGameTime()) { - new Float:curTime = GetGameTime(); - - if (g_LastTime[client] > curTime) + /* If player has 3 or more flood tokens, block their message */ + if (g_FloodTokens[client] >= 3) { - /* If player has 3 or more flood tokens, block their message */ - if (g_FloodTokens[client] >= 3) - { - PrintToChat(client, "[SM] %t", "Flooding the server"); - g_LastTime[client] = curTime + maxChat + 3.0; - - return Plugin_Stop; - } - - /* Add one flood token when player goes over chat time limit */ - g_FloodTokens[client]++; - } else if (g_FloodTokens[client]) { - /* Remove one flood token when player chats within time limit (slow decay) */ - g_FloodTokens[client]--; + return true; } - - /* Store last time of chat usage */ - g_LastTime[client] = curTime + maxChat; } - return Plugin_Continue; + return false; +} + +public OnClientFloodResult(client, bool:blocked) +{ + if (max_chat <= 0.0 + || (GetUserFlagBits(client) & ADMFLAG_ROOT) == ADMFLAG_ROOT) + { + return; + } + + new Float:curTime = GetGameTime(); + new Float:newTime = curTime + max_chat; + + PrintToServer("OCFR: %f, %f", g_LastTime[client], GetGameTime()); + + if (g_LastTime[client] > curTime) + { + /* If the last message was blocked, update their time limit */ + if (blocked) + { + newTime += 3.0; + } + /* Add one flood token when player goes over chat time limit */ + else if (g_FloodTokens[client] < 3) + { + g_FloodTokens[client]++; + } + } + else if (g_FloodTokens[client] > 0) + { + /* Remove one flood token when player chats within time limit (slow decay) */ + g_FloodTokens[client]--; + } + + g_LastTime[client] = newTime; } diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index dea00ddb..9fdd0985 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -505,6 +505,32 @@ native Handle:ReadMapList(Handle:array=INVALID_HANDLE, */ native SetMapListCompatBind(const String:name[], const String:file[]); +/** + * Called when a client has sent chat text. This must return either true or + * false to indicate that a client is or is not spamming the server. + * + * The return value is a hint only. Core or another plugin may decide + * otherwise. + * + * @param client Client index. The server (0) will never be passed. + * @return True if client is spamming the server, false otherwise. + */ +forward bool:OnClientFloodCheck(client); + +/** + * Called after a client's flood check has been computed. This can be used + * by antiflood algorithms to decay/increase flooding weights. + * + * Since the result from "OnClientFloodCheck" isn't guaranteed to be the + * final result, it is generally a good idea to use this to play with other + * algorithms nicely. + * + * @param client Client index. The server (0) will never be passed. + * @param blocked True if client flooded last "say", false otherwise. + * @noreturn + */ +forward OnClientFloodResult(client, bool:blocked); + #include <helpers> #include <entity> #include <entity_prop_stocks> From 100c3ae389ed224bb7375788aa05f76e0cbb73e3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 04:06:32 +0000 Subject: [PATCH 241/263] implemented amb1514 - SM_PARAM_STRING_BINARY (bumped ISourceMod for this) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401932 --- core/vm/sp_vm_function.cpp | 36 +++++++++++++++++++++++++++++------ plugins/include/functions.inc | 4 ++++ public/ISourceMod.h | 2 +- public/sourcepawn/sp_vm_api.h | 8 +++++++- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/core/vm/sp_vm_function.cpp b/core/vm/sp_vm_function.cpp index 30615034..4a008120 100644 --- a/core/vm/sp_vm_function.cpp +++ b/core/vm/sp_vm_function.cpp @@ -200,10 +200,12 @@ void CFunction::Cancel() int CFunction::Execute(cell_t *result) { int err = SP_ERROR_NONE; + if (!IsRunnable()) { m_errorstate = SP_ERROR_NOT_RUNNABLE; } + if (m_errorstate != SP_ERROR_NONE) { err = m_errorstate; @@ -245,7 +247,9 @@ int CFunction::Execute(cell_t *result) { memcpy(temp_info[i].phys_addr, temp_info[i].orig_addr, sizeof(cell_t) * temp_info[i].size); } - } else { + } + else + { /* Calculate cells required for the string */ size_t cells = (temp_info[i].size + sizeof(cell_t) - 1) / sizeof(cell_t); @@ -260,6 +264,7 @@ int CFunction::Execute(cell_t *result) /* Copy original string if necessary */ if ((temp_info[i].str.sz_flags & SM_PARAM_STRING_COPY) && (temp_info[i].orig_addr != NULL)) { + /* Cut off UTF-8 properly */ if (temp_info[i].str.sz_flags & SM_PARAM_STRING_UTF8) { if ((err=m_pContext->StringToLocalUTF8(temp_info[i].local_addr, @@ -270,7 +275,15 @@ int CFunction::Execute(cell_t *result) { break; } - } else { + } + /* Copy a binary blob */ + else if (temp_info[i].str.sz_flags & SM_PARAM_STRING_BINARY) + { + memmove(temp_info[i].phys_addr, temp_info[i].orig_addr, temp_info[i].size); + } + /* Copy ASCII characters */ + else + { if ((err=m_pContext->StringToLocal(temp_info[i].local_addr, temp_info[i].size, (const char *)temp_info[i].orig_addr)) @@ -283,7 +296,9 @@ int CFunction::Execute(cell_t *result) } /* End array/string calculation */ /* Update the pushed parameter with the byref local address */ temp_params[i] = temp_info[i].local_addr; - } else { + } + else + { /* Just copy the value normally */ temp_params[i] = m_params[i]; } @@ -296,7 +311,9 @@ int CFunction::Execute(cell_t *result) { docopies = false; } - } else { + } + else + { docopies = false; } @@ -307,6 +324,7 @@ int CFunction::Execute(cell_t *result) { continue; } + if (docopies && (temp_info[i].flags & SM_PARAM_COPYBACK)) { if (temp_info[i].orig_addr) @@ -314,11 +332,16 @@ int CFunction::Execute(cell_t *result) if (temp_info[i].str.is_sz) { memcpy(temp_info[i].orig_addr, temp_info[i].phys_addr, temp_info[i].size); - } else { + + } + else + { if (temp_info[i].size == 1) { *temp_info[i].orig_addr = *(temp_info[i].phys_addr); - } else { + } + else + { memcpy(temp_info[i].orig_addr, temp_info[i].phys_addr, temp_info[i].size * sizeof(cell_t)); @@ -326,6 +349,7 @@ int CFunction::Execute(cell_t *result) } } } + if ((err=m_pContext->HeapPop(temp_info[i].local_addr)) != SP_ERROR_NONE) { return err; diff --git a/plugins/include/functions.inc b/plugins/include/functions.inc index bef2f22c..8cd69bf4 100644 --- a/plugins/include/functions.inc +++ b/plugins/include/functions.inc @@ -61,9 +61,12 @@ enum ExecType /** * @section Flags that are used with Call_PushArrayEx() and Call_PushStringEx() */ + #define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */ + #define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */ #define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */ +#define SM_PARAM_STRING_BINARY (1<<2) /**< Treat the string as a binary string */ /** * @endsection @@ -311,6 +314,7 @@ native Call_PushString(const String:value[]); * @param length Length of string buffer. * @param szflags Flags determining how string should be handled. * See SP_PARAM_STRING_* constants for details. + * The default (0) is to push ASCII. * @param cpflags Whether or not changes should be copied back to the input array. * See SP_PARAM_* constants for details. * @noreturn diff --git a/public/ISourceMod.h b/public/ISourceMod.h index 66b21090..06f1650b 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -43,7 +43,7 @@ #include <time.h> #define SMINTERFACE_SOURCEMOD_NAME "ISourceMod" -#define SMINTERFACE_SOURCEMOD_VERSION 6 +#define SMINTERFACE_SOURCEMOD_VERSION 7 /** * @brief Forward declaration of the KeyValues class. diff --git a/public/sourcepawn/sp_vm_api.h b/public/sourcepawn/sp_vm_api.h index b0f4b917..100dcaaa 100644 --- a/public/sourcepawn/sp_vm_api.h +++ b/public/sourcepawn/sp_vm_api.h @@ -61,9 +61,13 @@ namespace SourcePawn { class IVirtualMachine; + /* Parameter flags */ #define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */ + + /* String parameter flags (separate from parameter flags) */ #define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */ #define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */ + #define SM_PARAM_STRING_BINARY (1<<2) /**< String should be handled as binary data */ #if defined SOURCEMOD_BUILD /** @@ -151,11 +155,13 @@ namespace SourcePawn /** * @brief Pushes a string or string buffer. + * * NOTE: On Execute, the pointer passed will be modified if copy-back is enabled. * * @param buffer Pointer to string buffer. * @param length Length of buffer. - * @param sz_flags String flags. + * @param sz_flags String flags. In copy mode, the string will be copied + * according to the handling (ascii, utf-8, binary, etc). * @param cp_flags Copy-back flags. * @return Error code, if any. */ From 39885cd9e714763b448183bfbd5e04895d23aa79 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 04:51:41 +0000 Subject: [PATCH 242/263] fixed crash bug in new antiflood code --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401933 --- core/ConCmdManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/ConCmdManager.cpp b/core/ConCmdManager.cpp index 9c7c5d92..ec112f78 100644 --- a/core/ConCmdManager.cpp +++ b/core/ConCmdManager.cpp @@ -303,8 +303,7 @@ void ConCmdManager::InternalDispatch(const CCommand &command) * blocked because of flooding. We won't remove this, but the hack will get * "nicer" when we expose explicit say hooks. */ - if (META_RESULT_STATUS == MRES_SUPERCEDE - && g_ChatTriggers.WasFloodedMessage()) + if (g_ChatTriggers.WasFloodedMessage()) { return; } From 94da06c69fbae22e101f8aa3fec720aac95f3dfa Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 05:21:56 +0000 Subject: [PATCH 243/263] addressed amb1498 - GetSoundDuration() is broken on valve's end --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401934 --- plugins/include/sdktools_sound.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/include/sdktools_sound.inc b/plugins/include/sdktools_sound.inc index c60c19a6..aa51cfa2 100644 --- a/plugins/include/sdktools_sound.inc +++ b/plugins/include/sdktools_sound.inc @@ -130,11 +130,13 @@ enum native PrefetchSound(const String:nane[]); /** - * Gets a sound's duration (does not work for mp3s). + * This function is not known to work, and may crash. You should + * not use it. It is provided for backwards compatibility only. * * @param name Sound file name relative to the "sounds" folder. * @return Duration in seconds. */ +#pragma deprecated Does not work, may crash. native Float:GetSoundDuration(const String:name[]); /** From f9eed97d66be8adb48ecd3c15381267f01623ca3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 12 Mar 2008 06:08:56 +0000 Subject: [PATCH 244/263] removed unused extensions/games and extensions/auto.2.ep1 folders --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401935 --- tools/builder/PkgCore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index 0067e441..e0d3a9c3 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -56,7 +56,7 @@ namespace builder folders.Add("addons/sourcemod/configs/sql-init-scripts"); folders.Add("addons/sourcemod/configs/sql-init-scripts/mysql"); folders.Add("addons/sourcemod/configs/sql-init-scripts/sqlite"); - folders.Add("addons/sourcemod/extensions/games"); + //folders.Add("addons/sourcemod/extensions/games"); folders.Add("addons/sourcemod/scripting/basecommands"); folders.Add("addons/sourcemod/scripting/basecomm"); folders.Add("addons/sourcemod/scripting/funvotes"); @@ -64,7 +64,7 @@ namespace builder folders.Add("addons/sourcemod/scripting/basebans"); folders.Add("addons/sourcemod/scripting/funcommands"); folders.Add("addons/sourcemod/extensions/auto.1.ep1"); - folders.Add("addons/sourcemod/extensions/auto.2.ep1"); + //folders.Add("addons/sourcemod/extensions/auto.2.ep1"); folders.Add("addons/sourcemod/extensions/auto.2.ep2"); folders.Add("addons/sourcemod/scripting/playercommands"); folders.Add("addons/metamod"); From 44eb5a9cf44ac46256381b871a44a0016b45cfa3 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Fri, 14 Mar 2008 02:48:43 +0000 Subject: [PATCH 245/263] fixed tTERM overlapping with tUNDEF (thanks sawce) --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401938 --- sourcepawn/compiler/sc.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sourcepawn/compiler/sc.h b/sourcepawn/compiler/sc.h index ea3ad048..b6a59971 100644 --- a/sourcepawn/compiler/sc.h +++ b/sourcepawn/compiler/sc.h @@ -373,16 +373,16 @@ typedef struct s_stringpair { #define tpTRYINCLUDE 332 #define tpUNDEF 333 /* semicolon is a special case, because it can be optional */ -#define tTERM 333 /* semicolon or newline */ -#define tENDEXPR 334 /* forced end of expression */ +#define tTERM 334 /* semicolon or newline */ +#define tENDEXPR 335 /* forced end of expression */ /* other recognized tokens */ -#define tNUMBER 335 /* integer number */ -#define tRATIONAL 336 /* rational number */ -#define tSYMBOL 337 -#define tLABEL 338 -#define tSTRING 339 -#define tEXPR 340 /* for assigment to "lastst" only (see SC1.C) */ -#define tENDLESS 341 /* endless loop, for assigment to "lastst" only */ +#define tNUMBER 336 /* integer number */ +#define tRATIONAL 337 /* rational number */ +#define tSYMBOL 338 +#define tLABEL 339 +#define tSTRING 340 +#define tEXPR 341 /* for assigment to "lastst" only (see SC1.C) */ +#define tENDLESS 342 /* endless loop, for assigment to "lastst" only */ /* (reversed) evaluation of staging buffer */ #define sSTARTREORDER 0x01 From 76f1c1040900cc26e0ed4d7ce30321f56ecf61b4 Mon Sep 17 00:00:00 2001 From: Matt Woodrow <pred@alliedmods.net> Date: Fri, 14 Mar 2008 06:11:01 +0000 Subject: [PATCH 246/263] Updated sample_ext project files to support building for both engines. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401939 --- public/sample_ext/msvc8/sdk.sln | 20 ++-- public/sample_ext/msvc8/sdk.vcproj | 169 ++++++++++++++++++++++++++++- 2 files changed, 179 insertions(+), 10 deletions(-) diff --git a/public/sample_ext/msvc8/sdk.sln b/public/sample_ext/msvc8/sdk.sln index a7b266be..073a4358 100644 --- a/public/sample_ext/msvc8/sdk.sln +++ b/public/sample_ext/msvc8/sdk.sln @@ -1,18 +1,24 @@  Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +# Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdk", "sdk.vcproj", "{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 + Debug - Episode 1|Win32 = Debug - Episode 1|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Release - Episode 1|Win32 = Release - Episode 1|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug|Win32.Build.0 = Debug|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release|Win32.ActiveCfg = Release|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release|Win32.Build.0 = Release|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode 1|Win32.ActiveCfg = Debug|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode 1|Win32.Build.0 = Debug|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.ActiveCfg = Release|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.Build.0 = Release|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/public/sample_ext/msvc8/sdk.vcproj b/public/sample_ext/msvc8/sdk.vcproj index cc1c4ac4..c90623c8 100644 --- a/public/sample_ext/msvc8/sdk.vcproj +++ b/public/sample_ext/msvc8/sdk.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="8,00" + Version="8.00" Name="sdk" ProjectGUID="{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" RootNamespace="sdk" @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn" + AdditionalIncludeDirectories="..;..\sdk;;..\systems;..\..\;..\..\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM142)";"$(SOURCEMM142)\sourcemm";"$(SOURCEMM142)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -63,6 +63,7 @@ /> <Tool Name="VCLinkerTool" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sample.ext.dll" LinkIncremental="2" GenerateDebugInformation="true" @@ -120,7 +121,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn" + AdditionalIncludeDirectories="..;..\sdk;;..\systems;..\..\;..\..\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM142)";"$(SOURCEMM142)\sourcemm";"$(SOURCEMM142)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -141,6 +142,168 @@ /> <Tool Name="VCLinkerTool" + AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\sample.ext.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\;..\sdk;..\systems;..\..\;..\..\sourcepawn;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\sample.ext.dll" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..\;..\sdk;..\systems;..\..\;..\..\sourcepawn;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\sample.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" From 2583e7e69eb1b0cb244070008facbd46b6370be2 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Mar 2008 22:32:03 +0000 Subject: [PATCH 247/263] removed debug output fixed an antiflood bug posted on the forums --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401940 --- core/ChatTriggers.cpp | 13 +++++++++++-- plugins/antiflood.sp | 4 ---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/ChatTriggers.cpp b/core/ChatTriggers.cpp index c0b00aae..cf6baa36 100644 --- a/core/ChatTriggers.cpp +++ b/core/ChatTriggers.cpp @@ -185,12 +185,21 @@ void ChatTriggers::OnSayCommand_Pre() { CCommand command; #endif - int client = g_ConCmds.GetCommandClient(); + int client; + CPlayer *pPlayer; + + client = g_ConCmds.GetCommandClient(); m_bIsChatTrigger = false; m_bWasFloodedMessage = false; /* The server console cannot do this */ - if (client == 0) + if (client == 0 || (pPlayer = g_Players.GetPlayerByIndex(client)) == NULL) + { + RETURN_META(MRES_IGNORED); + } + + /* We guarantee the client is connected */ + if (!pPlayer->IsConnected()) { RETURN_META(MRES_IGNORED); } diff --git a/plugins/antiflood.sp b/plugins/antiflood.sp index c965745a..ae39c1e6 100644 --- a/plugins/antiflood.sp +++ b/plugins/antiflood.sp @@ -72,8 +72,6 @@ public bool:OnClientFloodCheck(client) return false; } - PrintToServer("OCFC: %f %f %d", g_LastTime[client], GetGameTime(), g_FloodTokens[client]); - if (g_LastTime[client] > GetGameTime()) { /* If player has 3 or more flood tokens, block their message */ @@ -97,8 +95,6 @@ public OnClientFloodResult(client, bool:blocked) new Float:curTime = GetGameTime(); new Float:newTime = curTime + max_chat; - PrintToServer("OCFR: %f, %f", g_LastTime[client], GetGameTime()); - if (g_LastTime[client] > curTime) { /* If the last message was blocked, update their time limit */ From 3788c61cb9b3cd6758b19254c2e0fd64365c6254 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Mar 2008 22:54:06 +0000 Subject: [PATCH 248/263] removed deprecated natives from sdktools --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401941 --- extensions/sdktools/vnatives.cpp | 3 --- plugins/include/sdktools_functions.inc | 27 -------------------------- 2 files changed, 30 deletions(-) diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index 6416caea..d905fadd 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -873,15 +873,12 @@ static cell_t GetServerNetStats(IPluginContext *pContext, const cell_t *params) sp_nativeinfo_t g_Natives[] = { - {"ExtinguishPlayer", ExtinguishEntity}, {"ExtinguishEntity", ExtinguishEntity}, {"ForcePlayerSuicide", ForcePlayerSuicide}, {"GivePlayerItem", GiveNamedItem}, {"GetPlayerWeaponSlot", GetPlayerWeaponSlot}, - {"IgnitePlayer", IgniteEntity}, {"IgniteEntity", IgniteEntity}, {"RemovePlayerItem", RemovePlayerItem}, - {"TeleportPlayer", TeleportEntity}, {"TeleportEntity", TeleportEntity}, {"SetClientViewEntity", SetClientViewEntity}, {"SetLightStyle", SetLightStyle}, diff --git a/plugins/include/sdktools_functions.inc b/plugins/include/sdktools_functions.inc index e85f544a..1765878c 100644 --- a/plugins/include/sdktools_functions.inc +++ b/plugins/include/sdktools_functions.inc @@ -283,30 +283,3 @@ native bool:GetPlayerDecalFile(client, String:hex[], maxlength); * @noreturn */ native GetServerNetStats(&Float:in, &Float:out); - -/** - * @deprecated - */ -#pragma deprecated Use IgniteEntity() instead -stock IgnitePlayer(client, Float:time, bool:npc=false, Float:size=0.0, bool:level=false) -{ - return IgniteEntity(client, time, npc, size, level); -} - -/** - * @deprecated - */ -#pragma deprecated Use ExtinguishEntity() instead -stock ExtinguishClient(client) -{ - return ExtinguishEntity(client); -} - -/** - * @deprecated - */ -#pragma deprecated Use TeleportEntity() instead -stock TeleportPlayer(client, const Float:origin[3], const Float:angles[3], const Float:velocity[3]) -{ - return TeleportEntity(client, origin, angles, velocity); -} From 074883512a8b56170c419d4fbe524a62d6939df8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Mar 2008 23:08:56 +0000 Subject: [PATCH 249/263] removed core bcompat shims where possible --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401942 --- core/smn_float.cpp | 1 - core/smn_keyvalues.cpp | 2 -- core/smn_player.cpp | 1 - core/smn_string.cpp | 3 --- plugins/include/float.inc | 11 ----------- 5 files changed, 18 deletions(-) diff --git a/core/smn_float.cpp b/core/smn_float.cpp index d1dbc906..7a0fa9d5 100644 --- a/core/smn_float.cpp +++ b/core/smn_float.cpp @@ -308,6 +308,5 @@ REGISTER_NATIVES(floatnatives) {"ArcCosine", sm_ArcCosine}, {"ArcSine", sm_ArcSine}, {"ArcTangent2", sm_ArcTangent2}, - {"FloatRound", sm_FloatRound}, /* Backwards compat shim */ {NULL, NULL} }; diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index c098f40d..183802c1 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -1123,9 +1123,7 @@ REGISTER_NATIVES(keyvaluenatives) {"KvJumpToKey", smn_KvJumpToKey}, {"KvJumpToKeySymbol", smn_KvJumpToKeySymbol}, {"KvGotoNextKey", smn_KvGotoNextKey}, - {"KvJumpFirstSubKey", smn_KvGotoFirstSubKey}, /* BACKWARDS COMPAT SHIM */ {"KvGotoFirstSubKey", smn_KvGotoFirstSubKey}, - {"KvJumpNextSubKey", smn_KvJumpNextSubKey}, /* BACKWARDS COMPAT SHIM */ {"KvGoBack", smn_KvGoBack}, {"KvRewind", smn_KvRewind}, {"KvGetSectionName", smn_KvGetSectionName}, diff --git a/core/smn_player.cpp b/core/smn_player.cpp index 09c3f4e8..5f7d21a6 100644 --- a/core/smn_player.cpp +++ b/core/smn_player.cpp @@ -1347,7 +1347,6 @@ REGISTER_NATIVES(playernatives) {"IsClientAuthorized", sm_IsClientAuthorized}, {"IsClientConnected", sm_IsClientConnected}, {"IsFakeClient", sm_IsClientFakeClient}, - {"IsPlayerInGame", sm_IsClientInGame}, /* Backwards compat shim */ {"IsClientInGame", sm_IsClientInGame}, {"IsClientObserver", IsClientObserver}, {"RemoveUserFlags", RemoveUserFlags}, diff --git a/core/smn_string.cpp b/core/smn_string.cpp index 8202deee..dae6b19f 100644 --- a/core/smn_string.cpp +++ b/core/smn_string.cpp @@ -578,13 +578,10 @@ REGISTER_NATIVES(basicStrings) {"ReplaceStringEx", ReplaceStringEx}, {"SplitString", SplitString}, {"strlen", sm_strlen}, - {"StrBreak", BreakString}, /* Backwards compat shim */ {"StrContains", sm_contain}, {"strcmp", sm_strcmp}, - {"StrCompare", sm_strcmp}, /* Backwards compat shim */ {"strncmp", sm_strncmp}, {"strcopy", sm_strcopy}, - {"StrCopy", sm_strcopy}, /* Backwards compat shim */ {"StringToInt", sm_strconvint}, {"StringToIntEx", StringToIntEx}, {"StringToFloat", sm_strtofloat}, diff --git a/plugins/include/float.inc b/plugins/include/float.inc index fbe6cd59..280e22c1 100644 --- a/plugins/include/float.inc +++ b/plugins/include/float.inc @@ -240,17 +240,6 @@ stock RoundFloat(Float:value) return RoundToNearest(value); } -/** - * Backwards compatibility stock. Do not use. - * - * @deprecated - */ -#pragma deprecated Use RoundToNearest() or RoundFloat() instead -stock FloatRound(Float:value) -{ - return RoundToNearest(value); -} - /** * User defined operators. * From 9581e2b854fb8476706127d1db768554f1cf245c Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Sun, 16 Mar 2008 23:16:34 +0000 Subject: [PATCH 250/263] more deprecation --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401943 --- plugins/include/adt_array.inc | 12 +--------- plugins/include/entity_prop_stocks.inc | 12 ---------- plugins/include/functions.inc | 32 -------------------------- plugins/include/usermessages.inc | 11 --------- 4 files changed, 1 insertion(+), 66 deletions(-) diff --git a/plugins/include/adt_array.inc b/plugins/include/adt_array.inc index 8af2ed8c..d92a8cf4 100644 --- a/plugins/include/adt_array.inc +++ b/plugins/include/adt_array.inc @@ -280,14 +280,4 @@ native FindStringInArray(Handle:array, const String:item[]); * @return Array index, or -1 on failure * @error Invalid Handle */ -native FindValueInArray(Handle:array, item); - -/** - * Backwards compatible stock - Use FindStringInArray() - * @deprecated Replaced by FindStringInArray() - */ -#pragma deprecated Use FindStringInArray() instead -stock bool:IsStringInArray(Handle:array, const String:item[]) -{ - return (FindStringInArray(array, item) != -1); -} +native FindValueInArray(Handle:array, any:item); diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index 4d4fbfbc..b4b5cd64 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -322,15 +322,3 @@ stock GetClientButtons(client) { return GetEntProp(client, Prop_Data, "m_nButtons"); } - -#pragma deprecated Case change, use MoveType version -stock SetEntityMovetype(entity, any:mt) -{ - SetEntityMoveType(entity, MoveType:mt); -} - -#pragma deprecated Case change, use MoveType version -stock GetEntityMovetype(entity) -{ - return _:GetEntityMoveType(entity); -} diff --git a/plugins/include/functions.inc b/plugins/include/functions.inc index 8cd69bf4..1a77f7f1 100644 --- a/plugins/include/functions.inc +++ b/plugins/include/functions.inc @@ -487,35 +487,3 @@ native FormatNativeString(out_param, &written=0, String:out_string[]="", const String:fmt_string[]=""); - -/** - * Backwards compatibility stock - use GetNativeCell or GetNativeCellRef - * - * @deprecated - */ -#pragma deprecated Use GetNativeCell() or GetNativeCellRef() instead -stock Float:GetNativeFloat(param, bool:byref) -{ - if (!byref) - { - return Float:GetNativeCell(param); - } else { - return Float:GetNativeCellRef(param); - } -} - -/** - * Backwards compatibility stock - use GetNativeCell or GetNativeCellRef - * - * @deprecated - */ -#pragma deprecated Use GetNativeCell() or GetNativeCellRef() instead -stock Handle:GetNativeHandle(param, bool:byref) -{ - if (!byref) - { - return Handle:GetNativeCell(param); - } else { - return Handle:GetNativeCellRef(param); - } -} diff --git a/plugins/include/usermessages.inc b/plugins/include/usermessages.inc index 28f78318..79e0e229 100644 --- a/plugins/include/usermessages.inc +++ b/plugins/include/usermessages.inc @@ -50,17 +50,6 @@ enum UserMsg #define USERMSG_INITMSG (1<<3) /**< Message will be considered to be an initmsg */ #define USERMSG_BLOCKHOOKS (1<<7) /**< Prevents the message from triggering SourceMod and Metamod hooks */ -#pragma deprecated Constant has no effect -#define USERMSG_PASSTHRU (1<<0) /**< (DEPRECATED, NO EFFECT) */ -#pragma deprecated Constant has no effect -#define USERMSG_PASSTHRU_ALL (1<<1) /**< (DEPRECATED, NO EFFECT) */ -#pragma deprecated Constant has no effect -#define USERMSG_BLOCK_MM (1<<4) /**< (DEPRECATED, NO EFFECT) */ -#pragma deprecated Constant has no effect -#define USERMSG_BLOCK_SM (1<<5) /**< (DEPRECATED, NO EFFECT) */ -#pragma deprecated Constant has no effect -#define USERMSG_BLOCK_ALL (1<<6) /**< (DEPRECATED, NO EFFECT) */ - /** * @endsection */ From 2a7e1f5bc0f945338a24670a32e04f65c2755318 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sun, 16 Mar 2008 23:36:28 +0000 Subject: [PATCH 251/263] updated to latest geoip database --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401944 --- configs/geoip/GeoIP.dat | Bin 994672 -> 1104406 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configs/geoip/GeoIP.dat b/configs/geoip/GeoIP.dat index 0531b57c7053393b6e2b742ec585f4239268eb6a..e05bf098e71798f98f8c94ddf1f1446651f4812f 100644 GIT binary patch literal 1104406 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¬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%0A{pO<Kyczbbt7 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	^>W0xMjCxW; zmRJ}KNa}}CbEax22a`=^sxmwm+#AMyVcZ`^<M54-y`nb>qp7%>sUDiC+RRklXR2ml zJQPNAmTeJ6t1w!I@gS3ZW~xy$Rq9OpqOmm<@!%qH6Fu}?z#4sFXvv--ie-Q{!7xIO zk_;>yMubh1eu%P*lBZE4Y@f*FV#y>CF%d?aFsv|AXeRbY<XgdV@gGJ<u?gGf;<jNt z7PjxPx06~(+7rdNaHe{kyaVwG;v8u*yIMN=$uPQv(V0UmA3SAfy0W6D7+yE(-HAQI z=ta^qjF&hKWG3_u<7J0SB+rD=Ka9R%^kc)tKn`iefH1~~@hm+L3}ZwXgTfdZ#$XwD z`WzC*>yDr2!&u?)VPOoX!F!G}GK^7S`AZs%4&#L|wo(6LruuQF8XLwqnO%9RQl6@x zryj~veR)=$7{=r<Cb31*dlFA7`{6Zq^^`Dj!<ZUIMi}WFO&KGZhttS2iCM&KVh&Mk z<a{SMoyi$t%p}Qka`VF|aJZhQW`{91Y+uY2hEYUPOe`Um66X+&Jo`<p^Q2?h@E3{m zrO!zg5El}qZ>>E0#Z40Jt6}?s=QXxbbomUph+G=GIE*C@UmC_6<jaW5i84>b?5!}w z&x$Zsle`_qN)i#@Az2m1yCiM%l!$Vy31cmlb&lnFlJ{gD(q=;#o5I-0St_;2#NN!F zm#Jch9mY3dYzgBlHfO7hW*Ga!_$Z8>VQdfM<FI}4wuAUYp86zg-@omgXTM*1R~UQ3 z*d4~FVRWM+V(&b)H;jEWdnQlyqyAYKhr;-r;(;&@(wq2sHt)vwzz>J<MHpYwK%6{J zU6#g?Fus;`D%WZ92sn&m4nH2YujEBM5yp>Ud>h8uFiwW?J=gemVVok7_MRq@6)pS> z`42>CyWD_1N&Pi>|7RG#gz+=8q+a<ja-KaVJExTWHH<_AzlCvU1Q)|77r~`4{t4sv zFs@3>VO$C04|d?NJbQDN<4-1~_+MdM<DwJsZ;GR6^RLXzh`rTcm-P~XiePM>nv|!e z=Giw(Z;IgN2+GnRi}trfa4VCNJ0njO=c)1$REeNM1eGGF7_m3`+Z=;=dFpm5m8mSG z&#DpBpjeGqJ%ZQs)EjxKW(2h&xPziNS&^q|M^Gn%cUfvZ@vaD3MsRlojUuQULH!8o z(O%-eCxQ=YBV`*z(2zB5r*dxuO(VE3g8OOQn7E5sP007<sRtrxPTnkngL�b6Z4k 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%0DpnIZCw@L3^^JZE}miOkO8d65@PMstkjT#=WA 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%0DTfcxt^3_0N8y4_!g|)WAYFxnO1vHUx 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%0ABfDeW}&HZu+tS-Z1WZE)U?X0N#<fB7nE8 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	^4`Eb`Sd46V%t*=<Fx4zwl0L80f*h9^B=@ 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%0Aep8 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	GP3tK}ecehYn%~kx1@; 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%0D^1F(O3erj? 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 literal 994672 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�K8N?ePU(G*qgQZOat5ixf5%UMwsO#*1cNT&j?s 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 From aebdfea1ff3797fbd85c5c0cfd42edf31ca62ec7 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 17 Mar 2008 00:07:58 +0000 Subject: [PATCH 252/263] fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401945 --- core/smn_float.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/smn_float.cpp b/core/smn_float.cpp index 7a0fa9d5..0b15aca2 100644 --- a/core/smn_float.cpp +++ b/core/smn_float.cpp @@ -247,6 +247,7 @@ static cell_t sm_ArcTangent2(IPluginContext *pCtx, const cell_t *params) return sp_ftoc(val1); } +#if 0 static cell_t sm_FloatRound(IPluginContext *pCtx, const cell_t *params) { float val = sp_ctof(params[1]); @@ -282,6 +283,7 @@ static cell_t sm_FloatRound(IPluginContext *pCtx, const cell_t *params) return static_cast<int>(val); } +#endif REGISTER_NATIVES(floatnatives) { From 34204b20438ea277a73a9f887f963491744f5277 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 17 Mar 2008 00:11:01 +0000 Subject: [PATCH 253/263] actually fixed build --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401946 --- core/smn_keyvalues.cpp | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index 183802c1..45cfb93e 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -627,33 +627,6 @@ static cell_t smn_KvGotoNextKey(IPluginContext *pCtx, const cell_t *params) return 1; } -static cell_t smn_KvJumpNextSubKey(IPluginContext *pCtx, const cell_t *params) -{ - Handle_t hndl = static_cast<Handle_t>(params[1]); - HandleError herr; - HandleSecurity sec; - KeyValueStack *pStk; - - sec.pOwner = NULL; - sec.pIdentity = g_pCoreIdent; - - if ((herr=g_HandleSys.ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) - != HandleError_None) - { - return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); - } - - KeyValues *pSubKey = pStk->pCurRoot.front(); - KeyValues *pNextKey = pSubKey->GetNextKey(); - if (!pNextKey) - { - return 0; - } - pStk->pCurRoot.push(pNextKey); - - return 1; -} - static cell_t smn_KvGoBack(IPluginContext *pCtx, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); From eda712cb33b973f4f943f2ff2d3cb6d51a3fabbe Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 17 Mar 2008 01:09:28 +0000 Subject: [PATCH 254/263] bumped versions --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401949 --- core/sm_version.h | 4 +- extensions/bintools/svn_version.h | 4 +- extensions/cstrike/svn_version.h | 6 +-- extensions/geoip/svn_version.h | 4 +- extensions/mysql/svn_version.h | 4 +- extensions/sdktools/svn_version.h | 4 +- extensions/sqlite/svn_version.h | 4 +- extensions/topmenus/svn_version.h | 84 +++++++++++++++---------------- loader/svn_version.h | 4 +- plugins/include/version.inc | 84 +++++++++++++++---------------- sourcepawn/compiler/svn_version.h | 4 +- sourcepawn/jit/x86/jit_version.h | 4 +- 12 files changed, 105 insertions(+), 105 deletions(-) diff --git a/core/sm_version.h b/core/sm_version.h index fc40f58b..58fdccc2 100644 --- a/core/sm_version.h +++ b/core/sm_version.h @@ -40,7 +40,7 @@ * @file Contains SourceMod version information. */ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1946" +#define SVN_FILE_VERSION 1,0,0,1946 #endif //_INCLUDE_SOURCEMOD_VERSION_H_ diff --git a/extensions/bintools/svn_version.h b/extensions/bintools/svn_version.h index 25b06621..5b19358a 100644 --- a/extensions/bintools/svn_version.h +++ b/extensions/bintools/svn_version.h @@ -36,7 +36,7 @@ #ifndef _INCLUDE_BINTOOLS_VERSION_H_ #define _INCLUDE_BINTOOLS_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1900" +#define SVN_FILE_VERSION 1,0,0,1900 #endif //_INCLUDE_BINTOOLS_VERSION_H_ diff --git a/extensions/cstrike/svn_version.h b/extensions/cstrike/svn_version.h index 4f3dd9a8..d39c1aa0 100644 --- a/extensions/cstrike/svn_version.h +++ b/extensions/cstrike/svn_version.h @@ -26,7 +26,7 @@ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or <http://www.sourcemod.net/license.php>. * - * Version: $Id: svn_version.h 1336 2007-08-15 06:19:30Z damagedsoul $ + * Version: $Id$ */ /** @@ -36,7 +36,7 @@ #ifndef _INCLUDE_SDKTOOLS_VERSION_H_ #define _INCLUDE_SDKTOOLS_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1884" +#define SVN_FILE_VERSION 1,0,0,1884 #endif //_INCLUDE_SDKTOOLS_VERSION_H_ diff --git a/extensions/geoip/svn_version.h b/extensions/geoip/svn_version.h index 76884401..be31e51c 100644 --- a/extensions/geoip/svn_version.h +++ b/extensions/geoip/svn_version.h @@ -36,7 +36,7 @@ #ifndef _INCLUDE_GEOIP_VERSION_H_ #define _INCLUDE_GEOIP_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1884" +#define SVN_FILE_VERSION 1,0,0,1884 #endif //_INCLUDE_GEOIP_VERSION_H_ diff --git a/extensions/mysql/svn_version.h b/extensions/mysql/svn_version.h index 40cff5e0..9cb9b6ea 100644 --- a/extensions/mysql/svn_version.h +++ b/extensions/mysql/svn_version.h @@ -36,7 +36,7 @@ #ifndef _INCLUDE_MYSQLEXT_VERSION_H_ #define _INCLUDE_MYSQLEXT_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1918" +#define SVN_FILE_VERSION 1,0,0,1918 #endif //_INCLUDE_MYSQLEXT_VERSION_H_ diff --git a/extensions/sdktools/svn_version.h b/extensions/sdktools/svn_version.h index 8873263e..2f1f44c0 100644 --- a/extensions/sdktools/svn_version.h +++ b/extensions/sdktools/svn_version.h @@ -36,7 +36,7 @@ #ifndef _INCLUDE_SDKTOOLS_VERSION_H_ #define _INCLUDE_SDKTOOLS_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1930" +#define SVN_FILE_VERSION 1,0,0,1930 #endif //_INCLUDE_SDKTOOLS_VERSION_H_ diff --git a/extensions/sqlite/svn_version.h b/extensions/sqlite/svn_version.h index 9cf1b0df..dd2fefef 100644 --- a/extensions/sqlite/svn_version.h +++ b/extensions/sqlite/svn_version.h @@ -36,7 +36,7 @@ #ifndef _INCLUDE_SQLITEEXT_VERSION_H_ #define _INCLUDE_SQLITEEXT_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1918" +#define SVN_FILE_VERSION 1,0,0,1918 #endif //_INCLUDE_SQLITEEXT_VERSION_H_ diff --git a/extensions/topmenus/svn_version.h b/extensions/topmenus/svn_version.h index ba4cb0bd..8b5468a4 100644 --- a/extensions/topmenus/svn_version.h +++ b/extensions/topmenus/svn_version.h @@ -1,42 +1,42 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -/** - * Autogenerated by build scripts - */ - -#ifndef _INCLUDE_TOPMENUS_VERSION_H_ -#define _INCLUDE_TOPMENUS_VERSION_H_ - -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 - -#endif //_INCLUDE_TOPMENUS_VERSION_H_ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SQLite Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +/** + * Autogenerated by build scripts + */ + +#ifndef _INCLUDE_SQLITEEXT_VERSION_H_ +#define _INCLUDE_SQLITEEXT_VERSION_H_ + +#define SVN_FULL_VERSION "1.0.0.1884" +#define SVN_FILE_VERSION 1,0,0,1884 + +#endif //_INCLUDE_SQLITEEXT_VERSION_H_ diff --git a/loader/svn_version.h b/loader/svn_version.h index fc40f58b..58fdccc2 100644 --- a/loader/svn_version.h +++ b/loader/svn_version.h @@ -40,7 +40,7 @@ * @file Contains SourceMod version information. */ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1946" +#define SVN_FILE_VERSION 1,0,0,1946 #endif //_INCLUDE_SOURCEMOD_VERSION_H_ diff --git a/plugins/include/version.inc b/plugins/include/version.inc index 88b48cef..9adbf8bc 100644 --- a/plugins/include/version.inc +++ b/plugins/include/version.inc @@ -1,42 +1,42 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This file is part of the SourceMod/SourcePawn SDK. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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/>. - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or <http://www.sourcemod.net/license.php>. - * - * Version: $Id$ - */ - -#if defined _version_included - #endinput -#endif -#define _version_included - -#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */ -#define SOURCEMOD_V_MINOR 0 /**< SourceMod Minor version */ -#define SOURCEMOD_V_RELEASE 0 /**< SourceMod Release version */ - -#define SOURCEMOD_VERSION "1.0.0.1336" /**< SourceMod version string (major.minor.release.build) */ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#if defined _version_included + #endinput +#endif +#define _version_included + +#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */ +#define SOURCEMOD_V_MINOR 0 /**< SourceMod Minor version */ +#define SOURCEMOD_V_RELEASE 0 /**< SourceMod Release version */ + +#define SOURCEMOD_VERSION "1.0.0.1946" /**< SourceMod version string (major.minor.release.build) */ diff --git a/sourcepawn/compiler/svn_version.h b/sourcepawn/compiler/svn_version.h index ac9f1a94..bd964324 100644 --- a/sourcepawn/compiler/svn_version.h +++ b/sourcepawn/compiler/svn_version.h @@ -19,7 +19,7 @@ * @file Contains SourceMod version information. */ -#define SVN_FULL_VERSION "1.0.0.800" -#define SVN_FILE_VERSION 1,0,0,800 +#define SVN_FULL_VERSION "1.0.0.1874" +#define SVN_FILE_VERSION 1,0,0,1874 #endif //_INCLUDE_SOURCEMOD_VERSION_H_ diff --git a/sourcepawn/jit/x86/jit_version.h b/sourcepawn/jit/x86/jit_version.h index e221abba..525849a2 100644 --- a/sourcepawn/jit/x86/jit_version.h +++ b/sourcepawn/jit/x86/jit_version.h @@ -16,7 +16,7 @@ #ifndef _INCLUDE_JIT_VERSION_H_ #define _INCLUDE_JIT_VERSION_H_ -#define SVN_FULL_VERSION "1.0.0.1336" -#define SVN_FILE_VERSION 1,0,0,1336 +#define SVN_FULL_VERSION "1.0.0.1919" +#define SVN_FILE_VERSION 1,0,0,1919 #endif //_INCLUDE_JIT_VERSION_H_ From 8ba6d5cbba47150dd30af387679100147167c21f Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Mon, 17 Mar 2008 15:30:39 +0000 Subject: [PATCH 255/263] bumped trunk version --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401953 --- modules.versions | 128 +++++++++++++++++++++++------------------------ 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/modules.versions b/modules.versions index 79e549ab..84612773 100644 --- a/modules.versions +++ b/modules.versions @@ -1,64 +1,64 @@ -[PRODUCT] -major = 1 -minor = 0 -revision = 0 - -[core] -folder = core -in = sm_version.tpl -out = sm_version.h - -[plugins] -folder = plugins/include -in = version.tpl -out = version.inc - -[jitx86] -folder = sourcepawn/jit/x86 -in = jit_version.tpl -out = jit_version.h - -[geoip] -folder = extensions/geoip -in = svn_version.tpl -out = svn_version.h - -[compiler] -folder = sourcepawn/compiler -in = svn_version.tpl -out = svn_version.h - -[bintools] -folder = extensions/bintools -in = svn_version.tpl -out = svn_version.h - -[sdktools] -folder = extensions/sdktools -in = svn_version.tpl -out = svn_version.h - -[mysql] -folder = extensions/mysql -in = svn_version.tpl -out = svn_version.h - -[sqlite] -folder = extensions/sqlite -in = svn_version.tpl -out = svn_version.h - -[cstrike] -folder = extensions/cstrike -in = svn_version.tpl -out = svn_version.h - -[loader] -folder = loader -in = svn_version.tpl -out = svn_version.h - -[topmenus] -folder = extensions/topmenus -in = svn_version.tpl -out = svn_version.h +[PRODUCT] +major = 1 +minor = 1 +revision = 0 + +[core] +folder = core +in = sm_version.tpl +out = sm_version.h + +[plugins] +folder = plugins/include +in = version.tpl +out = version.inc + +[jitx86] +folder = sourcepawn/jit/x86 +in = jit_version.tpl +out = jit_version.h + +[geoip] +folder = extensions/geoip +in = svn_version.tpl +out = svn_version.h + +[compiler] +folder = sourcepawn/compiler +in = svn_version.tpl +out = svn_version.h + +[bintools] +folder = extensions/bintools +in = svn_version.tpl +out = svn_version.h + +[sdktools] +folder = extensions/sdktools +in = svn_version.tpl +out = svn_version.h + +[mysql] +folder = extensions/mysql +in = svn_version.tpl +out = svn_version.h + +[sqlite] +folder = extensions/sqlite +in = svn_version.tpl +out = svn_version.h + +[cstrike] +folder = extensions/cstrike +in = svn_version.tpl +out = svn_version.h + +[loader] +folder = loader +in = svn_version.tpl +out = svn_version.h + +[topmenus] +folder = extensions/topmenus +in = svn_version.tpl +out = svn_version.h From 83a1ebcf0fc7443402c83bd55cdb0829793c3265 Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Thu, 20 Mar 2008 19:52:30 +0000 Subject: [PATCH 256/263] Removed debug code? --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401954 --- core/HalfLife2.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 3e642283..39e2c9eb 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -114,8 +114,6 @@ void CHalfLife2::OnSourceModAllInitialized() m_HinTextMsg = g_UserMsgs.GetMessageIndex("HintText"); m_VGUIMenu = g_UserMsgs.GetMessageIndex("VGUIMenu"); g_ShareSys.AddInterface(NULL, this); - - FindInSendTable("CTFPlayer", "m_nDisguiseClass"); } #if !defined METAMOD_PLAPI_VERSION From 3bcd296d99f1da04ccb702598418e24748ab9037 Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Fri, 21 Mar 2008 04:26:53 +0000 Subject: [PATCH 257/263] Merged crash fix (amb1539) from 1.0.1 branch --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401958 --- core/GameConfigs.cpp | 2 +- core/HalfLife2.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ core/HalfLife2.h | 1 + core/smn_keyvalues.cpp | 5 ++++- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index 18ffaeb5..354f3d19 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -598,7 +598,7 @@ void GameConfigManager::OnSourceModStartup(bool late) strncopy(g_GameDesc + 1, SERVER_CALL(GetGameDescription)(), sizeof(g_GameDesc) - 1); KeyValues *pGameInfo = new KeyValues("GameInfo"); - if (pGameInfo->LoadFromFile(basefilesystem, "gameinfo.txt")) + if (g_HL2.KVLoadFromFile(pGameInfo, basefilesystem, "gameinfo.txt")) { const char *str; if ((str = pGameInfo->GetString("game", NULL)) != NULL) diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 39e2c9eb..2a84f142 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -435,6 +435,47 @@ bool CHalfLife2::IsLANServer() return (sv_lan->GetInt() != 0); } +bool CHalfLife2::KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID) +{ +#if defined METAMOD_PLAPI_VERSION + if (g_SMAPI->GetSourceEngineBuild() == SOURCE_ENGINE_ORIGINAL) +#else + if (strcasecmp(g_SourceMod.GetGameFolderName(), "ship") == 0) +#endif + { + Assert(filesystem); +#ifdef _MSC_VER + Assert(_heapchk() == _HEAPOK); +#endif + + FileHandle_t f = filesystem->Open(resourceName, "rb", pathID); + if (!f) + return false; + + // load file into a null-terminated buffer + int fileSize = filesystem->Size(f); + char *buffer = (char *)MemAllocScratch(fileSize + 1); + + Assert(buffer); + + filesystem->Read(buffer, fileSize, f); // read into local buffer + + buffer[fileSize] = 0; // null terminate file as EOF + + filesystem->Close( f ); // close file after reading + + bool retOK = kv->LoadFromBuffer( resourceName, buffer, filesystem ); + + MemFreeScratch(); + + return retOK; + } + else + { + return kv->LoadFromFile(filesystem, resourceName, pathID); + } +} + void CHalfLife2::PushCommandStack(const CCommand *cmd) { CachedCommandInfo info; diff --git a/core/HalfLife2.h b/core/HalfLife2.h index e6bcf05a..90059620 100644 --- a/core/HalfLife2.h +++ b/core/HalfLife2.h @@ -99,6 +99,7 @@ public: //IGameHelpers bool HintTextMsg(int client, const char *msg); bool ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show); bool IsLANServer(); + bool KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID = NULL); public: void AddToFakeCliCmdQueue(int client, int userid, const char *cmd); void ProcessFakeCliCmdQueue(); diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index 45cfb93e..825b26f1 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -33,6 +33,7 @@ #include "sourcemm_api.h" #include "sm_stringutil.h" #include "HandleSys.h" +#include "HalfLife2.h" #include <KeyValues.h> #include "utlbuffer.h" @@ -782,6 +783,7 @@ static cell_t smn_FileToKeyValues(IPluginContext *pCtx, const cell_t *params) HandleSecurity sec; char *path; KeyValueStack *pStk; + KeyValues *kv; sec.pOwner = NULL; sec.pIdentity = g_pCoreIdent; @@ -797,7 +799,8 @@ static cell_t smn_FileToKeyValues(IPluginContext *pCtx, const cell_t *params) char realpath[PLATFORM_MAX_PATH]; g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", path); - return pStk->pCurRoot.front()->LoadFromFile(basefilesystem, realpath); + kv = pStk->pCurRoot.front(); + return g_HL2.KVLoadFromFile(kv, basefilesystem, realpath); } static cell_t smn_KvSetEscapeSequences(IPluginContext *pCtx, const cell_t *params) From c5af41d9830cc5c243eccb7f79e83d8a24c75e00 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 26 Mar 2008 03:52:37 +0000 Subject: [PATCH 258/263] merged branch-1.1.0 back into trunk --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401960 --- extensions/regex/CRegEx.cpp | 124 +++++ extensions/regex/CRegEx.h | 28 ++ extensions/regex/Makefile.ep1 | 89 ++++ extensions/regex/Makefile.ep2 | 91 ++++ extensions/regex/Makefile.orig | 90 ++++ extensions/regex/extension.cpp | 188 +++++++ extensions/regex/extension.h | 133 +++++ extensions/regex/lib_linux/libpcre.a | Bin 0 -> 184250 bytes extensions/regex/lib_win/pcre.lib | Bin 0 -> 172300 bytes extensions/regex/msvc8/sdk.sln | 26 + extensions/regex/msvc8/sdk.vcproj | 422 ++++++++++++++++ extensions/regex/pcre.h | 305 +++++++++++ extensions/regex/sdk/smsdk_config.h | 79 +++ extensions/regex/sdk/smsdk_ext.cpp | 455 +++++++++++++++++ extensions/regex/sdk/smsdk_ext.h | 327 ++++++++++++ extensions/tf2/Makefile.ep1 | 88 ++++ extensions/tf2/Makefile.ep2 | 88 ++++ extensions/tf2/Makefile.orig | 88 ++++ extensions/tf2/RegNatives.cpp | 50 ++ extensions/tf2/RegNatives.h | 48 ++ extensions/tf2/extension.cpp | 229 +++++++++ extensions/tf2/extension.h | 130 +++++ extensions/tf2/msvc8/tf2.sln | 32 ++ extensions/tf2/msvc8/tf2.vcproj | 727 +++++++++++++++++++++++++++ extensions/tf2/natives.cpp | 159 ++++++ extensions/tf2/sdk/smsdk_config.h | 76 +++ extensions/tf2/sdk/smsdk_ext.cpp | 422 ++++++++++++++++ extensions/tf2/sdk/smsdk_ext.h | 310 ++++++++++++ extensions/tf2/sm-tf2.games.txt | 21 + extensions/tf2/svn_version.h | 42 ++ extensions/tf2/svn_version.tpl | 42 ++ extensions/tf2/tf2-test.sp | 55 ++ extensions/tf2/tf2.inc | 24 + extensions/tf2/version.rc | 104 ++++ plugins/adminmenu.sp | 23 +- plugins/adminmenu/dynamicmenu.sp | 520 +++++++++++++++++++ plugins/include/regex.inc | 141 ++++++ plugins/mapmanager.sp | 362 +++++++++++++ plugins/mapmanager/commands.sp | 398 +++++++++++++++ plugins/mapmanager/events.sp | 166 ++++++ plugins/mapmanager/functions.sp | 335 ++++++++++++ plugins/mapmanager/functions_menu.sp | 115 +++++ plugins/mapmanager/globals.sp | 104 ++++ plugins/mapmanager/menus.sp | 263 ++++++++++ plugins/mapmanager/timers.sp | 166 ++++++ plugins/mapmanager/votes.sp | 318 ++++++++++++ plugins/testsuite/goto_test.sp | 28 ++ sourcepawn/compiler/sc4.c | 15 +- sourcepawn/compiler/sc6.c | 1 + sourcepawn/jit/x86/jit_x86.cpp | 22 + sourcepawn/jit/x86/opcode_helpers.h | 27 +- sourcepawn/jit/x86/opcode_switch.inc | 5 + 52 files changed, 8062 insertions(+), 39 deletions(-) create mode 100644 extensions/regex/CRegEx.cpp create mode 100644 extensions/regex/CRegEx.h create mode 100644 extensions/regex/Makefile.ep1 create mode 100644 extensions/regex/Makefile.ep2 create mode 100644 extensions/regex/Makefile.orig create mode 100644 extensions/regex/extension.cpp create mode 100644 extensions/regex/extension.h create mode 100644 extensions/regex/lib_linux/libpcre.a create mode 100644 extensions/regex/lib_win/pcre.lib create mode 100644 extensions/regex/msvc8/sdk.sln create mode 100644 extensions/regex/msvc8/sdk.vcproj create mode 100644 extensions/regex/pcre.h create mode 100644 extensions/regex/sdk/smsdk_config.h create mode 100644 extensions/regex/sdk/smsdk_ext.cpp create mode 100644 extensions/regex/sdk/smsdk_ext.h create mode 100644 extensions/tf2/Makefile.ep1 create mode 100644 extensions/tf2/Makefile.ep2 create mode 100644 extensions/tf2/Makefile.orig create mode 100644 extensions/tf2/RegNatives.cpp create mode 100644 extensions/tf2/RegNatives.h create mode 100644 extensions/tf2/extension.cpp create mode 100644 extensions/tf2/extension.h create mode 100644 extensions/tf2/msvc8/tf2.sln create mode 100644 extensions/tf2/msvc8/tf2.vcproj create mode 100644 extensions/tf2/natives.cpp create mode 100644 extensions/tf2/sdk/smsdk_config.h create mode 100644 extensions/tf2/sdk/smsdk_ext.cpp create mode 100644 extensions/tf2/sdk/smsdk_ext.h create mode 100644 extensions/tf2/sm-tf2.games.txt create mode 100644 extensions/tf2/svn_version.h create mode 100644 extensions/tf2/svn_version.tpl create mode 100644 extensions/tf2/tf2-test.sp create mode 100644 extensions/tf2/tf2.inc create mode 100644 extensions/tf2/version.rc create mode 100644 plugins/adminmenu/dynamicmenu.sp create mode 100644 plugins/include/regex.inc create mode 100644 plugins/mapmanager.sp create mode 100644 plugins/mapmanager/commands.sp create mode 100644 plugins/mapmanager/events.sp create mode 100644 plugins/mapmanager/functions.sp create mode 100644 plugins/mapmanager/functions_menu.sp create mode 100644 plugins/mapmanager/globals.sp create mode 100644 plugins/mapmanager/menus.sp create mode 100644 plugins/mapmanager/timers.sp create mode 100644 plugins/mapmanager/votes.sp create mode 100644 plugins/testsuite/goto_test.sp diff --git a/extensions/regex/CRegEx.cpp b/extensions/regex/CRegEx.cpp new file mode 100644 index 00000000..6405a3a0 --- /dev/null +++ b/extensions/regex/CRegEx.cpp @@ -0,0 +1,124 @@ +#include "pcre.h" +#include "CRegEx.h" +#include <sh_string.h> +#include "extension.h" + +RegEx::RegEx() +{ + mErrorOffset = 0; + mError = NULL; + re = NULL; + mFree = true; + subject = NULL; + mSubStrings = 0; +} + +void RegEx::Clear () +{ + mErrorOffset = 0; + mError = NULL; + if (re) + pcre_free(re); + re = NULL; + mFree = true; + if (subject) + delete [] subject; + subject = NULL; + mSubStrings = 0; +} + +RegEx::~RegEx() +{ + Clear(); +} + +bool RegEx::isFree(bool set, bool val) +{ + if (set) + { + mFree = val; + return true; + } else { + return mFree; + } +} + +int RegEx::Compile(const char *pattern, int iFlags) +{ + if (!mFree) + Clear(); + + re = pcre_compile(pattern, iFlags, &mError, &mErrorOffset, NULL); + + if (re == NULL) + { + return 0; + } + + mFree = false; + + return 1; +} + +int RegEx::Match(const char *str) +{ + int rc = 0; + + if (mFree || re == NULL) + return -1; + + this->ClearMatch(); + + //save str + subject = new char[strlen(str)+1]; + strcpy(subject, str); + + rc = pcre_exec(re, NULL, subject, (int)strlen(subject), 0, 0, ovector, 30); + + if (rc < 0) + { + if (rc == PCRE_ERROR_NOMATCH) + { + return 0; + } else { + mErrorOffset = rc; + return -1; + } + } + + mSubStrings = rc; + + return 1; +} +void RegEx::ClearMatch() +{ + // Clears match results + mErrorOffset = 0; + mError = NULL; + if (subject) + delete [] subject; + subject = NULL; + mSubStrings = 0; +} + +const char *RegEx::GetSubstring(int s, char buffer[], int max) +{ + int i = 0; + if (s >= mSubStrings || s < 0) + return NULL; + + char *substr_a = subject + ovector[2*s]; + int substr_l = ovector[2*s+1] - ovector[2*s]; + + for (i = 0; i<substr_l; i++) + { + if (i >= max) + break; + buffer[i] = substr_a[i]; + } + + buffer[i] = '\0'; + + return buffer; +} + diff --git a/extensions/regex/CRegEx.h b/extensions/regex/CRegEx.h new file mode 100644 index 00000000..183a3039 --- /dev/null +++ b/extensions/regex/CRegEx.h @@ -0,0 +1,28 @@ +#ifndef _INCLUDE_CREGEX_H +#define _INCLUDE_CREGEX_H + +class RegEx +{ +public: + RegEx(); + ~RegEx(); + bool isFree(bool set=false, bool val=false); + void Clear(); + + int Compile(const char *pattern, int iFlags); + int Match(const char *str); + void ClearMatch(); + const char *GetSubstring(int s, char buffer[], int max); +public: + int mErrorOffset; + const char *mError; + int mSubStrings; +private: + pcre *re; + bool mFree; + int ovector[30]; + char *subject; +}; + +#endif //_INCLUDE_CREGEX_H + diff --git a/extensions/regex/Makefile.ep1 b/extensions/regex/Makefile.ep1 new file mode 100644 index 00000000..989ee7d4 --- /dev/null +++ b/extensions/regex/Makefile.ep1 @@ -0,0 +1,89 @@ +#(C)2004-2007 AlliedModders LLC +# +# This sample Makefile is designed for SourceMod extensions that +# are built against Metamod:Source 1.4.2, Episode 1 of the HL2SDK. +# + +SMSDK = ../.. +SRCDS = ~/srcds +SOURCEMM = ../../../sourcemm +HL2SDK = ../../../hl2sdk + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = regex + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp CRegEx.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.ep1 extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.ep1 all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/regex/Makefile.ep2 b/extensions/regex/Makefile.ep2 new file mode 100644 index 00000000..3582838c --- /dev/null +++ b/extensions/regex/Makefile.ep2 @@ -0,0 +1,91 @@ +#(C)2004-2007 AlliedModders LLC +# +# This sample Makefile is designed for SourceMod extensions that +# are built against Metamod:Source 1.6.0, Episode 2 of the HL2SDK. +# + +SMSDK = ../.. +SRCDS = ~/srcds +SOURCEMM = ../../../sourcemm +HL2SDK = ../../../hl2sdk-ob + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = regex + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp CRegEx.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ + -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse \ + -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized -DORANGEBOX_BUILD +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/orangebox/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/orangebox/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.ep1 extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.ep1 all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/regex/Makefile.orig b/extensions/regex/Makefile.orig new file mode 100644 index 00000000..3dc19ef8 --- /dev/null +++ b/extensions/regex/Makefile.orig @@ -0,0 +1,90 @@ +#(C)2004-2007 AlliedModders LLC +# +# This sample Makefile is designed for SourceMod extensions that +# are built against Metamod:Source 1.6.0, Episode 1 of the HL2SDK. + +SMSDK = ../.. +SRCDS = ~/srcds +SOURCEMM = ../../../sourcemm-1.4.2 +HL2SDK = ../../../hl2sdk + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = regex + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp CRegEx.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ + -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -mfpmath=sse \ + -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -Wno-uninitialized +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.orig extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.orig all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/regex/extension.cpp b/extensions/regex/extension.cpp new file mode 100644 index 00000000..e3519172 --- /dev/null +++ b/extensions/regex/extension.cpp @@ -0,0 +1,188 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" + +#include <sh_string.h> +#include "pcre.h" +#include "CRegEx.h" +using namespace SourceHook; + +/** + * @file extension.cpp + * @brief Implement extension code here. + */ + +RegexExtension g_RegexExtension; /**< Global singleton for extension's main interface */ + +SMEXT_LINK(&g_RegexExtension); + +RegexHandler g_RegexHandler; +HandleType_t g_RegexHandle=0; + + + +bool RegexExtension::SDK_OnLoad(char *error, size_t err_max, bool late) +{ + g_pShareSys->AddNatives(myself,regex_natives); + g_RegexHandle = g_pHandleSys->CreateType("Regex", &g_RegexHandler, 0, NULL, NULL, myself->GetIdentity(), NULL); + return true; +} + +void RegexExtension::SDK_OnUnload() +{ + g_pHandleSys->RemoveType(g_RegexHandle, myself->GetIdentity()); + +} + +static cell_t CompileRegex(IPluginContext *pCtx, const cell_t *params) +{ + char *regex; + pCtx->LocalToString(params[1], ®ex); + + RegEx *x = new RegEx(); + + if (x->Compile(regex, params[2]) == 0) + { + cell_t *eOff; + pCtx->LocalToPhysAddr(params[5], &eOff); + const char *err = x->mError; + *eOff = x->mErrorOffset; + pCtx->StringToLocal(params[3], params[4], err ? err:"unknown"); + return 0; + } + + return g_pHandleSys->CreateHandle(g_RegexHandle, (void*)x, pCtx->GetIdentity(), myself->GetIdentity(), NULL); +} + + +static cell_t MatchRegex(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl = static_cast<Handle_t>(params[1]); + HandleError err; + HandleSecurity sec; + sec.pOwner = NULL; + sec.pIdentity = myself->GetIdentity(); + + RegEx *x; + + if ((err=g_pHandleSys->ReadHandle(hndl, g_RegexHandle, &sec, (void **)&x)) != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid file handle %x (error %d)", hndl, err); + } + + if (!x) + { + pCtx->ThrowNativeError("Regex data not found\n"); + + return 0; + } + + char *str; + pCtx->LocalToString(params[2], &str); + + int e = x->Match(str); + + if (e == -1) + { + /* there was a match error. move on. */ + cell_t *res; + pCtx->LocalToPhysAddr(params[3], &res); + *res = x->mErrorOffset; + /* only clear the match results, since the regex object + may still be referenced later */ + x->ClearMatch(); + + return -1; + } + else if (e == 0) + { + /* only clear the match results, since the regex object + may still be referenced later */ + x->ClearMatch(); + + return 0; + } + else + { + return x->mSubStrings; + } +} + +static cell_t GetRegexSubString(IPluginContext *pCtx, const cell_t *params) +{ + Handle_t hndl=static_cast<Handle_t>(params[1]); + HandleError err; + HandleSecurity sec; + sec.pOwner=NULL; + sec.pIdentity=myself->GetIdentity(); + + RegEx *x; + + if ((err=g_pHandleSys->ReadHandle(hndl, g_RegexHandle, &sec, (void **)&x)) != HandleError_None) + { + return pCtx->ThrowNativeError("Invalid file handle %x (error %d)", hndl, err); + } + + if (!x) + { + pCtx->ThrowNativeError("Regex data not found\n"); + return 0; + } + + static char buffer[4096]; + const char *ret=x->GetSubstring(params[2], buffer, sizeof(buffer)); + + if(!ret) + { + return 0; + } + + pCtx->StringToLocalUTF8(params[3], params[4], ret, NULL); + + return 1; +} + +void RegexHandler::OnHandleDestroy(HandleType_t type, void *object) +{ + RegEx *x = (RegEx *)object; + + x->Clear(); + delete x; +} + +const sp_nativeinfo_t regex_natives[] = +{ + {"GetRegexSubString", GetRegexSubString}, + {"MatchRegex", MatchRegex}, + {"CompileRegex", CompileRegex}, + {NULL, NULL}, +}; diff --git a/extensions/regex/extension.h b/extensions/regex/extension.h new file mode 100644 index 00000000..0c4beff2 --- /dev/null +++ b/extensions/regex/extension.h @@ -0,0 +1,133 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ + +/** + * @file extension.h + * @brief Sample extension code header. + */ + +#include "smsdk_ext.h" + + +/** + * @brief Sample implementation of the SDK Extension. + * Note: Uncomment one of the pre-defined virtual functions in order to use it. + */ +class RegexExtension : public SDKExtension +{ +public: + /** + * @brief This is called after the initial loading sequence has been processed. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @param late Whether or not the module was loaded after map load. + * @return True to succeed loading, false to fail. + */ + virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late); + + /** + * @brief This is called right before the extension is unloaded. + */ + virtual void SDK_OnUnload(); + + /** + * @brief This is called once all known extensions have been loaded. + * Note: It is is a good idea to add natives here, if any are provided. + */ + //virtual void SDK_OnAllLoaded(); + + /** + * @brief Called when the pause state is changed. + */ + //virtual void SDK_OnPauseChange(bool paused); + + /** + * @brief this is called when Core wants to know if your extension is working. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @return True if working, false otherwise. + */ + //virtual bool QueryRunning(char *error, size_t maxlength); +public: +#if defined SMEXT_CONF_METAMOD + /** + * @brief Called when Metamod is attached, before the extension version is called. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @param late Whether or not Metamod considers this a late load. + * @return True to succeed, false to fail. + */ + //virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); + + /** + * @brief Called when Metamod is detaching, after the extension version is called. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + //virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength); + + /** + * @brief Called when Metamod's pause state is changing. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param paused Pause state being set. + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + //virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength); +#endif +}; + + +class RegexHandler: public IHandleTypeDispatch +{ +public: + void OnHandleDestroy(HandleType_t type, void *object); +}; + +extern RegexHandler g_RegexHandler; +extern HandleType_t g_RegexHandle; + + +// Natives +extern const sp_nativeinfo_t regex_natives[]; + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ diff --git a/extensions/regex/lib_linux/libpcre.a b/extensions/regex/lib_linux/libpcre.a new file mode 100644 index 0000000000000000000000000000000000000000..e8f6fbdefa0da9a25a9f12394c19c3fd43057330 GIT binary patch literal 184250 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%0D#l*Lgi1_{jWPB%A071)U=n)Jz?{*W; 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%0AgYLD~pS4^cIL!@!T4WgcwCvAl?h2zN|E@Wr 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%0DNo4{y}b1koik*XN2<l8 zR>YU>t7c9dcK6-7J9%TzcV~T`TG6F^WT^DlppJfv5By%o;)31f3HjwI&gBKWTXYTT z+qzd(x#eTyL*}@yc`((jqq+?}x6b;!*PNtziM?he%_&~IJvgGLR=iSP@cH5qI~EVj zPAV@rASCGAV{t<Er$6g}@6Qb-EMAv-+3msn3<@324jNK~#zALVYY#SE`)T8{539!) z=ykl#eBwe|53bNqT%i&<m1T2wIjPs`JZjhF1-r`Dw-3&K%AaUu=03IJj8OULxY9$6 z&yL^ct%X}<d_D@sr^JlUzs%4JJ-^Wmot{*3gXU$Lo>{rEV3(=4N=tTeEjUS;WgD{g z4HHu<28VhTe4cvUy0SSt;?=j@b*T$SYF5inj#E9Y&9g5H4wM~CF6mcxFtH@B>|j#r zwd=~h3H=scvTa`r#V_*@#n0NbFVhsQu=8VTKCu5T(?rj8%l6;=j8+F{zjp0<TC=uY z{SDP$zW#z^`d{))&7+=6nZ&>B8Ou%8e={Rh_w9Nnz;9D*TR(E&o~;7;iZc5EQ~r<k z?YC5^OJPBr;gS3HKZ-Nkv#CE;jfqP)6)?q)6`tJeKVws|`WKd%{w3-!)<5%Rv8gXM zJ)-*B#zc(e6;yd`vfqt$z=)<;+>yrs6L++0)T;Af%BQJQm10f({ikEVX2p$EOl*p^ z8}k^ervLTF0Mo<YCv!}Q9be75VvYgs@7ckzEOyOnlFd4lZ(cA3>r~Z)LF}B)9vhBw zK4(w)%=w?aApY&K$yKj{owHQGxjQ%2Pz(Nkd<~waL5kCWn|n3pcyyVe;+Gnl6~)A9 ze$2XJXy)251)6>v@08oQ>gDmDAIEaL{ny7a{a$S_#g1b&g0py=7W^NIi%&?bRy`@X zM$MF3wNulMsZ%$-UPk@Q1`Qjzjhi&hYSz3(cFR_+!)@BOYu}+`CoiXSm#*Eq_sH#e zY_GiDefs8)8$Y3V;-s^pXHPz7%DGdgO+RnO%#vBN&%fZpi%uJR`Wa^y{c--qm&}<v z&o7-{wqW6<mn~Yn<nk-ZmtMK-s;jTL_PXo;cEgP~-F(a6Z@q2#?RVUH*WLHryW+l; z_doF9Lk~al=wpvR@npqQtDb)5+2>ZTdA@S(x);{JxMAZ<FK>F~)z@BsWAmF^w!XD( z``bI-d3Wco_ul_t_lJ8v`p3t6KlyauXZt_@;>)iNeErS0-~IFZ9}fQb)1jY#`Sq|C z!2j<2_v=4kV8NilLxv6;e%y%TPbfU`q>+(PqfZ`l%BlZ<%zq!PgH=|CqrW^HZ|-E6 zzoSq31j?UGI#Qa;$NxC}am?X(<z4ni`AUyX^N!X)EK@vczSe@DH3kRucfpb6P1!1G zewEk3%ij`0AxHoIZ8AwF#@A$CxxY<HGzkrZsm@U*74XykbAC|A|J(omlJk<1i5KYp zdGWZCaZbnaGiN$~-T8<)&oIj%c0OYFgTD`10xz2p7h944D6X~Q%zpgO;@VT6cJINI zumAI7jp=ok{>)_BG5w28zG9Ac{?J<iRpVAxsmqj&<sEtcVB++C>Tgpl&M?+DletI( zv`jSTJpbwZAyZp%*c4!j)fe*^tET_?`9sy7n6ZtGuC2}7L$5mhr~5u;jE^z#!TG?1 b=(rid9dC2{+aC0Fuo^dON{K!0&vgC=cwHgD literal 0 HcmV?d00001 diff --git a/extensions/regex/lib_win/pcre.lib b/extensions/regex/lib_win/pcre.lib new file mode 100644 index 0000000000000000000000000000000000000000..0fb8eeaa1cdc8147916540d438b7686bebf90e01 GIT binary patch literal 172300 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 literal 0 HcmV?d00001 diff --git a/extensions/regex/msvc8/sdk.sln b/extensions/regex/msvc8/sdk.sln new file mode 100644 index 00000000..90618048 --- /dev/null +++ b/extensions/regex/msvc8/sdk.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C++ Express 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regex", "sdk.vcproj", "{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Episode 1|Win32 = Debug - Episode 1|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Release - Episode 1|Win32 = Release - Episode 1|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode 1|Win32.ActiveCfg = Debug|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode 1|Win32.Build.0 = Debug|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.ActiveCfg = Release|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.Build.0 = Release|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/extensions/regex/msvc8/sdk.vcproj b/extensions/regex/msvc8/sdk.vcproj new file mode 100644 index 00000000..ec06e64e --- /dev/null +++ b/extensions/regex/msvc8/sdk.vcproj @@ -0,0 +1,422 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="regex" + ProjectGUID="{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" + RootNamespace="sdk" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\;..\sdk;..\..;..\systems;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM142)";"$(SOURCEMM142)\sourcemm";"$(SOURCEMM142)\sourcehook";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\game\server";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + IgnoreImportLibrary="false" + AdditionalDependencies="..\lib_win\pcre.lib "$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\regex.ext.dll" + LinkIncremental="2" + IgnoreDefaultLibraryNames="LIBCMTD" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="0" + EnableCOMDATFolding="0" + ImportLibrary="$(OutDir)/sdk.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..\;..\sdk;..\..;..\systems;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM142)";"$(SOURCEMM142)\sourcemm";"$(SOURCEMM142)\sourcehook";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\game\server";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="..\lib_win\pcre.lib "$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\regex.ext.dll" + LinkIncremental="1" + IgnoreDefaultLibraryNames="LIBCMT" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\;..\sdk;..\..;..\systems;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + IgnoreImportLibrary="false" + AdditionalDependencies="..\lib_win\pcre.lib "$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\regex.ext.dll" + LinkIncremental="2" + IgnoreDefaultLibraryNames="LIBCMTD" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="0" + EnableCOMDATFolding="0" + ImportLibrary="$(OutDir)/sdk.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..\;..\sdk;..\..;..\systems;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="..\lib_win\pcre.lib "$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" + OutputFile="$(OutDir)\regex.ext.dll" + LinkIncremental="1" + IgnoreDefaultLibraryNames="LIBCMT" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath="..\CRegEx.cpp" + > + </File> + <File + RelativePath="..\extension.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath="..\CRegEx.h" + > + </File> + <File + RelativePath="..\extension.h" + > + </File> + <File + RelativePath="..\pcre.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + <Filter + Name="SourceMod SDK" + UniqueIdentifier="{31958233-BB2D-4e41-A8F9-CE8A4684F436}" + > + <File + RelativePath="..\sdk\smsdk_config.h" + > + </File> + <File + RelativePath="..\sdk\smsdk_ext.cpp" + > + </File> + <File + RelativePath="..\sdk\smsdk_ext.h" + > + </File> + </Filter> + <Filter + Name="Library Files" + > + <File + RelativePath="..\lib_win\pcre.lib" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/extensions/regex/pcre.h b/extensions/regex/pcre.h new file mode 100644 index 00000000..77720e1c --- /dev/null +++ b/extensions/regex/pcre.h @@ -0,0 +1,305 @@ +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* This is the public header file for the PCRE library, to be #included by +applications that call the PCRE functions. + + Copyright (c) 1997-2007 University of Cambridge + +----------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +----------------------------------------------------------------------------- +*/ + +#ifndef _PCRE_H +#define _PCRE_H + +/* The current PCRE version information. */ + +#define PCRE_MAJOR 7 +#define PCRE_MINOR 4 +#define PCRE_PRERELEASE +#define PCRE_DATE 2007-09-21 + +/* When an application links to a PCRE DLL in Windows, the symbols that are +imported have to be identified as such. When building PCRE, the appropriate +export setting is defined in pcre_internal.h, which includes this file. So we +don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */ + +#define PCRE_STATIC + +#if defined(_WIN32) && !defined(PCRE_STATIC) +# ifndef PCRE_EXP_DECL +# define PCRE_EXP_DECL extern __declspec(dllimport) +# endif +# ifdef __cplusplus +# ifndef PCRECPP_EXP_DECL +# define PCRECPP_EXP_DECL extern __declspec(dllimport) +# endif +# ifndef PCRECPP_EXP_DEFN +# define PCRECPP_EXP_DEFN __declspec(dllimport) +# endif +# endif +#endif + +/* By default, we use the standard "extern" declarations. */ + +#ifndef PCRE_EXP_DECL +# ifdef __cplusplus +# define PCRE_EXP_DECL extern "C" +# else +# define PCRE_EXP_DECL extern +# endif +#endif + +#ifdef __cplusplus +# ifndef PCRECPP_EXP_DECL +# define PCRECPP_EXP_DECL extern +# endif +# ifndef PCRECPP_EXP_DEFN +# define PCRECPP_EXP_DEFN +# endif +#endif + +/* Have to include stdlib.h in order to ensure that size_t is defined; +it is needed here for malloc. */ + +#include <stdlib.h> + +/* Allow for C++ users */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Options */ + +#define PCRE_CASELESS 0x00000001 +#define PCRE_MULTILINE 0x00000002 +#define PCRE_DOTALL 0x00000004 +#define PCRE_EXTENDED 0x00000008 +#define PCRE_ANCHORED 0x00000010 +#define PCRE_DOLLAR_ENDONLY 0x00000020 +#define PCRE_EXTRA 0x00000040 +#define PCRE_NOTBOL 0x00000080 +#define PCRE_NOTEOL 0x00000100 +#define PCRE_UNGREEDY 0x00000200 +#define PCRE_NOTEMPTY 0x00000400 +#define PCRE_UTF8 0x00000800 +#define PCRE_NO_AUTO_CAPTURE 0x00001000 +#define PCRE_NO_UTF8_CHECK 0x00002000 +#define PCRE_AUTO_CALLOUT 0x00004000 +#define PCRE_PARTIAL 0x00008000 +#define PCRE_DFA_SHORTEST 0x00010000 +#define PCRE_DFA_RESTART 0x00020000 +#define PCRE_FIRSTLINE 0x00040000 +#define PCRE_DUPNAMES 0x00080000 +#define PCRE_NEWLINE_CR 0x00100000 +#define PCRE_NEWLINE_LF 0x00200000 +#define PCRE_NEWLINE_CRLF 0x00300000 +#define PCRE_NEWLINE_ANY 0x00400000 +#define PCRE_NEWLINE_ANYCRLF 0x00500000 +#define PCRE_BSR_ANYCRLF 0x00800000 +#define PCRE_BSR_UNICODE 0x01000000 + +/* Exec-time and get/set-time error codes */ + +#define PCRE_ERROR_NOMATCH (-1) +#define PCRE_ERROR_NULL (-2) +#define PCRE_ERROR_BADOPTION (-3) +#define PCRE_ERROR_BADMAGIC (-4) +#define PCRE_ERROR_UNKNOWN_OPCODE (-5) +#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */ +#define PCRE_ERROR_NOMEMORY (-6) +#define PCRE_ERROR_NOSUBSTRING (-7) +#define PCRE_ERROR_MATCHLIMIT (-8) +#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ +#define PCRE_ERROR_BADUTF8 (-10) +#define PCRE_ERROR_BADUTF8_OFFSET (-11) +#define PCRE_ERROR_PARTIAL (-12) +#define PCRE_ERROR_BADPARTIAL (-13) +#define PCRE_ERROR_INTERNAL (-14) +#define PCRE_ERROR_BADCOUNT (-15) +#define PCRE_ERROR_DFA_UITEM (-16) +#define PCRE_ERROR_DFA_UCOND (-17) +#define PCRE_ERROR_DFA_UMLIMIT (-18) +#define PCRE_ERROR_DFA_WSSIZE (-19) +#define PCRE_ERROR_DFA_RECURSE (-20) +#define PCRE_ERROR_RECURSIONLIMIT (-21) +#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */ +#define PCRE_ERROR_BADNEWLINE (-23) + +/* Request types for pcre_fullinfo() */ + +#define PCRE_INFO_OPTIONS 0 +#define PCRE_INFO_SIZE 1 +#define PCRE_INFO_CAPTURECOUNT 2 +#define PCRE_INFO_BACKREFMAX 3 +#define PCRE_INFO_FIRSTBYTE 4 +#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ +#define PCRE_INFO_FIRSTTABLE 5 +#define PCRE_INFO_LASTLITERAL 6 +#define PCRE_INFO_NAMEENTRYSIZE 7 +#define PCRE_INFO_NAMECOUNT 8 +#define PCRE_INFO_NAMETABLE 9 +#define PCRE_INFO_STUDYSIZE 10 +#define PCRE_INFO_DEFAULT_TABLES 11 +#define PCRE_INFO_OKPARTIAL 12 +#define PCRE_INFO_JCHANGED 13 +#define PCRE_INFO_HASCRORLF 14 + +/* Request types for pcre_config(). Do not re-arrange, in order to remain +compatible. */ + +#define PCRE_CONFIG_UTF8 0 +#define PCRE_CONFIG_NEWLINE 1 +#define PCRE_CONFIG_LINK_SIZE 2 +#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 +#define PCRE_CONFIG_MATCH_LIMIT 4 +#define PCRE_CONFIG_STACKRECURSE 5 +#define PCRE_CONFIG_UNICODE_PROPERTIES 6 +#define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7 +#define PCRE_CONFIG_BSR 8 + +/* Bit flags for the pcre_extra structure. Do not re-arrange or redefine +these bits, just add new ones on the end, in order to remain compatible. */ + +#define PCRE_EXTRA_STUDY_DATA 0x0001 +#define PCRE_EXTRA_MATCH_LIMIT 0x0002 +#define PCRE_EXTRA_CALLOUT_DATA 0x0004 +#define PCRE_EXTRA_TABLES 0x0008 +#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010 + +/* Types */ + +struct real_pcre; /* declaration; the definition is private */ +typedef struct real_pcre pcre; + +/* When PCRE is compiled as a C++ library, the subject pointer type can be +replaced with a custom type. For conventional use, the public interface is a +const char *. */ + +#ifndef PCRE_SPTR +#define PCRE_SPTR const char * +#endif + +/* The structure for passing additional data to pcre_exec(). This is defined in +such as way as to be extensible. Always add new fields at the end, in order to +remain compatible. */ + +typedef struct pcre_extra { + unsigned long int flags; /* Bits for which fields are set */ + void *study_data; /* Opaque data from pcre_study() */ + unsigned long int match_limit; /* Maximum number of calls to match() */ + void *callout_data; /* Data passed back in callouts */ + const unsigned char *tables; /* Pointer to character tables */ + unsigned long int match_limit_recursion; /* Max recursive calls to match() */ +} pcre_extra; + +/* The structure for passing out data via the pcre_callout_function. We use a +structure so that new fields can be added on the end in future versions, +without changing the API of the function, thereby allowing old clients to work +without modification. */ + +typedef struct pcre_callout_block { + int version; /* Identifies version of block */ + /* ------------------------ Version 0 ------------------------------- */ + int callout_number; /* Number compiled into pattern */ + int *offset_vector; /* The offset vector */ + PCRE_SPTR subject; /* The subject being matched */ + int subject_length; /* The length of the subject */ + int start_match; /* Offset to start of this match attempt */ + int current_position; /* Where we currently are in the subject */ + int capture_top; /* Max current capture */ + int capture_last; /* Most recently closed capture */ + void *callout_data; /* Data passed in with the call */ + /* ------------------- Added for Version 1 -------------------------- */ + int pattern_position; /* Offset to next item in the pattern */ + int next_item_length; /* Length of next item in the pattern */ + /* ------------------------------------------------------------------ */ +} pcre_callout_block; + +/* Indirection for store get and free functions. These can be set to +alternative malloc/free functions if required. Special ones are used in the +non-recursive case for "frames". There is also an optional callout function +that is triggered by the (?) regex item. For Virtual Pascal, these definitions +have to take another form. */ + +#ifndef VPCOMPAT +PCRE_EXP_DECL void *(*pcre_malloc)(size_t); +PCRE_EXP_DECL void (*pcre_free)(void *); +PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t); +PCRE_EXP_DECL void (*pcre_stack_free)(void *); +PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *); +#else /* VPCOMPAT */ +PCRE_EXP_DECL void *pcre_malloc(size_t); +PCRE_EXP_DECL void pcre_free(void *); +PCRE_EXP_DECL void *pcre_stack_malloc(size_t); +PCRE_EXP_DECL void pcre_stack_free(void *); +PCRE_EXP_DECL int pcre_callout(pcre_callout_block *); +#endif /* VPCOMPAT */ + +/* Exported PCRE functions */ + +PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *, + const unsigned char *); +PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **, + int *, const unsigned char *); +PCRE_EXP_DECL int pcre_config(int, void *); +PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *, + int *, int, const char *, char *, int); +PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *, + int); +PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *, + const char *, int, int, int, int *, int , int *, int); +PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR, + int, int, int, int *, int); +PCRE_EXP_DECL void pcre_free_substring(const char *); +PCRE_EXP_DECL void pcre_free_substring_list(const char **); +PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int, + void *); +PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *, + int *, int, const char *, const char **); +PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *); +PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *, + char **, char **); +PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int, + const char **); +PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int, + const char ***); +PCRE_EXP_DECL int pcre_info(const pcre *, int *, int *); +PCRE_EXP_DECL const unsigned char *pcre_maketables(void); +PCRE_EXP_DECL int pcre_refcount(pcre *, int); +PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **); +PCRE_EXP_DECL const char *pcre_version(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* End of pcre.h */ diff --git a/extensions/regex/sdk/smsdk_config.h b/extensions/regex/sdk/smsdk_config.h new file mode 100644 index 00000000..0889a8f5 --- /dev/null +++ b/extensions/regex/sdk/smsdk_config.h @@ -0,0 +1,79 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Sample Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ + +/** + * @file smsdk_config.h + * @brief Contains macros for configuring basic extension information. + */ + +/* Basic information exposed publicly */ +#define SMEXT_CONF_NAME "Regex" +#define SMEXT_CONF_DESCRIPTION "Provides regex natives for plugins" +#define SMEXT_CONF_VERSION "SVN_FULL_VERSION" +#define SMEXT_CONF_AUTHOR "AlliedModders LLC" +#define SMEXT_CONF_URL "http://www.sourcemod.net/" +#define SMEXT_CONF_LOGTAG "REGEX" +#define SMEXT_CONF_LICENSE "GPL" +#define SMEXT_CONF_DATESTRING __DATE__ + +/** + * @brief Exposes plugin's main interface. + */ +#define SMEXT_LINK(name) SDKExtension *g_pExtensionIface = name; + +/** + * @brief Sets whether or not this plugin required Metamod. + * NOTE: Uncomment to enable, comment to disable. + */ +//#define SMEXT_CONF_METAMOD + +/** Enable interfaces you want to use here by uncommenting lines */ +//#define SMEXT_ENABLE_FORWARDSYS +#define SMEXT_ENABLE_HANDLESYS +//#define SMEXT_ENABLE_PLAYERHELPERS +//#define SMEXT_ENABLE_DBMANAGER +//#define SMEXT_ENABLE_GAMECONF +//#define SMEXT_ENABLE_MEMUTILS +//#define SMEXT_ENABLE_GAMEHELPERS +//#define SMEXT_ENABLE_TIMERSYS +//#define SMEXT_ENABLE_THREADER +//#define SMEXT_ENABLE_LIBSYS +//#define SMEXT_ENABLE_MENUS +//#define SMEXT_ENABLE_ADTFACTORY +//#define SMEXT_ENABLE_PLUGINSYS +//#define SMEXT_ENABLE_ADMINSYS +//#define SMEXT_ENABLE_TEXTPARSERS +#define SMEXT_ENABLE_USERMSGS + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ diff --git a/extensions/regex/sdk/smsdk_ext.cpp b/extensions/regex/sdk/smsdk_ext.cpp new file mode 100644 index 00000000..0c728f00 --- /dev/null +++ b/extensions/regex/sdk/smsdk_ext.cpp @@ -0,0 +1,455 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Base Extension Code + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <stdio.h> +#include <malloc.h> +#include "smsdk_ext.h" + +/** + * @file smsdk_ext.cpp + * @brief Contains wrappers for making Extensions easier to write. + */ + +IExtension *myself = NULL; /**< Ourself */ +IShareSys *g_pShareSys = NULL; /**< Share system */ +IShareSys *sharesys = NULL; /**< Share system */ +ISourceMod *g_pSM = NULL; /**< SourceMod helpers */ +ISourceMod *smutils = NULL; /**< SourceMod helpers */ + +#if defined SMEXT_ENABLE_FORWARDSYS +IForwardManager *g_pForwards = NULL; /**< Forward system */ +IForwardManager *forwards = NULL; /**< Forward system */ +#endif +#if defined SMEXT_ENABLE_HANDLESYS +IHandleSys *g_pHandleSys = NULL; /**< Handle system */ +IHandleSys *handlesys = NULL; /**< Handle system */ +#endif +#if defined SMEXT_ENABLE_PLAYERHELPERS +IPlayerManager *playerhelpers = NULL; /**< Player helpers */ +#endif //SMEXT_ENABLE_PLAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +IDBManager *dbi = NULL; /**< DB Manager */ +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +IGameConfigManager *gameconfs = NULL; /**< Game config manager */ +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_MEMUTILS +IMemoryUtils *memutils = NULL; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMEHELPERS +IGameHelpers *gamehelpers = NULL; +#endif +#if defined SMEXT_ENABLE_TIMERSYS +ITimerSystem *timersys = NULL; +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +IADTFactory *adtfactory = NULL; +#endif +#if defined SMEXT_ENABLE_THREADER +IThreader *threader = NULL; +#endif +#if defined SMEXT_ENABLE_LIBSYS +ILibrarySys *libsys = NULL; +#endif +#if defined SMEXT_ENABLE_PLUGINSYS +SourceMod::IPluginManager *plsys; +#endif +#if defined SMEXT_ENABLE_MENUS +IMenuManager *menus = NULL; +#endif +#if defined SMEXT_ENABLE_ADMINSYS +IAdminSystem *adminsys = NULL; +#endif +#if defined SMEXT_ENABLE_TEXTPARSERS +ITextParsers *textparsers = NULL; +#endif +#if defined SMEXT_ENABLE_USERMSGS +IUserMessages *usermsgs = NULL; +#endif + +/** Exports the main interface */ +PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI() +{ + return g_pExtensionIface; +} + +SDKExtension::SDKExtension() +{ +#if defined SMEXT_CONF_METAMOD + m_SourceMMLoaded = false; + m_WeAreUnloaded = false; + m_WeGotPauseChange = false; +#endif +} + +bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late) +{ + g_pShareSys = sharesys = sys; + myself = me; + +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; + + if (!m_SourceMMLoaded) + { + if (error) + { + snprintf(error, maxlength, "Metamod attach failed"); + } + return false; + } +#endif + SM_GET_IFACE(SOURCEMOD, g_pSM); + smutils = g_pSM; +#if defined SMEXT_ENABLE_HANDLESYS + SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys); + handlesys = g_pHandleSys; +#endif +#if defined SMEXT_ENABLE_FORWARDSYS + SM_GET_IFACE(FORWARDMANAGER, g_pForwards); + forwards = g_pForwards; +#endif +#if defined SMEXT_ENABLE_PLAYERHELPERS + SM_GET_IFACE(PLAYERMANAGER, playerhelpers); +#endif +#if defined SMEXT_ENABLE_DBMANAGER + SM_GET_IFACE(DBI, dbi); +#endif +#if defined SMEXT_ENABLE_GAMECONF + SM_GET_IFACE(GAMECONFIG, gameconfs); +#endif +#if defined SMEXT_ENABLE_MEMUTILS + SM_GET_IFACE(MEMORYUTILS, memutils); +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS + SM_GET_IFACE(GAMEHELPERS, gamehelpers); +#endif +#if defined SMEXT_ENABLE_TIMERSYS + SM_GET_IFACE(TIMERSYS, timersys); +#endif +#if defined SMEXT_ENABLE_ADTFACTORY + SM_GET_IFACE(ADTFACTORY, adtfactory); +#endif +#if defined SMEXT_ENABLE_THREADER + SM_GET_IFACE(THREADER, threader); +#endif +#if defined SMEXT_ENABLE_LIBSYS + SM_GET_IFACE(LIBRARYSYS, libsys); +#endif +#if defined SMEXT_ENABLE_PLUGINSYS + SM_GET_IFACE(PLUGINSYSTEM, plsys); +#endif +#if defined SMEXT_ENABLE_MENUS + SM_GET_IFACE(MENUMANAGER, menus); +#endif +#if defined SMEXT_ENABLE_ADMINSYS + SM_GET_IFACE(ADMINSYS, adminsys); +#endif +#if defined SMEXT_ENABLE_TEXTPARSERS + SM_GET_IFACE(TEXTPARSERS, textparsers); +#endif +#if defined SMEXT_ENABLE_USERMSGS + SM_GET_IFACE(USERMSGS, usermsgs); +#endif + + if (SDK_OnLoad(error, maxlength, late)) + { +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; +#endif + return true; + } + + return false; +} + +bool SDKExtension::IsMetamodExtension() +{ +#if defined SMEXT_CONF_METAMOD + return true; +#else + return false; +#endif +} + +void SDKExtension::OnExtensionPauseChange(bool state) +{ +#if defined SMEXT_CONF_METAMOD + m_WeGotPauseChange = true; +#endif + SDK_OnPauseChange(state); +} + +void SDKExtension::OnExtensionsAllLoaded() +{ + SDK_OnAllLoaded(); +} + +void SDKExtension::OnExtensionUnload() +{ +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; +#endif + SDK_OnUnload(); +} + +const char *SDKExtension::GetExtensionAuthor() +{ + return SMEXT_CONF_AUTHOR; +} + +const char *SDKExtension::GetExtensionDateString() +{ + return SMEXT_CONF_DATESTRING; +} + +const char *SDKExtension::GetExtensionDescription() +{ + return SMEXT_CONF_DESCRIPTION; +} + +const char *SDKExtension::GetExtensionVerString() +{ + return SMEXT_CONF_VERSION; +} + +const char *SDKExtension::GetExtensionName() +{ + return SMEXT_CONF_NAME; +} + +const char *SDKExtension::GetExtensionTag() +{ + return SMEXT_CONF_LOGTAG; +} + +const char *SDKExtension::GetExtensionURL() +{ + return SMEXT_CONF_URL; +} + +bool SDKExtension::SDK_OnLoad(char *error, size_t maxlength, bool late) +{ + return true; +} + +void SDKExtension::SDK_OnUnload() +{ +} + +void SDKExtension::SDK_OnPauseChange(bool paused) +{ +} + +void SDKExtension::SDK_OnAllLoaded() +{ +} + +#if defined SMEXT_CONF_METAMOD + +PluginId g_PLID = 0; /**< Metamod plugin ID */ +ISmmPlugin *g_PLAPI = NULL; /**< Metamod plugin API */ +SourceHook::ISourceHook *g_SHPtr = NULL; /**< SourceHook pointer */ +ISmmAPI *g_SMAPI = NULL; /**< SourceMM API pointer */ + +IVEngineServer *engine = NULL; /**< IVEngineServer pointer */ +IServerGameDLL *gamedll = NULL; /**< IServerGameDLL pointer */ + +/** Exposes the extension to Metamod */ +SMM_API void *PL_EXPOSURE(const char *name, int *code) +{ +#if defined METAMOD_PLAPI_VERSION + if (name && !strcmp(name, METAMOD_PLAPI_NAME)) +#else + if (name && !strcmp(name, PLAPI_NAME)) +#endif + { + if (code) + { + *code = IFACE_OK; + } + return static_cast<void *>(g_pExtensionIface); + } + + if (code) + { + *code = IFACE_FAILED; + } + + return NULL; +} + +bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + PLUGIN_SAVEVARS(); + +#if defined METAMOD_PLAPI_VERSION + GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); + GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); +#else + GET_V_IFACE_ANY(GetServerFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); + GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); +#endif + + m_SourceMMLoaded = true; + + return SDK_OnMetamodLoad(ismm, error, maxlen, late); +} + +bool SDKExtension::Unload(char *error, size_t maxlen) +{ + if (!m_WeAreUnloaded) + { + if (error) + { + snprintf(error, maxlen, "This extension must be unloaded by SourceMod."); + } + return false; + } + + return SDK_OnMetamodUnload(error, maxlen); +} + +bool SDKExtension::Pause(char *error, size_t maxlen) +{ + if (!m_WeGotPauseChange) + { + if (error) + { + snprintf(error, maxlen, "This extension must be paused by SourceMod."); + } + return false; + } + + m_WeGotPauseChange = false; + + return SDK_OnMetamodPauseChange(true, error, maxlen); +} + +bool SDKExtension::Unpause(char *error, size_t maxlen) +{ + if (!m_WeGotPauseChange) + { + if (error) + { + snprintf(error, maxlen, "This extension must be unpaused by SourceMod."); + } + return false; + } + + m_WeGotPauseChange = false; + + return SDK_OnMetamodPauseChange(false, error, maxlen); +} + +const char *SDKExtension::GetAuthor() +{ + return GetExtensionAuthor(); +} + +const char *SDKExtension::GetDate() +{ + return GetExtensionDateString(); +} + +const char *SDKExtension::GetDescription() +{ + return GetExtensionDescription(); +} + +const char *SDKExtension::GetLicense() +{ + return SMEXT_CONF_LICENSE; +} + +const char *SDKExtension::GetLogTag() +{ + return GetExtensionTag(); +} + +const char *SDKExtension::GetName() +{ + return GetExtensionName(); +} + +const char *SDKExtension::GetURL() +{ + return GetExtensionURL(); +} + +const char *SDKExtension::GetVersion() +{ + return GetExtensionVerString(); +} + +bool SDKExtension::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late) +{ + return true; +} + +bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t maxlength) +{ + return true; +} + +bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength) +{ + return true; +} + +#endif + +/* Overload a few things to prevent libstdc++ linking */ +#if defined __linux__ +extern "C" void __cxa_pure_virtual(void) +{ +} + +void *operator new(size_t size) +{ + return malloc(size); +} + +void *operator new[](size_t size) +{ + return malloc(size); +} + +void operator delete(void *ptr) +{ + free(ptr); +} + +void operator delete[](void * ptr) +{ + free(ptr); +} +#endif diff --git a/extensions/regex/sdk/smsdk_ext.h b/extensions/regex/sdk/smsdk_ext.h new file mode 100644 index 00000000..4702f2a2 --- /dev/null +++ b/extensions/regex/sdk/smsdk_ext.h @@ -0,0 +1,327 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Base Extension Code + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ + +/** + * @file smsdk_ext.h + * @brief Contains wrappers for making Extensions easier to write. + */ + +#include "smsdk_config.h" +#include <IExtensionSys.h> +#include <IHandleSys.h> +#include <sp_vm_api.h> +#include <sm_platform.h> +#include <ISourceMod.h> +#if defined SMEXT_ENABLE_FORWARDSYS +#include <IForwardSys.h> +#endif //SMEXT_ENABLE_FORWARDSYS +#if defined SMEXT_ENABLE_PLAYERHELPERS +#include <IPlayerHelpers.h> +#endif //SMEXT_ENABLE_PlAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +#include <IDBDriver.h> +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +#include <IGameConfigs.h> +#endif +#if defined SMEXT_ENABLE_MEMUTILS +#include <IMemoryUtils.h> +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS +#include <IGameHelpers.h> +#endif +#if defined SMEXT_ENABLE_TIMERSYS +#include <ITimerSystem.h> +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +#include <IADTFactory.h> +#endif +#if defined SMEXT_ENABLE_THREADER +#include <IThreader.h> +#endif +#if defined SMEXT_ENABLE_LIBSYS +#include <ILibrarySys.h> +#endif +#if defined SMEXT_ENABLE_PLUGINSYS +#include <IPluginSys.h> +#endif +#if defined SMEXT_ENABLE_MENUS +#include <IMenuManager.h> +#endif +#if defined SMEXT_ENABLE_ADMINSYS +#include <IAdminSystem.h> +#endif +#if defined SMEXT_ENABLE_TEXTPARSERS +#include <ITextParsers.h> +#endif +#if defined SMEXT_ENABLE_USERMSGS +#include <IUserMessages.h> +#endif + +#if defined SMEXT_CONF_METAMOD +#include <ISmmPlugin.h> +#include <eiface.h> +#endif + +using namespace SourceMod; +using namespace SourcePawn; + +class SDKExtension : +#if defined SMEXT_CONF_METAMOD + public ISmmPlugin, +#endif + public IExtensionInterface +{ +public: + /** Constructor */ + SDKExtension(); +public: + /** + * @brief This is called after the initial loading sequence has been processed. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @param late Whether or not the module was loaded after map load. + * @return True to succeed loading, false to fail. + */ + virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late); + + /** + * @brief This is called right before the extension is unloaded. + */ + virtual void SDK_OnUnload(); + + /** + * @brief This is called once all known extensions have been loaded. + */ + virtual void SDK_OnAllLoaded(); + + /** + * @brief Called when the pause state is changed. + */ + virtual void SDK_OnPauseChange(bool paused); + +#if defined SMEXT_CONF_METAMOD + /** + * @brief Called when Metamod is attached, before the extension version is called. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @param late Whether or not Metamod considers this a late load. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); + + /** + * @brief Called when Metamod is detaching, after the extension version is called. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength); + + /** + * @brief Called when Metamod's pause state is changing. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param paused Pause state being set. + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength); +#endif + +public: //IExtensionInterface + virtual bool OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late); + virtual void OnExtensionUnload(); + virtual void OnExtensionsAllLoaded(); + + /** Returns whether or not this is a Metamod-based extension */ + virtual bool IsMetamodExtension(); + + /** + * @brief Called when the pause state changes. + * + * @param state True if being paused, false if being unpaused. + */ + virtual void OnExtensionPauseChange(bool state); + + /** Returns name */ + virtual const char *GetExtensionName(); + /** Returns URL */ + virtual const char *GetExtensionURL(); + /** Returns log tag */ + virtual const char *GetExtensionTag(); + /** Returns author */ + virtual const char *GetExtensionAuthor(); + /** Returns version string */ + virtual const char *GetExtensionVerString(); + /** Returns description string */ + virtual const char *GetExtensionDescription(); + /** Returns date string */ + virtual const char *GetExtensionDateString(); +#if defined SMEXT_CONF_METAMOD +public: //ISmmPlugin + /** Called when the extension is attached to Metamod. */ + virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late); + /** Returns the author to MM */ + virtual const char *GetAuthor(); + /** Returns the name to MM */ + virtual const char *GetName(); + /** Returns the description to MM */ + virtual const char *GetDescription(); + /** Returns the URL to MM */ + virtual const char *GetURL(); + /** Returns the license to MM */ + virtual const char *GetLicense(); + /** Returns the version string to MM */ + virtual const char *GetVersion(); + /** Returns the date string to MM */ + virtual const char *GetDate(); + /** Returns the logtag to MM */ + virtual const char *GetLogTag(); + /** Called on unload */ + virtual bool Unload(char *error, size_t maxlength); + /** Called on pause */ + virtual bool Pause(char *error, size_t maxlength); + /** Called on unpause */ + virtual bool Unpause(char *error, size_t maxlength); +private: + bool m_SourceMMLoaded; + bool m_WeAreUnloaded; + bool m_WeGotPauseChange; +#endif +}; + +extern SDKExtension *g_pExtensionIface; +extern IExtension *myself; + +extern IShareSys *g_pShareSys; +extern IShareSys *sharesys; /* Note: Newer name */ +extern ISourceMod *g_pSM; +extern ISourceMod *smutils; /* Note: Newer name */ + +/* Optional interfaces are below */ +#if defined SMEXT_ENABLE_FORWARDSYS +extern IForwardManager *g_pForwards; +extern IForwardManager *forwards; /* Note: Newer name */ +#endif //SMEXT_ENABLE_FORWARDSYS +#if defined SMEXT_ENABLE_HANDLESYS +extern IHandleSys *g_pHandleSys; +extern IHandleSys *handlesys; /* Note: Newer name */ +#endif //SMEXT_ENABLE_HANDLESYS +#if defined SMEXT_ENABLE_PLAYERHELPERS +extern IPlayerManager *playerhelpers; +#endif //SMEXT_ENABLE_PLAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +extern IDBManager *dbi; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +extern IGameConfigManager *gameconfs; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_MEMUTILS +extern IMemoryUtils *memutils; +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS +extern IGameHelpers *gamehelpers; +#endif +#if defined SMEXT_ENABLE_TIMERSYS +extern ITimerSystem *timersys; +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +extern IADTFactory *adtfactory; +#endif +#if defined SMEXT_ENABLE_THREADER +extern IThreader *threader; +#endif +#if defined SMEXT_ENABLE_LIBSYS +extern ILibrarySys *libsys; +#endif +#if defined SMEXT_ENABLE_PLUGINSYS +extern SourceMod::IPluginManager *plsys; +#endif +#if defined SMEXT_ENABLE_MENUS +extern IMenuManager *menus; +#endif +#if defined SMEXT_ENABLE_ADMINSYS +extern IAdminSystem *adminsys; +#endif +#if defined SMEXT_ENABLE_USERMSGS +extern IUserMessages *usermsgs; +#endif + +#if defined SMEXT_CONF_METAMOD +PLUGIN_GLOBALVARS(); +extern IVEngineServer *engine; +extern IServerGameDLL *gamedll; +#endif + +/** Creates a SourceMod interface macro pair */ +#define SM_MKIFACE(name) SMINTERFACE_##name##_NAME, SMINTERFACE_##name##_VERSION +/** Automates retrieving SourceMod interfaces */ +#define SM_GET_IFACE(prefix, addr) \ + if (!g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)) \ + { \ + if (error != NULL && maxlength) \ + { \ + size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \ + if (len >= maxlength) \ + { \ + error[maxlength - 1] = '\0'; \ + } \ + } \ + return false; \ + } +/** Automates retrieving SourceMod interfaces when needed outside of SDK_OnLoad() */ +#define SM_GET_LATE_IFACE(prefix, addr) \ + g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr) +/** Validates a SourceMod interface pointer */ +#define SM_CHECK_IFACE(prefix, addr) \ + if (!addr) \ + { \ + if (error != NULL && maxlength) \ + { \ + size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \ + if (len >= maxlength) \ + { \ + error[maxlength - 1] = '\0'; \ + } \ + } \ + return false; \ + } + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ diff --git a/extensions/tf2/Makefile.ep1 b/extensions/tf2/Makefile.ep1 new file mode 100644 index 00000000..87f0423f --- /dev/null +++ b/extensions/tf2/Makefile.ep1 @@ -0,0 +1,88 @@ +#(C)2004-2006 SourceMM Development Team +# Makefile written by David "BAILOPAN" Anderson + +SMSDK = ../smsdk +SRCDS = ~/srcds_l/steaminstall +SOURCEMM = ../sourcemm +HL2SDK = ../hl2sdk + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = game.tf2 + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ + -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.ep1 extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.ep1 all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/tf2/Makefile.ep2 b/extensions/tf2/Makefile.ep2 new file mode 100644 index 00000000..ff407f70 --- /dev/null +++ b/extensions/tf2/Makefile.ep2 @@ -0,0 +1,88 @@ +#(C)2004-2006 SourceMM Development Team +# Makefile written by David "BAILOPAN" Anderson + +SMSDK = ../smsdk +SRCDS = ~/srcds_l/steaminstall +SOURCEMM = ../sourcemm +HL2SDK = ../hl2sdk-ob + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = game.tf2 + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ + -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DORANGEBOX_BUILD +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/orangebox/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/orangebox/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.ep2 extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.ep2 all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/tf2/Makefile.orig b/extensions/tf2/Makefile.orig new file mode 100644 index 00000000..f31cf6f2 --- /dev/null +++ b/extensions/tf2/Makefile.orig @@ -0,0 +1,88 @@ +#(C)2004-2006 SourceMM Development Team +# Makefile written by David "BAILOPAN" Anderson + +SMSDK = ../smsdk +SRCDS = ~/srcds_l/steaminstall +SOURCEMM = ../sourcemm +HL2SDK = ../hl2sdk + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = game.tf2 + +#Uncomment for SourceMM-enabled extensions +LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ + -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \ + -Wall -Werror -fPIC -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR)/sdk + ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so + $(MAKE) -f Makefile.orig extension + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) -f Makefile.orig all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/sdk/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/sdk/*.o + rm -rf Debug/$(BINARY) diff --git a/extensions/tf2/RegNatives.cpp b/extensions/tf2/RegNatives.cpp new file mode 100644 index 00000000..2f001b78 --- /dev/null +++ b/extensions/tf2/RegNatives.cpp @@ -0,0 +1,50 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" +#include "RegNatives.h" + +RegNatives g_RegNatives; + +void RegNatives::Register(ICallWrapper *pWrapper) +{ + m_List.push_back(pWrapper); +} + +void RegNatives::UnregisterAll() +{ + SourceHook::List<ICallWrapper *>::iterator iter; + + for (iter=m_List.begin(); iter!=m_List.end(); iter++) + { + (*iter)->Destroy(); + } +} diff --git a/extensions/tf2/RegNatives.h b/extensions/tf2/RegNatives.h new file mode 100644 index 00000000..1913530f --- /dev/null +++ b/extensions/tf2/RegNatives.h @@ -0,0 +1,48 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_TF2TOOLS_REGNATIVES_H_ +#define _INCLUDE_TF2TOOLS_REGNATIVES_H_ + +#include <sh_list.h> + +class RegNatives +{ +public: + void Register(ICallWrapper *pWrapper); + void UnregisterAll(); +private: + SourceHook::List<ICallWrapper *> m_List; +}; + +extern RegNatives g_RegNatives; + +#endif //_INCLUDE_TF2TOOLS_REGNATIVES_H_ diff --git a/extensions/tf2/extension.cpp b/extensions/tf2/extension.cpp new file mode 100644 index 00000000..ae67d077 --- /dev/null +++ b/extensions/tf2/extension.cpp @@ -0,0 +1,229 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" +#include "RegNatives.h" +#include "iplayerinfo.h" + +/** + * @file extension.cpp + * @brief Implement extension code here. + */ + + +TF2Tools g_TF2Tools; +IGameConfig *g_pGameConf = NULL; + +IBinTools *g_pBinTools = NULL; + +SMEXT_LINK(&g_TF2Tools); + +SendProp *playerSharedOffset; + +extern sp_nativeinfo_t g_TFNatives[]; + +bool TF2Tools::SDK_OnLoad(char *error, size_t maxlength, bool late) +{ + sharesys->AddDependency(myself, "bintools.ext", true, true); + + char conf_error[255]; + if (!gameconfs->LoadGameConfigFile("sm-tf2.games", &g_pGameConf, conf_error, sizeof(conf_error))) + { + if (error) + { + snprintf(error, maxlength, "Could not read sm-tf2.games.txt: %s", conf_error); + } + return false; + } + + sharesys->AddNatives(myself, g_TFNatives); + sharesys->RegisterLibrary(myself, "tf2"); + + playerSharedOffset = gamehelpers->FindInSendTable("CTFPlayer", "DT_TFPlayerShared"); + + playerhelpers->RegisterCommandTargetProcessor(this); + + return true; +} + +bool TF2Tools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); + + return true; +} + +void TF2Tools::SDK_OnUnload() +{ + g_RegNatives.UnregisterAll(); + gameconfs->CloseGameConfigFile(g_pGameConf); +} + +void TF2Tools::SDK_OnAllLoaded() +{ + SM_GET_LATE_IFACE(BINTOOLS, g_pBinTools); +} + +bool TF2Tools::QueryRunning(char *error, size_t maxlength) +{ + SM_CHECK_IFACE(BINTOOLS, g_pBinTools); + + return true; +} + +bool TF2Tools::QueryInterfaceDrop(SMInterface *pInterface) +{ + if (pInterface == g_pBinTools) + { + return false; + } + + return IExtensionInterface::QueryInterfaceDrop(pInterface); +} + +void TF2Tools::NotifyInterfaceDrop(SMInterface *pInterface) +{ + g_RegNatives.UnregisterAll(); +} + +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + size_t len = vsnprintf(buffer, maxlength, fmt, ap); + va_end(ap); + + if (len >= maxlength) + { + buffer[maxlength - 1] = '\0'; + return (maxlength - 1); + } + else + { + return len; + } +} + +bool TF2Tools::ProcessCommandTarget(cmd_target_info_t *info) +{ + int max_clients; + IPlayerInfo *pInfo; + unsigned int team_index = 0; + IGamePlayer *pPlayer, *pAdmin; + + if ((info->flags & COMMAND_FILTER_NO_MULTI) == COMMAND_FILTER_NO_MULTI) + { + return false; + } + + if (info->admin) + { + if ((pAdmin = playerhelpers->GetGamePlayer(info->admin)) == NULL) + { + return false; + } + if (!pAdmin->IsInGame()) + { + return false; + } + } + else + { + pAdmin = NULL; + } + + if (strcmp(info->pattern, "@red") == 0 ) + { + team_index = 2; + } + else if (strcmp(info->pattern, "@blue") == 0) + { + team_index = 3; + } + else + { + return false; + } + + info->num_targets = 0; + + max_clients = playerhelpers->GetMaxClients(); + for (int i = 1; + i <= max_clients && (cell_t)info->num_targets < info->max_targets; + i++) + { + if ((pPlayer = playerhelpers->GetGamePlayer(i)) == NULL) + { + continue; + } + if (!pPlayer->IsInGame()) + { + continue; + } + if ((pInfo = pPlayer->GetPlayerInfo()) == NULL) + { + continue; + } + if (pInfo->GetTeamIndex() != (int)team_index) + { + continue; + } + if (playerhelpers->FilterCommandTarget(pAdmin, pPlayer, info->flags) + != COMMAND_TARGET_VALID) + { + continue; + } + info->targets[info->num_targets] = i; + info->num_targets++; + } + + if (info->num_targets == 0) + { + info->reason = COMMAND_TARGET_EMPTY_FILTER; + } + else + { + info->reason = COMMAND_TARGET_VALID; + } + + info->target_name_style = COMMAND_TARGETNAME_RAW; + if (team_index == 2) + { + UTIL_Format(info->target_name, info->target_name_maxlength, "Red Team"); + } + else if (team_index == 3) + { + UTIL_Format(info->target_name, info->target_name_maxlength, "Blue Team"); + } + + return true; +} + diff --git a/extensions/tf2/extension.h b/extensions/tf2/extension.h new file mode 100644 index 00000000..91090fd9 --- /dev/null +++ b/extensions/tf2/extension.h @@ -0,0 +1,130 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ + +/** + * @file extension.h + * @brief Sample extension code header. + */ + +#include "smsdk_ext.h" +#include <IBinTools.h> + +/** + * @brief Sample implementation of the SDK Extension. + * Note: Uncomment one of the pre-defined virtual functions in order to use it. + */ +class TF2Tools : + public SDKExtension, + public ICommandTargetProcessor +{ +public: + /** + * @brief This is called after the initial loading sequence has been processed. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @param late Whether or not the module was loaded after map load. + * @return True to succeed loading, false to fail. + */ + virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late); + + /** + * @brief This is called right before the extension is unloaded. + */ + virtual void SDK_OnUnload(); + + /** + * @brief This is called once all known extensions have been loaded. + * Note: It is is a good idea to add natives here, if any are provided. + */ + virtual void SDK_OnAllLoaded(); + + /** + * @brief Called when the pause state is changed. + */ + //virtual void SDK_OnPauseChange(bool paused); + + /** + * @brief this is called when Core wants to know if your extension is working. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @return True if working, false otherwise. + */ + virtual bool QueryRunning(char *error, size_t maxlength); + + void NotifyInterfaceDrop(SMInterface *pInterface); + bool QueryInterfaceDrop(SMInterface *pInterface); +public: + bool ProcessCommandTarget(cmd_target_info_t *info); +public: +#if defined SMEXT_CONF_METAMOD + /** + * @brief Called when Metamod is attached, before the extension version is called. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @param late Whether or not Metamod considers this a late load. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); + + /** + * @brief Called when Metamod is detaching, after the extension version is called. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + //virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength); + + /** + * @brief Called when Metamod's pause state is changing. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param paused Pause state being set. + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + //virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength); +#endif +}; + +extern IBinTools *g_pBinTools; +extern IGameConfig *g_pGameConf; +extern SendProp *playerSharedOffset; + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_ diff --git a/extensions/tf2/msvc8/tf2.sln b/extensions/tf2/msvc8/tf2.sln new file mode 100644 index 00000000..5aa5277e --- /dev/null +++ b/extensions/tf2/msvc8/tf2.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tf2", "tf2.vcproj", "{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Episode1|Win32 = Debug - Episode1|Win32 + Debug - Old Metamod|Win32 = Debug - Old Metamod|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Release - Episode 1|Win32 = Release - Episode 1|Win32 + Release - Old Metamod|Win32 = Release - Old Metamod|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode1|Win32.ActiveCfg = Debug - Episode1|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode1|Win32.Build.0 = Debug - Episode1|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Old Metamod|Win32.ActiveCfg = Debug - Old Metamod|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Old Metamod|Win32.Build.0 = Debug - Old Metamod|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.ActiveCfg = Release - Episode 1|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.Build.0 = Release - Episode 1|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Old Metamod|Win32.ActiveCfg = Release - Old Metamod|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Old Metamod|Win32.Build.0 = Release - Old Metamod|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/extensions/tf2/msvc8/tf2.vcproj b/extensions/tf2/msvc8/tf2.vcproj new file mode 100644 index 00000000..67172d95 --- /dev/null +++ b/extensions/tf2/msvc8/tf2.vcproj @@ -0,0 +1,727 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="tf2" + ProjectGUID="{B3E797CF-4E77-4C9D-B8A8-7589B6902206}" + RootNamespace="tf2" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="tier0.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug - Episode1|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug - Old Metamod|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release - Old Metamod|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release - Orange Box|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release - Episode 1|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + FavorSizeOrSpeed="1" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" + RuntimeLibrary="0" + EnableEnhancedInstructionSet="1" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + OutputFile="$(OutDir)\game.tf2.ext.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath="..\extension.cpp" + > + </File> + <File + RelativePath="..\natives.cpp" + > + </File> + <File + RelativePath="..\RegNatives.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath="..\extension.h" + > + </File> + <File + RelativePath="..\RegNatives.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + <File + RelativePath="..\version.rc" + > + </File> + </Filter> + <Filter + Name="SourceMod SDK" + UniqueIdentifier="{31958233-BB2D-4e41-A8F9-CE8A4684F436}" + > + <File + RelativePath="..\sdk\smsdk_config.h" + > + </File> + <File + RelativePath="..\sdk\smsdk_ext.cpp" + > + </File> + <File + RelativePath="..\sdk\smsdk_ext.h" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/extensions/tf2/natives.cpp b/extensions/tf2/natives.cpp new file mode 100644 index 00000000..7d6887f0 --- /dev/null +++ b/extensions/tf2/natives.cpp @@ -0,0 +1,159 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include "extension.h" +#include "RegNatives.h" + +#define REGISTER_NATIVE_ADDR(name, code) \ + void *addr; \ + if (!g_pGameConf->GetMemSig(name, &addr)) \ + { \ + return pContext->ThrowNativeError("Failed to locate function"); \ + } \ + code; \ + g_RegNatives.Register(pWrapper); + +inline CBaseEntity *GetCBaseEntity(int num, bool onlyPlayers) +{ + edict_t *pEdict = engine->PEntityOfEntIndex(num); + if (!pEdict || pEdict->IsFree()) + { + return NULL; + } + + if (num > 0 && num < playerhelpers->GetMaxClients()) + { + IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(pEdict); + if (!pPlayer || !pPlayer->IsConnected()) + { + return NULL; + } + } + else if (onlyPlayers) + { + return NULL; + } + + IServerUnknown *pUnk; + if ((pUnk=pEdict->GetUnknown()) == NULL) + { + return NULL; + } + + return pUnk->GetBaseEntity(); +} + + +// native TF2_Burn(client) +cell_t TF2_Burn(IPluginContext *pContext, const cell_t *params) +{ + static ICallWrapper *pWrapper = NULL; + + // CTFPlayerShared::Burn(CTFPlayer*) + if (!pWrapper) + { + REGISTER_NATIVE_ADDR("Burn", + PassInfo pass[1]; \ + pass[0].flags = PASSFLAG_BYVAL; \ + pass[0].size = sizeof(CBaseEntity *); \ + pass[0].type = PassType_Basic; \ + pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 1)) + } + + CBaseEntity *pEntity; + if (!(pEntity=GetCBaseEntity(params[1], true))) + { + return pContext->ThrowNativeError("Client index %d is not valid", params[1]); + } + + void *obj = (void *)((uint8_t *)pEntity + playerSharedOffset->GetOffset()); + + unsigned char vstk[sizeof(void *) + sizeof(CBaseEntity *)]; + unsigned char *vptr = vstk; + + *(void **)vptr = obj; + vptr += sizeof(void *); + *(CBaseEntity **)vptr = pEntity; + + pWrapper->Execute(vstk, NULL); + + return 1; +} + +// native TF2_Invuln(client, bool:something, bool:anothersomething) +cell_t TF2_Invuln(IPluginContext *pContext, const cell_t *params) +{ + static ICallWrapper *pWrapper = NULL; + + //CTFPlayerShared::SetInvulnerable(bool, bool) + if (!pWrapper) + { + REGISTER_NATIVE_ADDR("Invuln", + PassInfo pass[2]; \ + pass[0].flags = PASSFLAG_BYVAL; \ + pass[0].size = sizeof(bool); \ + pass[0].type = PassType_Basic; \ + pass[1].flags = PASSFLAG_BYVAL; \ + pass[1].size = sizeof(bool); \ + pass[1].type = PassType_Basic; \ + pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 2)) + } + + CBaseEntity *pEntity; + if (!(pEntity=GetCBaseEntity(params[1], true))) + { + return pContext->ThrowNativeError("Client index %d is not valid", params[1]); + } + + void *obj = (void *)((uint8_t *)pEntity + playerSharedOffset->GetOffset()); + + unsigned char vstk[sizeof(void *) + 2*sizeof(bool)]; + unsigned char *vptr = vstk; + + + *(void **)vptr = obj; + vptr += sizeof(bool); + *(bool *)vptr = !!params[2]; + vptr += sizeof(bool); + *(bool *)vptr = !!params[3]; + + pWrapper->Execute(vstk, NULL); + + return 1; +} + + +sp_nativeinfo_t g_TFNatives[] = +{ + {"TF2_Burn", TF2_Burn}, + {"TF2_Invuln", TF2_Invuln}, + {NULL, NULL} +}; diff --git a/extensions/tf2/sdk/smsdk_config.h b/extensions/tf2/sdk/smsdk_config.h new file mode 100644 index 00000000..09397393 --- /dev/null +++ b/extensions/tf2/sdk/smsdk_config.h @@ -0,0 +1,76 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Counter-Strike:Source Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ + +/** + * @file smsdk_config.h + * @brief Contains macros for configuring basic extension information. + */ + +#include "svn_version.h" + +/* Basic information exposed publicly */ +#define SMEXT_CONF_NAME "TF2 Tools" +#define SMEXT_CONF_DESCRIPTION "TF2 extended functionality" +#define SMEXT_CONF_VERSION SVN_FULL_VERSION +#define SMEXT_CONF_AUTHOR "AlliedModders LLC" +#define SMEXT_CONF_URL "http://www.sourcemod.net/" +#define SMEXT_CONF_LOGTAG "TF2" +#define SMEXT_CONF_LICENSE "GPL" +#define SMEXT_CONF_DATESTRING __DATE__ + +/** + * @brief Exposes plugin's main interface. + */ +#define SMEXT_LINK(name) SDKExtension *g_pExtensionIface = name; + +/** + * @brief Sets whether or not this plugin required Metamod. + * NOTE: Uncomment to enable, comment to disable. + */ +#define SMEXT_CONF_METAMOD + +/** Enable interfaces you want to use here by uncommenting lines */ +//#define SMEXT_ENABLE_FORWARDSYS +//#define SMEXT_ENABLE_HANDLESYS +#define SMEXT_ENABLE_PLAYERHELPERS +//#define SMEXT_ENABLE_DBMANAGER +#define SMEXT_ENABLE_GAMECONF +//#define SMEXT_ENABLE_MEMUTILS +#define SMEXT_ENABLE_GAMEHELPERS +//#define SMEXT_ENABLE_TIMERSYS +//#define SMEXT_ENABLE_THREADER +//#define SMEXT_ENABLE_LIBSYS +//#define SMEXT_ENABLE_USERMSGS + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_ diff --git a/extensions/tf2/sdk/smsdk_ext.cpp b/extensions/tf2/sdk/smsdk_ext.cpp new file mode 100644 index 00000000..f5e6f3fc --- /dev/null +++ b/extensions/tf2/sdk/smsdk_ext.cpp @@ -0,0 +1,422 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Base Extension Code + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#include <stdio.h> +#include <malloc.h> +#include "smsdk_ext.h" + +/** + * @file smsdk_ext.cpp + * @brief Contains wrappers for making Extensions easier to write. + */ + +IExtension *myself = NULL; /**< Ourself */ +IShareSys *g_pShareSys = NULL; /**< Share system */ +IShareSys *sharesys = NULL; /**< Share system */ +ISourceMod *g_pSM = NULL; /**< SourceMod helpers */ +ISourceMod *smutils = NULL; /**< SourceMod helpers */ + +#if defined SMEXT_ENABLE_FORWARDSYS +IForwardManager *g_pForwards = NULL; /**< Forward system */ +IForwardManager *forwards = NULL; /**< Forward system */ +#endif +#if defined SMEXT_ENABLE_HANDLESYS +IHandleSys *g_pHandleSys = NULL; /**< Handle system */ +IHandleSys *handlesys = NULL; /**< Handle system */ +#endif +#if defined SMEXT_ENABLE_PLAYERHELPERS +IPlayerManager *playerhelpers = NULL; /**< Player helpers */ +#endif //SMEXT_ENABLE_PLAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +IDBManager *dbi = NULL; /**< DB Manager */ +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +IGameConfigManager *gameconfs = NULL; /**< Game config manager */ +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_MEMUTILS +IMemoryUtils *memutils = NULL; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMEHELPERS +IGameHelpers *gamehelpers = NULL; +#endif +#if defined SMEXT_ENABLE_TIMERSYS +ITimerSystem *timersys = NULL; +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +IADTFactory *adtfactory = NULL; +#endif +#if defined SMEXT_ENABLE_THREADER +IThreader *threader = NULL; +#endif +#if defined SMEXT_ENABLE_LIBSYS +ILibrarySys *libsys = NULL; +#endif +#if defined SMEXT_ENABLE_USERMSGS +IUserMessages *usermsgs = NULL; +#endif + +/** Exports the main interface */ +PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI() +{ + return g_pExtensionIface; +} + +SDKExtension::SDKExtension() +{ +#if defined SMEXT_CONF_METAMOD + m_SourceMMLoaded = false; + m_WeAreUnloaded = false; + m_WeGotPauseChange = false; +#endif +} + +bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late) +{ + g_pShareSys = sharesys = sys; + myself = me; + +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; + + if (!m_SourceMMLoaded) + { + if (error) + { + snprintf(error, maxlength, "Metamod attach failed"); + } + return false; + } +#endif + SM_GET_IFACE(SOURCEMOD, g_pSM); + smutils = g_pSM; +#if defined SMEXT_ENABLE_HANDLESYS + SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys); + handlesys = g_pHandleSys; +#endif +#if defined SMEXT_ENABLE_FORWARDSYS + SM_GET_IFACE(FORWARDMANAGER, g_pForwards); + forwards = g_pForwards; +#endif +#if defined SMEXT_ENABLE_PLAYERHELPERS + SM_GET_IFACE(PLAYERMANAGER, playerhelpers); +#endif +#if defined SMEXT_ENABLE_DBMANAGER + SM_GET_IFACE(DBI, dbi); +#endif +#if defined SMEXT_ENABLE_GAMECONF + SM_GET_IFACE(GAMECONFIG, gameconfs); +#endif +#if defined SMEXT_ENABLE_MEMUTILS + SM_GET_IFACE(MEMORYUTILS, memutils); +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS + SM_GET_IFACE(GAMEHELPERS, gamehelpers); +#endif +#if defined SMEXT_ENABLE_TIMERSYS + SM_GET_IFACE(TIMERSYS, timersys); +#endif +#if defined SMEXT_ENABLE_ADTFACTORY + SM_GET_IFACE(ADTFACTORY, adtfactory); +#endif +#if defined SMEXT_ENABLE_THREADER + SM_GET_IFACE(THREADER, threader); +#endif +#if defined SMEXT_ENABLE_LIBSYS + SM_GET_IFACE(LIBRARYSYS, libsys); +#endif +#if defined SMEXT_ENABLE_USERMSGS + SM_GET_IFACE(USERMSGS, usermsgs); +#endif + + if (SDK_OnLoad(error, maxlength, late)) + { +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; +#endif + return true; + } + + return false; +} + +bool SDKExtension::IsMetamodExtension() +{ +#if defined SMEXT_CONF_METAMOD + return true; +#else + return false; +#endif +} + +void SDKExtension::OnExtensionPauseChange(bool state) +{ +#if defined SMEXT_CONF_METAMOD + m_WeGotPauseChange = true; +#endif + SDK_OnPauseChange(state); +} + +void SDKExtension::OnExtensionsAllLoaded() +{ + SDK_OnAllLoaded(); +} + +void SDKExtension::OnExtensionUnload() +{ +#if defined SMEXT_CONF_METAMOD + m_WeAreUnloaded = true; +#endif + SDK_OnUnload(); +} + +const char *SDKExtension::GetExtensionAuthor() +{ + return SMEXT_CONF_AUTHOR; +} + +const char *SDKExtension::GetExtensionDateString() +{ + return SMEXT_CONF_DATESTRING; +} + +const char *SDKExtension::GetExtensionDescription() +{ + return SMEXT_CONF_DESCRIPTION; +} + +const char *SDKExtension::GetExtensionVerString() +{ + return SMEXT_CONF_VERSION; +} + +const char *SDKExtension::GetExtensionName() +{ + return SMEXT_CONF_NAME; +} + +const char *SDKExtension::GetExtensionTag() +{ + return SMEXT_CONF_LOGTAG; +} + +const char *SDKExtension::GetExtensionURL() +{ + return SMEXT_CONF_URL; +} + +bool SDKExtension::SDK_OnLoad(char *error, size_t maxlength, bool late) +{ + return true; +} + +void SDKExtension::SDK_OnUnload() +{ +} + +void SDKExtension::SDK_OnPauseChange(bool paused) +{ +} + +void SDKExtension::SDK_OnAllLoaded() +{ +} + +#if defined SMEXT_CONF_METAMOD + +PluginId g_PLID = 0; /**< Metamod plugin ID */ +ISmmPlugin *g_PLAPI = NULL; /**< Metamod plugin API */ +SourceHook::ISourceHook *g_SHPtr = NULL; /**< SourceHook pointer */ +ISmmAPI *g_SMAPI = NULL; /**< SourceMM API pointer */ + +IVEngineServer *engine = NULL; /**< IVEngineServer pointer */ +IServerGameDLL *gamedll = NULL; /**< IServerGameDLL pointer */ + +/** Exposes the extension to Metamod */ +SMM_API void *PL_EXPOSURE(const char *name, int *code) +{ + if (name && !strcmp(name, METAMOD_PLAPI_NAME)) + { + if (code) + { + *code = IFACE_OK; + } + return static_cast<void *>(g_pExtensionIface); + } + + if (code) + { + *code = IFACE_FAILED; + } + + return NULL; +} + +bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + PLUGIN_SAVEVARS(); + + GET_V_IFACE_ANY(GetServerFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); + GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); + + m_SourceMMLoaded = true; + + return SDK_OnMetamodLoad(ismm, error, maxlen, late); +} + +bool SDKExtension::Unload(char *error, size_t maxlen) +{ + if (!m_WeAreUnloaded) + { + if (error) + { + snprintf(error, maxlen, "This extension must be unloaded by SourceMod."); + } + return false; + } + + return SDK_OnMetamodUnload(error, maxlen); +} + +bool SDKExtension::Pause(char *error, size_t maxlen) +{ + if (!m_WeGotPauseChange) + { + if (error) + { + snprintf(error, maxlen, "This extension must be paused by SourceMod."); + } + return false; + } + + m_WeGotPauseChange = false; + + return SDK_OnMetamodPauseChange(true, error, maxlen); +} + +bool SDKExtension::Unpause(char *error, size_t maxlen) +{ + if (!m_WeGotPauseChange) + { + if (error) + { + snprintf(error, maxlen, "This extension must be unpaused by SourceMod."); + } + return false; + } + + m_WeGotPauseChange = false; + + return SDK_OnMetamodPauseChange(false, error, maxlen); +} + +const char *SDKExtension::GetAuthor() +{ + return GetExtensionAuthor(); +} + +const char *SDKExtension::GetDate() +{ + return GetExtensionDateString(); +} + +const char *SDKExtension::GetDescription() +{ + return GetExtensionDescription(); +} + +const char *SDKExtension::GetLicense() +{ + return SMEXT_CONF_LICENSE; +} + +const char *SDKExtension::GetLogTag() +{ + return GetExtensionTag(); +} + +const char *SDKExtension::GetName() +{ + return GetExtensionName(); +} + +const char *SDKExtension::GetURL() +{ + return GetExtensionURL(); +} + +const char *SDKExtension::GetVersion() +{ + return GetExtensionVerString(); +} + +bool SDKExtension::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late) +{ + return true; +} + +bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t maxlength) +{ + return true; +} + +bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength) +{ + return true; +} + +#endif + +/* Overload a few things to prevent libstdc++ linking */ +#if defined __linux__ +extern "C" void __cxa_pure_virtual(void) +{ +} + +void *operator new(size_t size) +{ + return malloc(size); +} + +void *operator new[](size_t size) +{ + return malloc(size); +} + +void operator delete(void *ptr) +{ + free(ptr); +} + +void operator delete[](void * ptr) +{ + free(ptr); +} +#endif diff --git a/extensions/tf2/sdk/smsdk_ext.h b/extensions/tf2/sdk/smsdk_ext.h new file mode 100644 index 00000000..c137616b --- /dev/null +++ b/extensions/tf2/sdk/smsdk_ext.h @@ -0,0 +1,310 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Base Extension Code + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ +#define _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ + +/** + * @file smsdk_ext.h + * @brief Contains wrappers for making Extensions easier to write. + */ + +#include "smsdk_config.h" +#include <IExtensionSys.h> +#include <IHandleSys.h> +#include <sp_vm_api.h> +#include <sm_platform.h> +#include <ISourceMod.h> +#if defined SMEXT_ENABLE_FORWARDSYS +#include <IForwardSys.h> +#endif //SMEXT_ENABLE_FORWARDSYS +#if defined SMEXT_ENABLE_PLAYERHELPERS +#include <IPlayerHelpers.h> +#endif //SMEXT_ENABLE_PlAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +#include <IDBDriver.h> +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +#include <IGameConfigs.h> +#endif +#if defined SMEXT_ENABLE_MEMUTILS +#include <IMemoryUtils.h> +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS +#include <IGameHelpers.h> +#endif +#if defined SMEXT_ENABLE_TIMERSYS +#include <ITimerSystem.h> +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +#include <IADTFactory.h> +#endif +#if defined SMEXT_ENABLE_THREADER +#include <IThreader.h> +#endif +#if defined SMEXT_ENABLE_LIBSYS +#include <ILibrarySys.h> +#endif +#if defined SMEXT_ENABLE_USERMSGS +#include <IUserMessages.h> +#endif + +#if defined SMEXT_CONF_METAMOD +#include <ISmmPlugin.h> +#include <eiface.h> +#endif + +#if !defined METAMOD_PLAPI_VERSION + #include <metamod_wrappers.h> +#endif + +using namespace SourceMod; +using namespace SourcePawn; + +class SDKExtension : +#if defined SMEXT_CONF_METAMOD + public ISmmPlugin, +#endif + public IExtensionInterface +{ +public: + /** Constructor */ + SDKExtension(); +public: + /** + * @brief This is called after the initial loading sequence has been processed. + * + * @param error Error message buffer. + * @param maxlength Size of error message buffer. + * @param late Whether or not the module was loaded after map load. + * @return True to succeed loading, false to fail. + */ + virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late); + + /** + * @brief This is called right before the extension is unloaded. + */ + virtual void SDK_OnUnload(); + + /** + * @brief This is called once all known extensions have been loaded. + */ + virtual void SDK_OnAllLoaded(); + + /** + * @brief Called when the pause state is changed. + */ + virtual void SDK_OnPauseChange(bool paused); + +#if defined SMEXT_CONF_METAMOD + /** + * @brief Called when Metamod is attached, before the extension version is called. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @param late Whether or not Metamod considers this a late load. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late); + + /** + * @brief Called when Metamod is detaching, after the extension version is called. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength); + + /** + * @brief Called when Metamod's pause state is changing. + * NOTE: By default this is blocked unless sent from SourceMod. + * + * @param paused Pause state being set. + * @param error Error buffer. + * @param maxlength Maximum size of error buffer. + * @return True to succeed, false to fail. + */ + virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength); +#endif + +public: //IExtensionInterface + virtual bool OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late); + virtual void OnExtensionUnload(); + virtual void OnExtensionsAllLoaded(); + + /** Returns whether or not this is a Metamod-based extension */ + virtual bool IsMetamodExtension(); + + /** + * @brief Called when the pause state changes. + * + * @param state True if being paused, false if being unpaused. + */ + virtual void OnExtensionPauseChange(bool state); + + /** Returns name */ + virtual const char *GetExtensionName(); + /** Returns URL */ + virtual const char *GetExtensionURL(); + /** Returns log tag */ + virtual const char *GetExtensionTag(); + /** Returns author */ + virtual const char *GetExtensionAuthor(); + /** Returns version string */ + virtual const char *GetExtensionVerString(); + /** Returns description string */ + virtual const char *GetExtensionDescription(); + /** Returns date string */ + virtual const char *GetExtensionDateString(); +#if defined SMEXT_CONF_METAMOD +public: //ISmmPlugin + /** Called when the extension is attached to Metamod. */ + virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late); + /** Returns the author to MM */ + virtual const char *GetAuthor(); + /** Returns the name to MM */ + virtual const char *GetName(); + /** Returns the description to MM */ + virtual const char *GetDescription(); + /** Returns the URL to MM */ + virtual const char *GetURL(); + /** Returns the license to MM */ + virtual const char *GetLicense(); + /** Returns the version string to MM */ + virtual const char *GetVersion(); + /** Returns the date string to MM */ + virtual const char *GetDate(); + /** Returns the logtag to MM */ + virtual const char *GetLogTag(); + /** Called on unload */ + virtual bool Unload(char *error, size_t maxlength); + /** Called on pause */ + virtual bool Pause(char *error, size_t maxlength); + /** Called on unpause */ + virtual bool Unpause(char *error, size_t maxlength); +private: + bool m_SourceMMLoaded; + bool m_WeAreUnloaded; + bool m_WeGotPauseChange; +#endif +}; + +extern SDKExtension *g_pExtensionIface; +extern IExtension *myself; + +extern IShareSys *g_pShareSys; +extern IShareSys *sharesys; /* Note: Newer name */ +extern ISourceMod *g_pSM; +extern ISourceMod *smutils; /* Note: Newer name */ + +/* Optional interfaces are below */ +#if defined SMEXT_ENABLE_FORWARDSYS +extern IForwardManager *g_pForwards; +extern IForwardManager *forwards; /* Note: Newer name */ +#endif //SMEXT_ENABLE_FORWARDSYS +#if defined SMEXT_ENABLE_HANDLESYS +extern IHandleSys *g_pHandleSys; +extern IHandleSys *handlesys; /* Note: Newer name */ +#endif //SMEXT_ENABLE_HANDLESYS +#if defined SMEXT_ENABLE_PLAYERHELPERS +extern IPlayerManager *playerhelpers; +#endif //SMEXT_ENABLE_PLAYERHELPERS +#if defined SMEXT_ENABLE_DBMANAGER +extern IDBManager *dbi; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_GAMECONF +extern IGameConfigManager *gameconfs; +#endif //SMEXT_ENABLE_DBMANAGER +#if defined SMEXT_ENABLE_MEMUTILS +extern IMemoryUtils *memutils; +#endif +#if defined SMEXT_ENABLE_GAMEHELPERS +extern IGameHelpers *gamehelpers; +#endif +#if defined SMEXT_ENABLE_TIMERSYS +extern ITimerSystem *timersys; +#endif +#if defined SMEXT_ENABLE_ADTFACTORY +extern IADTFactory *adtfactory; +#endif +#if defined SMEXT_ENABLE_THREADER +extern IThreader *threader; +#endif +#if defined SMEXT_ENABLE_LIBSYS +extern ILibrarySys *libsys; +#endif +#if defined SMEXT_ENABLE_USERMSGS +extern IUserMessages *usermsgs; +#endif + +#if defined SMEXT_CONF_METAMOD +PLUGIN_GLOBALVARS(); +extern IVEngineServer *engine; +extern IServerGameDLL *gamedll; +#endif + +/** Creates a SourceMod interface macro pair */ +#define SM_MKIFACE(name) SMINTERFACE_##name##_NAME, SMINTERFACE_##name##_VERSION +/** Automates retrieving SourceMod interfaces */ +#define SM_GET_IFACE(prefix, addr) \ + if (!g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)) \ + { \ + if (error != NULL && maxlength) \ + { \ + size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \ + if (len >= maxlength) \ + { \ + error[maxlength - 1] = '\0'; \ + } \ + } \ + return false; \ + } +/** Automates retrieving SourceMod interfaces when needed outside of SDK_OnLoad() */ +#define SM_GET_LATE_IFACE(prefix, addr) \ + g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr) +/** Validates a SourceMod interface pointer */ +#define SM_CHECK_IFACE(prefix, addr) \ + if (!addr) \ + { \ + if (error != NULL && maxlength) \ + { \ + size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \ + if (len >= maxlength) \ + { \ + error[maxlength - 1] = '\0'; \ + } \ + } \ + return false; \ + } + +#endif // _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_ diff --git a/extensions/tf2/sm-tf2.games.txt b/extensions/tf2/sm-tf2.games.txt new file mode 100644 index 00000000..3adc88b2 --- /dev/null +++ b/extensions/tf2/sm-tf2.games.txt @@ -0,0 +1,21 @@ +"Games" +{ + "tf" + { + "Signatures" + { + "Burn" + { + "library" "server" + "windows" "\x56\x8B\xF1\x8B\x4E\x7C\x8B\x01\x8B\x90\xF8\x00\x00\x00\xFF\xD2\x84\xC0\x2A\x2A\x2A\x2A\x2A\x2A\x8B\x46\x7C" + "linux" "@_ZN15CTFPlayerShared4BurnEP9CTFPlayer" + } + "Invuln" + { + "library" "server" + "windows" "\x8A\x44\x24\x04\x83\xEC\x20\x56\x8B\xF1\x8B\x4E\x08\x57\x8D\x7E\x08\xC1\xE9\x05\x80\xE1\x01\x3A\xC8\x75\x32\x84\xC0" + "linux" "@_ZN15CTFPlayerShared15SetInvulnerableEbb" + } + } + } +} \ No newline at end of file diff --git a/extensions/tf2/svn_version.h b/extensions/tf2/svn_version.h new file mode 100644 index 00000000..8873263e --- /dev/null +++ b/extensions/tf2/svn_version.h @@ -0,0 +1,42 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SDKTools Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +/** + * Autogenerated by build scripts + */ + +#ifndef _INCLUDE_SDKTOOLS_VERSION_H_ +#define _INCLUDE_SDKTOOLS_VERSION_H_ + +#define SVN_FULL_VERSION "1.0.0.1336" +#define SVN_FILE_VERSION 1,0,0,1336 + +#endif //_INCLUDE_SDKTOOLS_VERSION_H_ diff --git a/extensions/tf2/svn_version.tpl b/extensions/tf2/svn_version.tpl new file mode 100644 index 00000000..ad458193 --- /dev/null +++ b/extensions/tf2/svn_version.tpl @@ -0,0 +1,42 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod SDKTools Extension + * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +/** + * Autogenerated by build scripts + */ + +#ifndef _INCLUDE_SDKTOOLS_VERSION_H_ +#define _INCLUDE_SDKTOOLS_VERSION_H_ + +#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$LOCAL_BUILD$" +#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$LOCAL_BUILD$ + +#endif //_INCLUDE_SDKTOOLS_VERSION_H_ diff --git a/extensions/tf2/tf2-test.sp b/extensions/tf2/tf2-test.sp new file mode 100644 index 00000000..b1239543 --- /dev/null +++ b/extensions/tf2/tf2-test.sp @@ -0,0 +1,55 @@ +#include <sourcemod> +#include "tf2.inc" + +public Plugin:myinfo = +{ + name = "TF2 Test", + author = "pRED*", + description = "Test of Tf2 functions", + version = "1.0", + url = "www.sourcemod.net" +} + +public OnPluginStart() +{ + RegConsoleCmd("sm_burnme", Command_Burn); + RegConsoleCmd("sm_invuln", Command_Invuln); +} + +public Action:Command_Burn(client, args) +{ + if (client == 0) + { + return Plugin_Continue; + } + + TF2_Burn(client); + + return Plugin_Continue; +} + +public Action:Command_Invuln(client, args) +{ + if (client == 0) + { + return Plugin_Continue; + } + + if (args < 2) + { + return Plugin_Continue; + } + + decl String:text[10]; + decl String:text2[10]; + GetCmdArg(1, text, sizeof(text)); + GetCmdArg(2, text2, sizeof(text2)); + + new bool:one = !!StringToInt(text); + new bool:two = !!StringToInt(text2); + + TF2_Invuln(client, one, two) + + return Plugin_Continue; +} + diff --git a/extensions/tf2/tf2.inc b/extensions/tf2/tf2.inc new file mode 100644 index 00000000..c2c4c39a --- /dev/null +++ b/extensions/tf2/tf2.inc @@ -0,0 +1,24 @@ +#if defined _tf2_included + #endinput +#endif +#define _tf2_included + + +native TF2_Invuln(client, bool:something, bool:anothersomething); + +native TF2_Burn(client); + +/** + * Do not edit below this line! + */ +public Extension:__ext_tf2 = +{ + name = "TF2 Tools", + file = "game.tf2.ext", + autoload = 0, +#if defined REQUIRE_EXTENSIONS + required = 1, +#else + required = 0, +#endif +}; diff --git a/extensions/tf2/version.rc b/extensions/tf2/version.rc new file mode 100644 index 00000000..37d14dad --- /dev/null +++ b/extensions/tf2/version.rc @@ -0,0 +1,104 @@ +// Microsoft Visual C++ generated resource script. +// +//#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +#include "svn_version.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION SVN_FILE_VERSION + PRODUCTVERSION SVN_FILE_VERSION + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Comments", "SourceMod CS:S Extension" + VALUE "FileDescription", "SourceMod CS:S Extension" + VALUE "FileVersion", SVN_FULL_VERSION + VALUE "InternalName", "SourceMod CS:S Extension" + VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "OriginalFilename", "game.cstrike.ext.dll" + VALUE "ProductName", "SourceMod CS:S Extension" + VALUE "ProductVersion", SVN_FULL_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/adminmenu.sp b/plugins/adminmenu.sp index 8a68b46c..d3985ed5 100644 --- a/plugins/adminmenu.sp +++ b/plugins/adminmenu.sp @@ -45,6 +45,8 @@ public Plugin:myinfo = url = "http://www.sourcemod.net/" }; +new g_maxPlayers; + /* Forwards */ new Handle:hOnAdminMenuReady = INVALID_HANDLE; new Handle:hOnAdminMenuCreated = INVALID_HANDLE; @@ -57,6 +59,8 @@ new TopMenuObject:obj_playercmds = INVALID_TOPMENUOBJECT; new TopMenuObject:obj_servercmds = INVALID_TOPMENUOBJECT; new TopMenuObject:obj_votingcmds = INVALID_TOPMENUOBJECT; +#include "adminmenu/dynamicmenu.sp" + public bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max) { CreateNative("GetAdminTopMenu", __GetAdminTopMenu); @@ -91,27 +95,36 @@ public OnConfigsExecuted() } } +public OnMapStart() +{ + g_maxPlayers = GetMaxClients(); + + ParseConfigs(); +} + public OnAllPluginsLoaded() { - hAdminMenu = CreateTopMenu(CategoryHandler); + hAdminMenu = CreateTopMenu(DefaultCategoryHandler); obj_playercmds = AddToTopMenu(hAdminMenu, "PlayerCommands", TopMenuObject_Category, - CategoryHandler, + DefaultCategoryHandler, INVALID_TOPMENUOBJECT); obj_servercmds = AddToTopMenu(hAdminMenu, "ServerCommands", TopMenuObject_Category, - CategoryHandler, + DefaultCategoryHandler, INVALID_TOPMENUOBJECT); obj_votingcmds = AddToTopMenu(hAdminMenu, "VotingCommands", TopMenuObject_Category, - CategoryHandler, + DefaultCategoryHandler, INVALID_TOPMENUOBJECT); + + BuildDynamicMenu(); Call_StartForward(hOnAdminMenuCreated); Call_PushCell(hAdminMenu); @@ -122,7 +135,7 @@ public OnAllPluginsLoaded() Call_Finish(); } -public CategoryHandler(Handle:topmenu, +public DefaultCategoryHandler(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, diff --git a/plugins/adminmenu/dynamicmenu.sp b/plugins/adminmenu/dynamicmenu.sp new file mode 100644 index 00000000..fcd8ec63 --- /dev/null +++ b/plugins/adminmenu/dynamicmenu.sp @@ -0,0 +1,520 @@ + +#define NAME_LENGTH 32 +#define CMD_LENGTH 255 + +#define ARRAY_STRING_LENGTH 32 + +new Handle:g_kvMenu; + +enum GroupCommands +{ + Handle:groupListName, + Handle:groupListCommand +}; + +new g_groupList[GroupCommands]; +new g_groupCount; + +new Handle:g_configParser = INVALID_HANDLE; + +enum Places +{ + Place_Category, + Place_Item, + Place_ReplaceNum +}; + +new String:g_command[MAXPLAYERS+1][CMD_LENGTH]; +new g_currentPlace[MAXPLAYERS+1][Places]; + +/** + * What to put in the 'info' menu field (for PlayerList and Player_Team menus only) + */ +enum PlayerMethod +{ + ClientId, /** Client id number ( 1 - Maxplayers) */ + UserId, /** Client userid */ + Name, /** Client Name */ + SteamId, /** Client Steamid */ + IpAddress, /** Client's Ip Address */ + UserId2 /** Userid (not prefixed with #) */ +}; + +BuildDynamicMenu() +{ + if (g_kvMenu != INVALID_HANDLE) + { + CloseHandle(g_kvMenu); + } + + g_kvMenu = CreateKeyValues("Commands"); + new String:file[256]; + BuildPath(Path_SM, file, 255, "configs/dynamicmenu/menu.ini"); + FileToKeyValues(g_kvMenu, file); + + new String:name[NAME_LENGTH]; + new String:buffer[NAME_LENGTH]; + + + if (!KvGotoFirstSubKey(g_kvMenu)) + { + return; + } + + decl String:admin[30]; + + new TopMenuObject:categoryId; + + new catId; + new id; + + do + { + KvGetSectionName(g_kvMenu, buffer, sizeof(buffer)); + + KvGetString(g_kvMenu, "admin", admin, sizeof(admin),"sm_admin"); + + if ((categoryId =FindTopMenuCategory(hAdminMenu, buffer)) == INVALID_TOPMENUOBJECT) + { + categoryId = AddToTopMenu(hAdminMenu, + buffer, + TopMenuObject_Category, + DynamicMenuCategoryHandler, + INVALID_TOPMENUOBJECT, + admin, + ADMFLAG_GENERIC, + name); + + } + + if (!KvGetSectionSymbol(g_kvMenu, catId)) + { + LogError("Key Id not found for section: %s", buffer); + break; + } + + if (!KvGotoFirstSubKey(g_kvMenu)) + { + return; + } + + do + { + KvGetSectionName(g_kvMenu, buffer, sizeof(buffer)); + + KvGetString(g_kvMenu, "admin", admin, sizeof(admin),""); + + if (admin[0] == '\0') + { + //No 'admin' keyvalue was found + //Use the first argument of the 'cmd' string instead + + decl String:temp[64]; + KvGetString(g_kvMenu, "cmd", temp, sizeof(temp),""); + + BreakString(temp, admin, sizeof(admin)); + } + + if (!KvGetSectionSymbol(g_kvMenu, id)) + { + LogError("Key Id not found for section: %s"); + break; + } + + decl String:keyId[64]; + + Format(keyId, sizeof(keyId), "%i %i", catId, id); + + AddToTopMenu(hAdminMenu, + buffer, + TopMenuObject_Item, + DynamicMenuItemHandler, + categoryId, + admin, + ADMFLAG_GENERIC, + keyId); + + } while (KvGotoNextKey(g_kvMenu)); + + KvGoBack(g_kvMenu); + + } while (KvGotoNextKey(g_kvMenu)); + + KvRewind(g_kvMenu); +} + +ParseConfigs() +{ + if (g_configParser == INVALID_HANDLE) + { + g_configParser = SMC_CreateParser(); + } + + SMC_SetReaders(g_configParser, NewSection, KeyValue, EndSection); + + if (g_groupList[groupListName] != INVALID_HANDLE) + { + CloseHandle(g_groupList[groupListName]); + } + + if (g_groupList[groupListCommand] != INVALID_HANDLE) + { + CloseHandle(g_groupList[groupListCommand]); + } + + g_groupList[groupListName] = CreateArray(ARRAY_STRING_LENGTH); + g_groupList[groupListCommand] = CreateArray(ARRAY_STRING_LENGTH); + + decl String:configPath[256]; + BuildPath(Path_SM, configPath, sizeof(configPath), "configs/dynamicmenu/adminmenu_grouping.txt"); + + if (!FileExists(configPath)) + { + LogError("Unable to locate admin menu groups file, no groups loaded."); + + return; + } + + new line; + new SMCError:err = SMC_ParseFile(g_configParser, configPath, line); + if (err != SMCError_Okay) + { + decl String:error[256]; + SMC_GetErrorString(err, error, sizeof(error)); + LogError("Could not parse file (line %d, file \"%s\"):", line, configPath); + LogError("Parser encountered error: %s", error); + } + + return; +} + +public SMCResult:NewSection(Handle:smc, const String:name[], bool:opt_quotes) +{ + +} + +public SMCResult:KeyValue(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes) +{ + PushArrayString(g_groupList[groupListName], key); + PushArrayString(g_groupList[groupListCommand], value); +} + +public SMCResult:EndSection(Handle:smc) +{ + g_groupCount = GetArraySize(g_groupList[groupListName]); +} + +public DynamicMenuCategoryHandler(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if ((action == TopMenuAction_DisplayTitle) || (action == TopMenuAction_DisplayOption)) + { + GetTopMenuObjName(topmenu, object_id, buffer, maxlength); + } +} + +public DynamicMenuItemHandler(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + GetTopMenuObjName(topmenu, object_id, buffer, maxlength); + } + else if (action == TopMenuAction_SelectOption) + { + new String:keyId[64]; + new String:catId[64]; + GetTopMenuInfoString(topmenu, object_id, keyId, sizeof(keyId)); + + new start = BreakString(keyId, catId, sizeof(catId)); + + new id = StringToInt(keyId[start]); + new category = StringToInt(catId); + + KvJumpToKeySymbol(g_kvMenu, category); + KvJumpToKeySymbol(g_kvMenu, id); + + KvGetString(g_kvMenu, "cmd", g_command[param], sizeof(g_command[]),""); + KvRewind(g_kvMenu); + + g_currentPlace[param][Place_Category] = category; + g_currentPlace[param][Place_Item] = id; + + ParamCheck(param); + } +} + +public ParamCheck(client) +{ + new String:buffer[6]; + new String:buffer2[6]; + + KvJumpToKeySymbol(g_kvMenu, g_currentPlace[client][Place_Category]); + KvJumpToKeySymbol(g_kvMenu, g_currentPlace[client][Place_Item]); + + new String:type[NAME_LENGTH]; + + if (g_currentPlace[client][Place_ReplaceNum] < 1) + { + g_currentPlace[client][Place_ReplaceNum] = 1; + } + + Format(buffer, 5, "#%i", g_currentPlace[client][Place_ReplaceNum]); + Format(buffer2, 5, "@%i", g_currentPlace[client][Place_ReplaceNum]); + + if (StrContains(g_command[client], buffer) != -1 || StrContains(g_command[client], buffer2) != -1) + { + //user has a parameter to fill. lets do it. + KvJumpToKey(g_kvMenu, buffer[1]); // Jump to current param + KvGetString(g_kvMenu, "type", type, sizeof(type),"list"); + + PrintToChatAll("Checking param %s - type %s", buffer[1], type); + + new Handle:itemMenu = CreateMenu(Menu_Selection); + + new String:title[NAME_LENGTH]; + + if (strncmp(type,"group",5)==0 && g_groupCount) + { + decl String:nameBuffer[ARRAY_STRING_LENGTH]; + decl String:commandBuffer[ARRAY_STRING_LENGTH]; + + for (new i = 0; i<g_groupCount; i++) + { + GetArrayString(g_groupList[groupListName], i, nameBuffer, sizeof(nameBuffer)); + GetArrayString(g_groupList[groupListCommand], i, commandBuffer, sizeof(commandBuffer)); + AddMenuItem(itemMenu, commandBuffer, nameBuffer); + } + } + + if (strncmp(type,"mapcycle",8) == 0) + { + decl String:path[200]; + KvGetString(g_kvMenu, "path", path, sizeof(path),"mapcycle.txt"); + + new Handle:file = OpenFile(path, "rt"); + new String:readData[128]; + + if(file != INVALID_HANDLE) + { + while(!IsEndOfFile(file) && ReadFileLine(file, readData, sizeof(readData))) + { + TrimString(readData); + + if (IsMapValid(readData)) + { + AddMenuItem(itemMenu, readData, readData); + } + } + } + } + else if (StrContains(type, "player") != -1) + { + PrintToChatAll("Building Player List"); + + new PlayerMethod:playermethod; + new String:method[NAME_LENGTH]; + + KvGetString(g_kvMenu, "method", method, sizeof(method),"name"); + + if (strncmp(method,"clientid",8)==0) + { + playermethod = ClientId; + } + else if (strncmp(method,"steamid",7)==0) + { + playermethod = SteamId; + } + else if (strncmp(method,"userid2",7)==0) + { + playermethod = UserId2; + } + else if (strncmp(method,"userid",6)==0) + { + playermethod = UserId; + } + else if (strncmp(method,"ip",2)==0) + { + playermethod = IpAddress; + } + else + { + playermethod = Name; + } + + + new String:nameBuffer[32]; + new String:infoBuffer[32]; + new String:temp[4]; + + //loop through players. Add name as text and name/userid/steamid as info + for (new i=1; i<=g_maxPlayers; i++) + { + if (IsClientInGame(i)) + { + GetClientName(i, nameBuffer, 31); + + switch (playermethod) + { + case UserId: + { + new userid = GetClientUserId(i); + Format(infoBuffer, sizeof(infoBuffer), "#%i", userid); + AddMenuItem(itemMenu, infoBuffer, nameBuffer); + } + case UserId2: + { + new userid = GetClientUserId(i); + Format(infoBuffer, sizeof(infoBuffer), "%i", userid); + AddMenuItem(itemMenu, infoBuffer, nameBuffer); + } + case SteamId: + { + GetClientAuthString(i, infoBuffer, sizeof(infoBuffer)); + AddMenuItem(itemMenu, infoBuffer, nameBuffer); + } + case IpAddress: + { + GetClientIP(i, infoBuffer, sizeof(infoBuffer)); + AddMenuItem(itemMenu, infoBuffer, nameBuffer); + } + case Name: + { + AddMenuItem(itemMenu, nameBuffer, nameBuffer); + } + default: //assume client id + { + Format(temp,3,"%i",i); + AddMenuItem(itemMenu, temp, nameBuffer); + } + } + } + } + } + else if (strncmp(type,"onoff",5) == 0) + { + AddMenuItem(itemMenu, "1", "On"); + AddMenuItem(itemMenu, "0", "Off"); + } + else + { + //list menu + + PrintToChatAll("Building List Menu"); + + new String:temp[6]; + new String:value[64]; + new String:text[64]; + new i=1; + new bool:more = true; + + new String:admin[NAME_LENGTH]; + + do + { + // load the i and i. options from kv and make a menu from them (i* = required admin level to view) + Format(temp,3,"%i",i); + KvGetString(g_kvMenu, temp, value, sizeof(value), ""); + + Format(temp,5,"%i.",i); + KvGetString(g_kvMenu, temp, text, sizeof(text), value); + + Format(temp,5,"%i*",i); + KvGetString(g_kvMenu, temp, admin, sizeof(admin),""); + + if (value[0]=='\0') + { + more = false; + } + else if (CheckCommandAccess(client, admin, 0)) + { + AddMenuItem(itemMenu, value, text); + } + + i++; + + } while (more); + + } + + KvGetString(g_kvMenu, "title", title, sizeof(title),"Choose an Option"); + SetMenuTitle(itemMenu, title); + + DisplayMenu(itemMenu, client, MENU_TIME_FOREVER); + } + else + { + //nothing else need to be done. Run teh command. + new String:execute[7]; + KvGetString(g_kvMenu, "execute", execute, sizeof(execute), "player"); + + DisplayTopMenu(hAdminMenu, client, TopMenuPosition_LastCategory); + + if (execute[0]=='p') // assume 'player' type execute option + { + FakeClientCommand(client, g_command[client]); + } + else // assume 'server' type execute option + { + InsertServerCommand(g_command[client]); + ServerExecute(); + } + + g_command[client][0] = '\0'; + g_currentPlace[client][Place_ReplaceNum] = 1; + } + + KvRewind(g_kvMenu); +} + +public Menu_Selection(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + + if (action == MenuAction_Select) + { + new String:info[NAME_LENGTH]; + + /* Get item info */ + new bool:found = GetMenuItem(menu, param2, info, sizeof(info)); + + if (!found) + { + return; + } + + new String:buffer[6]; + new String:infobuffer[NAME_LENGTH+2]; + Format(infobuffer, sizeof(infobuffer), "\"%s\"", info); + + Format(buffer, 5, "#%i", g_currentPlace[param1][Place_ReplaceNum]); + ReplaceString(g_command[param1], sizeof(g_command[]), buffer, infobuffer); + //replace #num with the selected option (quoted) + + Format(buffer, 5, "@%i", g_currentPlace[param1][Place_ReplaceNum]); + ReplaceString(g_command[param1], sizeof(g_command[]), buffer, info); + //replace @num with the selected option (unquoted) + + // Increment the parameter counter. + g_currentPlace[param1][Place_ReplaceNum]++; + + ParamCheck(param1); + } + + if (action == MenuAction_Cancel && param2 == MenuCancel_Exit) + { + //client exited we should go back to submenu i think + DisplayTopMenu(hAdminMenu, param1, TopMenuPosition_LastCategory); + } +} \ No newline at end of file diff --git a/plugins/include/regex.inc b/plugins/include/regex.inc new file mode 100644 index 00000000..f4efb22c --- /dev/null +++ b/plugins/include/regex.inc @@ -0,0 +1,141 @@ +#if defined _regex_included + #endinput +#endif +#define _regex_included + +/** + * @section Flags for compiling regex expressions. These come directly from the + * pcre library and can be used in MatchRegex and CompileRegex. + */ +#define PCRE_CASELESS 0x00000001 /* Ignore Case */ +#define PCRE_MULTILINE 0x00000002 /* Multilines (affects ^ and $ so that they match the start/end of a line rather than matching the start/end of the string). */ +#define PCRE_DOTALL 0x00000004 /* Single line (affects . so that it matches any character, even new line characters). */ +#define PCRE_EXTENDED 0x00000008 /* Pattern extension (ignore whitespace and # comments). */ +#define PCRE_UNGREEDY 0x00000200 /* Invert greediness of quantifiers */ +#define PCRE_UTF8 0x00000800 /* Use UTF-8 Chars */ +#define PCRE_NO_UTF8_CHECK 0x00002000 /* Do not check the pattern for UTF-8 validity (only relevant if PCRE_UTF8 is set) */ + + +/** + * Regex expression error codes. + */ +enum RegexError +{ + REGEX_ERROR_NONE = 0, /* No error */ + REGEX_ERROR_NOMATCH = -1, /* No match was found */ + REGEX_ERROR_NULL = -2, + REGEX_ERROR_BADOPTION = -3, + REGEX_ERROR_BADMAGIC = -4, + REGEX_ERROR_UNKNOWN_OPCODE = -5, + REGEX_ERROR_NOMEMORY = -6, + REGEX_ERROR_NOSUBSTRING = -7, + REGEX_ERROR_MATCHLIMIT = -8, + REGEX_ERROR_CALLOUT = -9, /* Never used by PCRE itself */ + REGEX_ERROR_BADUTF8 = -10, + REGEX_ERROR_BADUTF8_OFFSET = -11, + REGEX_ERROR_PARTIAL = -12, + REGEX_ERROR_BADPARTIAL = -13, + REGEX_ERROR_INTERNAL = -14, + REGEX_ERROR_BADCOUNT = -15, + REGEX_ERROR_DFA_UITEM = -16, + REGEX_ERROR_DFA_UCOND = -17, + REGEX_ERROR_DFA_UMLIMIT = -18, + REGEX_ERROR_DFA_WSSIZE = -19, + REGEX_ERROR_DFA_RECURSE = -20, + REGEX_ERROR_RECURSIONLIMIT = -21, + REGEX_ERROR_NULLWSLIMIT = -22, /* No longer actually used */ + REGEX_ERROR_BADNEWLINE = -23 +} + +/** + * Precompile a regular expression. Use this if you intend on using the + * same expression multiple times. Pass the regex handle returned here to + * MatchRegex to check for matches. + * + * @param pattern The regular expression pattern. + * @param flags General flags for the regular expression. + * @param error Error message encountered, if applicable. + * @param maxLen Maximum string length of the error buffer. + * @param errcode Regex type error code encountered, if applicable. + * @return Valid regex handle on success, INVALID_HANDLE on failure. + */ +native Handle:CompileRegex(const String:pattern[], flags = 0, String:error[]="", maxLen = 0, &RegexError:errcode = REGEX_ERROR_NONE); + +/** + * Matches a string against a pre-compiled regular expression pattern. + * + * @param str The string to check. + * @param regex Regex Handle from CompileRegex() + * @param ret Error code, if applicable. + * @return Number of substrings found or -1 on failure. + * + * @note Use the regex handle passed to this function to extract + * matches with GetRegexSubString(). + */ +native MatchRegex(Handle:regex, const String:str[], &RegexError:ret = REGEX_ERROR_NONE); + +/** + * Returns a matched substring from a regex handle. + * Substring ids start at 0 and end at substrings-1, where substrings is the number returned + * by MatchRegex + * + * @param regex The regex handle to extract data from. + * @param str_id The index of the expression to get - starts at 0, and ends at substrings - 1. + * @param buffer The buffer to set to the matching substring. + * @param maxLen The maximum string length of the buffer. + * @return True if a substring was found, False on fail/error + */ +native bool:GetRegexSubString(Handle:regex, str_id, String:buffer[], maxlen); + +/** + * Matches a string against a regular expression pattern. + * + * @note If you intend on using the same regular expression pattern + * multiple times, consider using CompileRegex and MatchRegex + * instead of making this function reparse the expression each time. + * + * @param str The string to check. + * @param pattern The regular expression pattern. + * @param flags General flags for the regular expression. + * @param error Error message, if applicable. + * @param maxLen Maximum length of the error buffer. + * @return Number of substrings found or -1 on failure. + */ +stock SimpleRegexMatch(const String:str[], const String:pattern[], flags = 0, String:error[]="", maxLen = 0) +{ + new Handle:regex = CompileRegex(pattern, flags, error, maxLen); + + if (regex == INVALID_HANDLE) + { + return -1; + } + + new substrings = MatchRegex(regex, str); + + CloseHandle(regex); + + return substrings; +} + +/** + * @endsection + */ + +/** + * Do not edit below this line! + */ +public Extension:__ext_regex = +{ + name = "Regex Extension", + file = "regex.ext", +#if defined AUTOLOAD_EXTENSIONS + autoload = 1, +#else + autoload = 0, +#endif +#if defined REQUIRE_EXTENSIONS + required = 1, +#else + required = 0, +#endif +}; diff --git a/plugins/mapmanager.sp b/plugins/mapmanager.sp new file mode 100644 index 00000000..dbf3ec39 --- /dev/null +++ b/plugins/mapmanager.sp @@ -0,0 +1,362 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Management Plugin + * Provides all map related functionality, including map changing, map voting, + * and nextmap. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#pragma semicolon 1 +#include <sourcemod> + +public Plugin:myinfo = +{ + name = "Map Manager", + author = "AlliedModders LLC", + description = "Map Management", + version = SOURCEMOD_VERSION, + url = "http://www.sourcemod.net/" +}; + +#include "mapmanagement/globals.sp" +#include "mapmanagement/commands.sp" +#include "mapmanagement/events.sp" +#include "mapmanagement/functions.sp" +#include "mapmanagement/menus.sp" +#include "mapmanagement/timers.sp" +#include "mapmanagement/votes.sp" + +public OnPluginStart() +{ + LoadTranslations("mapmanager.phrases"); + + // Prepare nextmap functionality. + g_VGUIMenu = GetUserMessageId("VGUIMenu"); + if (g_VGUIMenu == INVALID_MESSAGE_ID) + { + LogError("FATAL: Cannot find VGUIMenu user message id. MapManager crippled."); + g_NextMapEnabled = false; + } + HookUserMessage(g_VGUIMenu, UserMsg_VGUIMenu); + + // Create all of the arrays, sized for a 64 character string. + new arraySize = ByteCountToCells(64); + g_MapCycle = CreateArray(arraySize); + g_MapList = CreateArray(arraySize); + g_MapHistory = CreateArray(arraySize); + g_NextVoteMaps = CreateArray(arraySize); + g_SelectedMaps = CreateArray(arraySize); + g_NominatedMaps = CreateArray(arraySize); + + g_TeamScores = CreateArray(2); + + // Hook say + RegConsoleCmd("say", Command_Say); + RegConsoleCmd("say_team", Command_Say); + + // Register all commands. + RegAdminCmd("sm_map", Command_Map, ADMFLAG_CHANGEMAP, "sm_map <map> [r/e]"); + RegAdminCmd("sm_setnextmap", Command_SetNextmap, ADMFLAG_CHANGEMAP, "sm_setnextmap <map>"); + RegAdminCmd("sm_votemap", Command_Votemap, ADMFLAG_VOTE|ADMFLAG_CHANGEMAP, "sm_votemap <mapname> [mapname2] ... [mapname5] "); + RegAdminCmd("sm_maplist", Command_List, ADMFLAG_GENERIC, "sm_maplist"); + RegAdminCmd("sm_nominate", Command_Addmap, ADMFLAG_CHANGEMAP, "sm_nominate <mapname> - Nominates a map for RockTheVote and MapChooser. Overrides existing nominations."); + RegAdminCmd("sm_mapvote", Command_Mapvote, ADMFLAG_CHANGEMAP, "sm_mapvote - Forces the MapChooser vote to occur."); + + if (GetCommandFlags("nextmap") == INVALID_FCVAR_FLAGS) + { + RegServerCmd("nextmap", Command_Nextmap); + } + + // Register all convars + g_Cvar_Nextmap = CreateConVar("sm_nextmap", "", "Sets the Next Map", FCVAR_NOTIFY); + + g_Cvar_MapCount = CreateConVar("sm_mm_maps", "4", "Number of maps to be voted on at end of map or RTV. 2 to 6. (Def 4)", 0, true, 2.0, true, 6.0); + g_Cvar_Excludes = CreateConVar("sm_mm_exclude", "5", "Specifies how many past maps to exclude from end of map vote and RTV.", _, true, 0.0); + + g_Cvar_MapChooser = CreateConVar("sm_mm_mapchooser", "0", "Enables MapChooser (End of Map voting)", 0, true, 0.0, true, 1.0); + g_Cvar_RockTheVote = CreateConVar("sm_mm_rockthevote", "0", "Enables RockTheVote (Player initiated map votes)", 0, true, 0.0, true, 1.0); + g_Cvar_Randomize = CreateConVar("sm_mm_randomize", "0", "Enabled Randomizer (Randomly picks the next map)", 0, true, 0.0, true, 1.0); + g_Cvar_Nominate = CreateConVar("sm_mm_nominate", "1", "Enables nomination system.", 0, true, 0.0, true, 1.0); + + g_Cvar_VoteMap = CreateConVar("sm_mm_votemap", "0.60", "Percentage required for successful sm_votemap.", 0, true, 0.05, true, 1.0); + g_Cvar_RTVLimit = CreateConVar("sm_mm_rtvlimit", "0.60", "Required percentage of players needed to rockthevote", 0, true, 0.05, true, 1.0); + g_Cvar_MinPlayers = CreateConVar("sm_mm_minplayers", "0", "Number of players required before RTV will be enabled.", 0, true, 0.0, true, float(MAXPLAYERS)); + + g_Cvar_StartTime = CreateConVar("sm_mapvote_start", "3.0", "Specifies when to start the vote based on time remaining.", _, true, 1.0); + g_Cvar_StartRounds = CreateConVar("sm_mapvote_startround", "2.0", "Specifies when to start the vote based on rounds remaining.", _, true, 1.0); + g_Cvar_StartFrags = CreateConVar("sm_mapvote_startfrags", "5.0", "Specifies when to start the vote base on frags remaining.", _, true, 1.0); + g_Cvar_ExtendTimeMax = CreateConVar("sm_extendmap_maxtime", "90", "Specifies the maximum amount of time a map can be extended", _, true, 0.0); + g_Cvar_ExtendTimeStep = CreateConVar("sm_extendmap_timestep", "15", "Specifies how much many more minutes each extension makes", _, true, 5.0); + g_Cvar_ExtendRoundMax = CreateConVar("sm_extendmap_maxrounds", "30", "Specfies the maximum amount of rounds a map can be extended", _, true, 0.0); + g_Cvar_ExtendRoundStep = CreateConVar("sm_extendmap_roundstep", "5", "Specifies how many more rounds each extension makes", _, true, 5.0); + g_Cvar_ExtendFragMax = CreateConVar("sm_extendmap_maxfrags", "150", "Specfies the maximum frags allowed that a map can be extended.", _, true, 0.0); + g_Cvar_ExtendFragStep = CreateConVar("sm_extendmap_fragstep", "10", "Specifies how many more frags are allowed when map is extended.", _, true, 5.0); + g_Cvar_Mapfile = CreateConVar("sm_mapvote_file", "configs/maps.ini", "Map file to use. (Def sourcemod/configs/maps.ini)"); + g_Cvar_ExcludeMaps = CreateConVar("sm_mapvote_exclude", "5", "Specifies how many past maps to exclude from the vote.", _, true, 0.0); + g_Cvar_IncludeMaps = CreateConVar("sm_mapvote_include", "5", "Specifies how many maps to include in the vote.", _, true, 2.0, true, 6.0); + g_Cvar_NoVoteMode = CreateConVar("sm_mapvote_novote", "1", "Specifies whether or not MapChooser should pick a map if no votes are received.", _, true, 0.0, true, 1.0); + g_Cvar_Extend = CreateConVar("sm_mapvote_extend", "1", "Specifies whether or not MapChooser will allow the map to be extended.", _, true, 0.0, true, 1.0); + + // Find game convars + g_Cvar_Chattime = FindConVar("mp_chattime"); + g_Cvar_Winlimit = FindConVar("mp_winlimit"); + g_Cvar_Maxrounds = FindConVar("mp_maxrounds"); + g_Cvar_Fraglimit = FindConVar("mp_fraglimit"); + + if (GetCommandFlags("nextmap") == INVALID_FCVAR_FLAGS) + { + RegServerCmd("nextmap", Command_Nextmap); + } + + // Hook events + HookEvent("round_end", Event_RoundEnd); // We always require round_end + if (g_Cvar_Fraglimit != INVALID_HANDLE) + { + HookEvent("player_death", Event_PlayerDeath); + } + + // Set to the current map so OnMapStart() will know what to do + decl String:currentMap[64]; + GetCurrentMap(currentMap, 64); + SetNextmap(currentMap); + + // Create necessary menus for TopMenu + g_Menu_Map = CreateMenu(MenuHandler_Map); + SetMenuTitle(g_Menu_Map, "Please select a map"); + SetMenuExitBackButton(g_Menu_Map, true); + + g_Menu_Votemap = CreateMenu(MenuHandler_VoteMap, MenuAction_DrawItem); + SetMenuTitle(g_Menu_Votemap, "Please select a map"); + SetMenuExitBackButton(g_Menu_Votemap, true); + + // Bind TopMenu commands to adminmenu_maplist.ini, in cases it doesn't exist in maplists.cfg + decl String:mapListPath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini"); + SetMapListCompatBind("sm_map menu", mapListPath); + SetMapListCompatBind("sm_votemap menu", mapListPath); + + // Account for late loading + new Handle:topmenu; + if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) + { + OnAdminMenuReady(topmenu); + } + + AutoExecConfig(true, "mapmanager"); +} + +public OnAdminMenuReady(Handle:topmenu) +{ + /* Block us from being called twice */ + if (topmenu == hTopMenu) + { + return; + } + + /* Save the Handle */ + hTopMenu = topmenu; + + new TopMenuObject:server_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_SERVERCOMMANDS); + + if (server_commands != INVALID_TOPMENUOBJECT) + { + AddToTopMenu(hTopMenu, + "sm_map", + TopMenuObject_Item, + AdminMenu_Map, + server_commands, + "sm_map", + ADMFLAG_CHANGEMAP); + } + + new TopMenuObject:voting_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_VOTINGCOMMANDS); + + if (voting_commands != INVALID_TOPMENUOBJECT) + { + AddToTopMenu(hTopMenu, + "sm_votemap", + TopMenuObject_Item, + AdminMenu_VoteMap, + voting_commands, + "sm_votemap", + ADMFLAG_VOTE|ADMFLAG_CHANGEMAP); + } +} + +public OnLibraryRemoved(const String:name[]) +{ + if (strcmp(name, "adminmenu") == 0) + { + hTopMenu = INVALID_HANDLE; + } +} + +public OnConfigsExecuted() +{ + // Add map logic here + + // Get the current and last maps. + decl String:lastMap[64], String:currentMap[64]; + GetConVarString(g_Cvar_Nextmap, lastMap, 64); + GetCurrentMap(currentMap, 64); + + // Why am I doing this? If we switched to a new map, but it wasn't what we expected (Due to sm_map, sm_votemap, or + // some other plugin/command), we don't want to scramble the map cycle. Or for example, admin switches to a custom map + // not in mapcyclefile. So we keep it set to the last expected nextmap. - ferret + if (strcmp(lastMap, currentMap) == 0) + { + FindAndSetNextMap(); + } + + // Build map menus for sm_map, sm_votemap, and RTV. + BuildMapMenu(g_Menu_Map, list); + BuildMapMenu(g_Menu_VoteMap, list); + + // If the Randomize option is on, randomize! + if (GetConVarBool(g_Cvar_Randomize)) + { + CreateTimer(5.0, Timer_RandomizeNextmap); + } + + // If MapChooser is active, start it up! + if (GetConVarBool(g_Cvar_MapChooser)) + { + SetupTimeleftTimer(); + SetConVarString(g_Cvar_Nextmap, "Pending Vote"); + } + + // If RockTheVote is active, start it up! + if (GetConVarBool(g_Cvar_RockTheVote)) + { + BuildMapMenu(g_Menu_RTV, list); + CreateTimer(30.0, Timer_DelayRTV); + } +} + +// Reinitialize all our various globals +public OnMapStart() +{ + if (g_Nominate != INVALID_HANDLE) + { + ClearArray(g_Nominate); + } + + if (g_TeamScores != INVALID_HANDLE) + { + ClearArray(g_TeamScores); + } + + g_TotalRounds = 0; + + g_RTV_Voters = 0; + g_RTV_Votes = 0; + g_RTV_VotesNeeded = 0; + g_RTV_Started = false; + g_RTV_Ended = false; +} + +// Reset globals as necessary and kill timers +public OnMapEnd() +{ + g_IntermissionCalled = false; + g_HasVoteStarted = false; + + g_RTV_Allowed = false; + + if (g_VoteTimer != INVALID_HANDLE) + { + KillTimer(g_VoteTimer); + g_VoteTimer = INVALID_HANDLE; + } + + if (g_RetryTimer != INVALID_HANDLE) + { + KillTimer(g_RetryTimer); + g_RetryTimer = INVALID_HANDLE; + } +} + +public bool:OnClientConnect(client, String:rejectmsg[], maxlen) +{ + if (IsFakeClient(client)) + { + return true; + } + + // If RTV is active, deal with vote counting. + if (GetConVarBool(g_Cvar_RockTheVote)) + { + g_RTV_Voted[client] = false; + g_RTV_Voters++; + g_RTV_VotesNeeded = RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed)); + } + + // If Nominate is active, let the new client nominate + if (GetConVarBool(g_Cvar_Nominate)) + { + g_Nominated[client] = false; + } + + return true; +} + +public OnClientDisconnect(client) +{ + if (IsFakeClient(client)) + { + return; + } + + // If RTV is active, deal with vote counting. + if (GetConVarBool(g_Cvar_RockTheVote)) + { + if(g_RTV_Voted[client]) + { + g_RTV_Votes--; + } + + g_RTV_Voters--; + g_RTV_VotesNeeded = RoundToFloor(float(g_RTV_Voters) * GetConVarFloat(g_Cvar_RTVLimit)); + + // If this client caused us to fall below the RTV threshold and its allowed be started, start it. + if (g_RTV_Votes && g_RTV_Voters && g_RTV_Votes >= g_RTV_VotesNeeded && g_RTV_Allowed && !g_RTV_Started) + { + g_RTV_Started = true; + CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + } + } +} + +public OnMapTimeLeftChanged() +{ + if (GetConVarBool(g_Cvar_MapChooser)) + { + SetupTimeleftTimer(); + } +} \ No newline at end of file diff --git a/plugins/mapmanager/commands.sp b/plugins/mapmanager/commands.sp new file mode 100644 index 00000000..bba25765 --- /dev/null +++ b/plugins/mapmanager/commands.sp @@ -0,0 +1,398 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains callbacks for commands + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + + public Action:Command_Say(client, args) + { + decl String:text[192]; + if (GetCmdArgString(text, sizeof(text)) < 1) + { + return Plugin_Continue; + } + + new startidx; + if (text[strlen(text)-1] == '"') + { + text[strlen(text)-1] = '\0'; + startidx = 1; + } + + decl String:message[8]; + BreakString(text[startidx], message, sizeof(message)); + + if (strcmp(message, "nextmap", false) == 0) + { + decl String:map[32]; + GetConVarString(g_Cvar_Nextmap, map, sizeof(map)); + + PrintToChat(client, "%t", "Next Map", map); + } + else + { + if (GetConVarBool(g_Cvar_RockTheVote) && (strcmp(text[startidx], "rtv", false) == 0 || strcmp(text[startidx], "rockthevote", false) == 0)) + { + if (g_MapChanged) + { + ReplyToCommand(client, "[SM] %t", "Map change in progress"); + return Plugin_Continue; + } + + if (!g_RTV_Allowed) + { + PrintToChat(client, "[SM] %t", "RTV Not Allowed"); + return Plugin_Continue; + } + + if (g_RTV_Ended) + { + PrintToChat(client, "[SM] %t", "RTV Ended"); + return Plugin_Continue; + } + + if (g_RTV_Started) + { + PrintToChat(client, "[SM] %t", "RTV Started"); + return Plugin_Continue; + } + + if (GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers) && g_RTV_Votes == 0) // Should we keep checking g_Votes here? + { + PrintToChat(client, "[SM] %t", "Minimal Players Not Met"); + return Plugin_Continue; + } + + if (g_RTV_Voted[client]) + { + PrintToChat(client, "[SM] %t", "Already Voted"); + return Plugin_Continue; + } + + new String:name[64]; + GetClientName(client, name, sizeof(name)); + + g_RTV_Votes++; + g_RTV_Voted[client] = true; + + PrintToChatAll("[SM] %t", "RTV Requested", name, g_RTV_Votes, g_RTV_VotesNeeded); + + if (g_RTV_Votes >= g_RTV_VotesNeeded) + { + g_RTV_Started = true; + CreateTimer(2.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + } + } + else if (GetConVarBool(g_Cvar_Nominate) && strcmp(text[startidx], "nominate", false) == 0) + { + if (g_MapChanged) + { + ReplyToCommand(client, "[SM] %t", "Map change in progress"); + return Plugin_Continue; + } + + if (g_RTV_Started || g_HasVoteStarted) + { + ReplyToCommand(client, "[SM] %t", "Map vote in progress"); + return Plugin_Continue; + } + + if (g_Nominated[client]) + { + PrintToChat(client, "[SM] %t", "Already Nominated"); + return Plugin_Continue; + } + + if (GetArraySize(g_Nominate) >= GetConVarInt(g_Cvar_Maps)) + { + PrintToChat(client, "[SM] %t", "Max Nominations"); + return Plugin_Continue; + } + + DisplayMenu(g_Menu_Nominate, client, MENU_TIME_FOREVER); + } + } + + return Plugin_Continue; +} + +public Action:Command_Mapvote(client, args) +{ + InitiateVote(); + + return Plugin_Handled; +} + +public Action:Command_Nextmap(args) +{ + decl String:map[64]; + + GetConVarString(g_Cvar_Nextmap, map, sizeof(map)); + + ReplyToCommand(0, "%t", "Next Map", map); + + return Plugin_Handled; +} + +public Action:Command_List(client, args) +{ + PrintToConsole(client, "Map Cycle:"); + + decl String:currentMap[64]; + GetCurrentMap(currentMap, 64); + + decl String:mapName[64]; + for (new i = 0; i < GetArraySize(g_MapCycle); i++) + { + GetArrayString(g_MapCycle, i, mapName, sizeof(mapName)); + if (strcmp(mapName, currentMap) == 0) + { + PrintToConsole(client, "%s <========= Current map", mapName); + } + else if (strcmp(mapName, g_NextMap) == 0) + { + PrintToConsole(client, "%s <========= Next map", mapName); + } + else + { + PrintToConsole(client, "%s", mapName); + } + } + + return Plugin_Handled; +} + +public Action:Command_SetNextmap(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_setnextmap <map>"); + return Plugin_Handled; + } + + if (g_MapChanged) + { + ReplyToCommand(client, "[SM] %t", "Map change in progress"); + return Plugin_Handled; + } + + decl String:map[64]; + GetCmdArg(1, map, sizeof(map)); + + if (!IsMapValid(map)) + { + ReplyToCommand(client, "[SM] %t", "Map was not found", map); + return Plugin_Handled; + } + + ShowActivity(client, "%t", "Cvar changed", "sm_nextmap", map); + LogMessage("\"%L\" changed sm_nextmap to \"%s\"", client, map); + + SetNextMap(map); + + return Plugin_Handled; +} + + public Action:Command_Map(client, args) + { + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_map <map> [r/e]"); + return Plugin_Handled; + } + + if (g_MapChanged) + { + ReplyToCommand(client, "[SM] %t", "Map change in progress"); + return Plugin_Handled; + } + + decl String:map[64]; + GetCmdArg(1, map, sizeof(map)); + + if (!IsMapValid(map)) + { + ReplyToCommand(client, "[SM] %t", "Map was not found", map); + return Plugin_Handled; + } + + decl String:when[2]; + if (args > 1) + { + GetCmdArg(2, when, sizeof(when)); + + when[0] = CharToLower(when[0]); + if (when[0] != 'r' && when[0] != 'e') + { + when[0] = 'i'; + } + } + + SetMapChange(client, map, when); + + return Plugin_Handled; +} + +public Action:Command_Votemap(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_votemap [r/e] <mapname> [mapname2] ... [mapname5]"); + return Plugin_Handled; + } + + if (g_MapChanged) + { + ReplyToCommand(client, "[SM] %t", "Map change in progress"); + return Plugin_Handled; + } + + if (IsVoteInProgress()) + { + ReplyToCommand(client, "[SM] %t", "Vote in Progress"); + return Plugin_Handled; + } + + if (!TestVoteDelay(client)) + { + return Plugin_Handled; + } + + decl String:text[256]; + GetCmdArgString(text, sizeof(text)); + + decl String:maps[5][64]; + new mapCount; + new len, pos; + + // Find out if the user specified "when" + decl String:when[64]; + pos = BreakString(text[len], when, sizeof(when)); + if (!IsMapValid(when)) + { + when[0] = CharToLower(when[0]); + if (when[0] != 'r' && when[0] != 'e') + { + ReplyToCommand(client, "[SM] %t", "Map was not found", maps[mapCount]); + return Plugin_Handled; + } + } + else + { + strcpy(maps[mapCount], sizeof(maps[]), when); + mapCount++; + when[0] = 'i'; + } + + len += pos; + + while (pos != -1 && mapCount < 5) + { + pos = BreakString(text[len], maps[mapCount], sizeof(maps[])); + + if (!IsMapValid(maps[mapCount])) + { + ReplyToCommand(client, "[SM] %t", "Map was not found", maps[mapCount]); + return Plugin_Handled; + } + + mapCount++; + + len += pos; + } + + g_VoteMapInUse = client; + g_Client_Data[client][0] = when[0]; + + DisplayVoteMapMenu(client, mapCount, maps); + + return Plugin_Handled; +} + +public Action:Command_Nominate(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_nominate <mapname>"); + return Plugin_Handled; + } + + if (!GetConVarBool(g_Cvar_Nominate)) + { + ReplyToCommand(client, "[SM] Nominations are currently disabled."); + return Plugin_Handled; + } + + decl String:mapname[64]; + GetCmdArg(1, mapname, sizeof(mapname)); + + if (FindStringInArray(g_MapList, mapname) == -1) + { + ReplyToCommand(client, "%t", "Map was not found", mapname); + return Plugin_Handled; + } + + if (GetArraySize(g_Nominated) > 0) + { + if (FindStringInArray(g_Nominated, mapname) != -1) + { + ReplyToCommand(client, "%t", "Map Already In Vote", mapname); + return Plugin_Handled; + } + + ShiftArrayUp(g_Nominated, 0); + SetArrayString(g_Nominated, 0, mapname); + + while (GetArraySize(g_Nominated) > GetConVarInt(g_Cvar_Maps)) + { + RemoveFromArray(g_Nominated, GetConVarInt(g_Cvar_Maps)); + } + } + else + { + PushArrayString(g_Nominated, mapname); + } + + decl String:item[64]; + for (new i = 0; i < GetMenuItemCount(g_Menu_Nominate); i++) + { + GetMenuItem(g_Menu_Nominate, i, item, sizeof(item)); + if (strcmp(item, mapname) == 0) + { + RemoveMenuItem(g_Menu_Nominate, i); + break; + } + } + + ReplyToCommand(client, "%t", "Map Inserted", mapname); + LogAction(client, -1, "\"%L\" inserted map \"%s\".", client, mapname); + + return Plugin_Handled; +} \ No newline at end of file diff --git a/plugins/mapmanager/events.sp b/plugins/mapmanager/events.sp new file mode 100644 index 00000000..be57776b --- /dev/null +++ b/plugins/mapmanager/events.sp @@ -0,0 +1,166 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains event callbacks + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +public Action:UserMsg_VGUIMenu(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) +{ + if (g_IntermissionCalled) + { + return Plugin_Handled; + } + + decl String:type[15]; + + /* If we don't get a valid string, bail out. */ + if (BfReadString(bf, type, sizeof(type)) < 0) + { + return Plugin_Handled; + } + + if (BfReadByte(bf) == 1 && BfReadByte(bf) == 0 && (strcmp(type, "scores", false) == 0)) + { + g_IntermissionCalled = true; + + decl String:map[32]; + new Float:fChatTime = GetConVarFloat(g_Cvar_Chattime); + + if (fChatTime < 2.0) + { + SetConVarFloat(g_Cvar_Chattime, 2.0); + } + + LogMessage("[MapManager] Changing map to '%s' due to map ending.", g_NextMap); + + g_MapChanged = true; + CreateTimer(fChatTime - 1.0, Timer_ChangeMap); + } + + return Plugin_Handled; +} + +public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) +{ + if (g_MapChanged) + { + return; + } + + if (g_MapChangeSet && g_MapChangeWhen == 'r') + { + LogMessage("[MapManager] Changing map to '%s' due to round ending.", g_NextMap); + + g_MapChanged = true; + CreateTimer(1.0, Timer_ChangeMap); + + return; + } + + if (g_HasVoteStarted) + { + return; + } + + new winner = GetEventInt(event, "winner"); + + if (winner == 0 || winner == 1) + { + return; + } + + g_TotalRounds++; + + new team[2], teamPos = -1; + for (new i; i < GetArraySize(g_TeamScores); i++) + { + GetArrayArray(g_TeamScores, i, team); + if (team[0] == winner) + { + teamPos = i; + break; + } + } + + if (teamPos == -1) + { + team[0] = winner; + team[1] = 1; + PushArrayArray(g_TeamScores, team); + } + else + { + team[1]++; + SetArrayArray(g_TeamScores, teamPos, team); + } + + if (g_Cvar_Winlimit != INVALID_HANDLE) + { + new winlimit = GetConVarInt(g_Cvar_Winlimit); + if (winlimit) + { + if (team[1] >= (winlimit - GetConVarInt(g_Cvar_StartRounds))) + { + InitiateVote(); + } + } + } + + if (g_Cvar_Maxrounds != INVALID_HANDLE) + { + new maxrounds = GetConVarInt(g_Cvar_Maxrounds); + if (maxrounds) + { + if (g_TotalRounds >= (maxrounds - GetConVarInt(g_Cvar_StartRounds))) + { + InitiateVote(); + } + } + } +} + +public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) +{ + if (g_MapChanged || g_HasVoteStarted || g_Cvar_Fraglimit == INVALID_HANDLE) + { + return; + } + + if (!GetConVarInt(g_Cvar_Fraglimit)) + { + return; + } + + new fragger = GetClientOfUserId(GetEventInt(event, "attacker")); + if (fragger && GetClientFrags(fragger) >= (GetConVarInt(g_Cvar_Fraglimit) - GetConVarInt(g_Cvar_StartFrags))) + { + InitiateVote(); + } +} \ No newline at end of file diff --git a/plugins/mapmanager/functions.sp b/plugins/mapmanager/functions.sp new file mode 100644 index 00000000..963dcafc --- /dev/null +++ b/plugins/mapmanager/functions.sp @@ -0,0 +1,335 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Management Plugin + * Contains misc functions. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +SetNextMap(String:map[]) +{ + strcopy(g_NextMap, sizeof(g_NextMap), map); + SetConVarString(g_Cvar_Nextmap, map); +} + +SetMapChange(client, map, when, Float:time = 3.0) +{ + g_MapChangeSet = true; + g_MapChangeWhen = when[0]; + SetNextMap(map); + + if (when[0] == 'r') + { + ShowActivity2(client, "[SM] ", "%t", "Changing map end of round", map); + LogAction(client, -1, "\"%L\" set end of round map change to \"%s\"", client, map); + } + else if (when[0] == 'e') + { + ShowActivity2(client, "[SM] ", "%t", "Set nextmap", map); + LogAction(client, -1, "\"%L\" set the next map to \"%s\"", client, map); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Change map", map); + LogAction(client, -1, "\"%L\" changed map to \"%s\"", client, map); + + g_MapChanged = true; + CreateTimer(3.0, Timer_ChangeMap); + } +} + +FindAndSetNextMap() +{ + if (ReadMapList(g_MapList, + g_MapListSerial, + "mapcyclefile", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT) + == INVALID_HANDLE) + { + if (g_MapListSerial == -1) + { + LogError("FATAL: Cannot load map cycle. Nextmap not loaded."); + SetFailState("Mapcycle Not Found"); + } + } + + new mapCount = GetArraySize(g_MapList); + decl String:mapName[32]; + + if (g_MapPos == -1) + { + decl String:current[64]; + GetCurrentMap(current, 64); + + for (new i = 0; i < mapCount; i++) + { + GetArrayString(g_MapList, i, mapName, sizeof(mapName)); + if (strcmp(current, mapName, false) == 0) + { + g_MapPos = i; + break; + } + } + + if (g_MapPos == -1) + g_MapPos = 0; + } + + g_MapPos++; + if (g_MapPos >= mapCount) + g_MapPos = 0; + + GetArrayString(g_MapList, g_MapPos, mapName, sizeof(mapName)); + SetConVarString(g_Cvar_Nextmap, mapName); +} + +Float:GetVotePercent(votes, totalVotes) +{ + return FloatDiv(float(votes),float(totalVotes)); +} + +bool:TestVoteDelay(client) +{ + new delay = CheckVoteDelay(); + + if (delay > 0) + { + if (delay > 60) + { + ReplyToCommand(client, "[SM] %t", "Vote Delay Minutes", delay % 60); + } + else + { + ReplyToCommand(client, "[SM] %t", "Vote Delay Seconds", delay); + } + + return false; + } + + return true; +} + +BuildMapMenu() +{ + if (g_MapMenu != INVALID_HANDLE) + { + CloseHandle(g_MapMenu); + g_MapMenu = INVALID_HANDLE; + } + + g_MapMenu = CreateMenu(Handler_MapSelectMenu); + SetMenuTitle(g_MapMenu, "%t", "Nominate Title"); + + decl String:map[64]; + for (new i = 0; i < GetArraySize(g_MapList); i++) + { + GetArrayString(g_MapList, i, map, sizeof(map)); + AddMenuItem(g_MapMenu, map, map); + } + + SetMenuExitButton(g_MapMenu, false); +} + +SetupTimeleftTimer() +{ + new time; + if (GetMapTimeLeft(time) && time > 0) + { + new startTime = GetConVarInt(g_Cvar_StartTime) * 60; + if (time - startTime < 0) + { + InitiateVote(); + } + else + { + if (g_VoteTimer != INVALID_HANDLE) + { + KillTimer(g_VoteTimer); + g_VoteTimer = INVALID_HANDLE; + } + + g_VoteTimer = CreateTimer(float(time - startTime), Timer_StartMapVote); + } + } +} + +InitiateVote() +{ + if (g_HasVoteStarted || g_RetryTimer != INVALID_HANDLE) + { + return; + } + + if (IsVoteInProgress()) + { + // Can't start a vote, try again in 5 seconds. + g_RetryTimer = CreateTimer(5.0, Timer_StartMapVote); + return; + } + + g_HasVoteStarted = true; + g_VoteMenu = CreateMenu(Handler_MapVoteMenu, MenuAction:MENU_ACTIONS_ALL); + SetMenuTitle(g_VoteMenu, "Vote Nextmap"); + + decl String:map[32]; + for (new i = 0; i < GetArraySize(g_NextMapList); i++) + { + GetArrayString(g_NextMapList, i, map, sizeof(map)); + AddMenuItem(g_VoteMenu, map, map); + } + + if (GetConVarBool(g_Cvar_Extend)) + { + new bool:allowExtend, time; + if (GetMapTimeLimit(time) && time > 0 && time < GetConVarInt(g_Cvar_ExtendTimeMax)) + { + allowExtend = true; + } + + if (g_Cvar_Winlimit != INVALID_HANDLE && GetConVarInt(g_Cvar_Winlimit) < GetConVarInt(g_Cvar_ExtendRoundMax)) + { + allowExtend = true; + } + + if (g_Cvar_Maxrounds != INVALID_HANDLE && GetConVarInt(g_Cvar_Maxrounds) < GetConVarInt(g_Cvar_ExtendRoundMax)) + { + allowExtend = true; + } + + if (g_Cvar_Fraglimit != INVALID_HANDLE && GetConVarInt(g_Cvar_Fraglimit) < GetConVarInt(g_Cvar_ExtendFragMax)) + { + allowExtend = true; + } + + if (allowExtend) + { + AddMenuItem(g_VoteMenu, VOTE_EXTEND, "Extend Map"); + } + } + + SetMenuExitButton(g_VoteMenu, false); + VoteMenuToAll(g_VoteMenu, 20); + + LogMessage("Voting for next map has started."); + PrintToChatAll("[SM] %t", "Nextmap Voting Started"); +} + +SetNextMap(const String:map[]) +{ + SetConVarString(g_Cvar_Nextmap, map); + PushArrayString(g_OldMapList, map); + + if (GetArraySize(g_OldMapList) > GetConVarInt(g_Cvar_ExcludeMaps)) + { + RemoveFromArray(g_OldMapList, 0); + } + + PrintToChatAll("[SM] %t", "Nextmap Voting Finished", map); + LogMessage("Voting for next map has finished. Nextmap: %s.", map); +} + +CreateNextVote() +{ + if(g_NextMapList != INVALID_HANDLE) + { + ClearArray(g_NextMapList); + } + + decl String:map[32]; + new index, Handle:tempMaps = CloneArray(g_MapList); + + GetCurrentMap(map, sizeof(map)); + index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } + + if (GetConVarInt(g_Cvar_ExcludeMaps) && GetArraySize(tempMaps) > GetConVarInt(g_Cvar_ExcludeMaps)) + { + for (new i = 0; i < GetArraySize(g_OldMapList); i++) + { + GetArrayString(g_OldMapList, i, map, sizeof(map)); + index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } + } + } + + new limit = (GetConVarInt(g_Cvar_IncludeMaps) < GetArraySize(tempMaps) ? GetConVarInt(g_Cvar_IncludeMaps) : GetArraySize(tempMaps)); + for (new i = 0; i < limit; i++) + { + new b = GetRandomInt(0, GetArraySize(tempMaps) - 1); + GetArrayString(tempMaps, b, map, sizeof(map)); + PushArrayString(g_NextMapList, map); + RemoveFromArray(tempMaps, b); + } + + CloseHandle(tempMaps); +} + +/* + +new Handle:g_map_array = INVALID_HANDLE; +new g_map_serial = -1; + +LoadMapList(Handle:menu) +{ + new Handle:map_array; + + if ((map_array = ReadMapList(g_map_array, + g_map_serial, + "sm_map menu", + MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_NO_DEFAULT|MAPLIST_FLAG_MAPSFOLDER)) + != INVALID_HANDLE) + { + g_map_array = map_array; + } + + if (g_map_array == INVALID_HANDLE) + { + return 0; + } + + RemoveAllMenuItems(menu); + + decl String:map_name[64]; + new map_count = GetArraySize(g_map_array); + + for (new i = 0; i < map_count; i++) + { + GetArrayString(g_map_array, i, map_name, sizeof(map_name)); + AddMenuItem(menu, map_name, map_name); + } + + return map_count; +} + +*/ \ No newline at end of file diff --git a/plugins/mapmanager/functions_menu.sp b/plugins/mapmanager/functions_menu.sp new file mode 100644 index 00000000..51f78f57 --- /dev/null +++ b/plugins/mapmanager/functions_menu.sp @@ -0,0 +1,115 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Management Plugin + * Contains misc functions. + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +DisplayWhenMenu(client, bool:vote = false) +{ + new Handle: + + if (!vote) + { + menu = CreateMenu(MenuHandler_ChangeMap); + } + else + { + menu = CreateMenu(MenuHandler_VoteWhen); + } + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Map Change When", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddMenuItem(menu, "i", "Immediately"); + AddMenuItem(menu, "r", "Round End"); + AddMenuItem(menu, "e", "Map End"); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayConfirmVoteMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Confirm); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Confirm Vote", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddMenuItem(menu, "Confirm", "Start the Vote"); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +DisplayAcceptVoteMenu(String:map[]) +{ + new Handle:menu = CreateMenu(MenuHandler_Accept); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Accept Vote", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddMenuItem(menu, map, "Accept Vote"); + + DisplayMenu(menu, g_VoteMapInUse, MENU_TIME_FOREVER); +} + +DisplayVoteMapMenu(client, mapCount, String:maps[5][]) +{ + LogAction(client, -1, "\"%L\" initiated a map vote.", client); + ShowActivity2(client, "[SM] ", "%t", "Initiated Vote Map"); + + new Handle:menu = CreateMenu(Handler_VoteCallback, MenuAction:MENU_ACTIONS_ALL); + + if (mapCount == 1) + { + //strcopy(g_voteInfo[VOTE_NAME], sizeof(g_voteInfo[]), maps[0]); + + SetMenuTitle(menu, "Change Map To"); + AddMenuItem(menu, maps[0], "Yes"); + AddMenuItem(menu, VOTE_NO, "No"); + } + else + { + //g_voteInfo[VOTE_NAME][0] = '\0'; + + SetMenuTitle(menu, "Map Vote"); + for (new i = 0; i < mapCount; i++) + { + AddMenuItem(menu, maps[i], maps[i]); + } + } + + SetMenuExitButton(menu, false); + VoteMenuToAll(menu, 20); +} diff --git a/plugins/mapmanager/globals.sp b/plugins/mapmanager/globals.sp new file mode 100644 index 00000000..171c3a16 --- /dev/null +++ b/plugins/mapmanager/globals.sp @@ -0,0 +1,104 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains globals and defines + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +#define VOTE_EXTEND "##extend##" +#define VOTE_YES "###yes###" +#define VOTE_NO "###no###" + +new Handle:hTopMenu = INVALID_HANDLE; // TopMenu + +new Handle:g_MapCycle = INVALID_HANDLE; // mapcyclefile maps +new Handle:g_MapList = INVALID_HANDLE; // maplist.txt maps +new Handle:g_MapHistory = INVALID_HANDLE; // History of maps played +new Handle:g_NextVoteMaps = INVALID_HANDLE; // Array of maps for next RTV or MC vote +new Handle:g_NominatedMaps = INVALID_HANDLE; // Array of maps that have been nominated + +new Handle:g_Menu_Map = INVALID_HANDLE; // Menu of maps used by sm_map in admin menu +new Handle:g_Menu_Votemap = INVALID_HANDLE; // Menu of maps used by sm_votemap in admin menu +new Handle:g_Menu_Nominate = INVALID_HANDLE; // Menu of maps used by Nomination system + +new Handle:g_SelectedMaps; // List of maps chosen so far by a user in sm_votemap admin menu +new g_VoteMapInUse; // Client index of admin using sm_votemap +new String:g_Client_Data[MAXCLIENTS+1][64]; // Used to hold bits of client data during sm_votemap + +new bool:g_MapChangeSet; // True if a command or vote has set the map +new bool:g_MapChanged; // True if a map change has been issued +new g_MapChangeWhen; // Either 'i' for immediate, 'r' for round end, or 'e' for end of map. + +new UserMsg:g_VGUIMenu; // VGUI usermsg id for nextmap +new bool:g_NextMapEnabled = true // If set to false, all features requiring nextmap are disabled. +new bool:g_IntermissionCalled; // Has the end of map intermission begun? +new String:g_NextMap[64]; // All important! This is the next map! +new g_MapPos = -1; // Position in mapcycle + +new bool:g_RTV_Voted[MAXPLAYERS+1] = {false, ...}; // Whether or not a player has voted for RTV +new bool:g_RTV_Allowed = false; // True if RTV is available to players. Used to delay rtv votes. +new bool:g_RTV_Started = false; // Indicates that the actual map vote has started +new bool:g_RTV_Ended = false; // Indicates that the actual map vote has concluded +new g_RTV_Voters = 0; // Total voters connected. Doesn't include fake clients. +new g_RTV_Votes = 0; // Total number of "say rtv" votes +new g_RTV_VotesNeeded = 0; // Necessary votes before map vote begins. (voters * percent_needed) + +new bool:g_Nominated[MAXPLAYERS+1] = {false, ...}; // Whether or not a player has nominated a map + +new Handle:g_TeamScores = INVALID_HANDLE; // Array of team scores +new g_TotalRounds; // Total rounds played this map +new bool:g_HasVoteStarted; // Whether or not MapChooser has begun + +// ConVar handles +new Handle:g_Cvar_NextMap = INVALID_HANDLE; +new Handle:g_Cvar_VoteMap = INVALID_HANDLE; +new Handle:g_Cvar_Excludes = INVALID_HANDLE; +new Handle:g_Cvar_StartTime = INVALID_HANDLE; +new Handle:g_Cvar_StartRounds = INVALID_HANDLE; +new Handle:g_Cvar_StartFrags = INVALID_HANDLE; +new Handle:g_Cvar_ExtendTimeMax = INVALID_HANDLE; +new Handle:g_Cvar_ExtendTimeStep = INVALID_HANDLE; +new Handle:g_Cvar_ExtendRoundMax = INVALID_HANDLE; +new Handle:g_Cvar_ExtendRoundStep = INVALID_HANDLE; +new Handle:g_Cvar_ExtendFragMax = INVALID_HANDLE; +new Handle:g_Cvar_ExtendFragStep = INVALID_HANDLE; +new Handle:g_Cvar_Mapfile = INVALID_HANDLE; +new Handle:g_Cvar_ExcludeMaps = INVALID_HANDLE; +new Handle:g_Cvar_IncludeMaps = INVALID_HANDLE; +new Handle:g_Cvar_NoVoteMode = INVALID_HANDLE; +new Handle:g_Cvar_Extend = INVALID_HANDLE; + +new Handle:g_VoteTimer = INVALID_HANDLE; +new Handle:g_RetryTimer = INVALID_HANDLE; + +// VALVe ConVars +new Handle:g_Cvar_Chattime = INVALID_HANDLE; +new Handle:g_Cvar_Winlimit = INVALID_HANDLE; +new Handle:g_Cvar_Maxrounds = INVALID_HANDLE; +new Handle:g_Cvar_Fraglimit = INVALID_HANDLE; diff --git a/plugins/mapmanager/menus.sp b/plugins/mapmanager/menus.sp new file mode 100644 index 00000000..c47e76be --- /dev/null +++ b/plugins/mapmanager/menus.sp @@ -0,0 +1,263 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains menu callbacks + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +// Following callbacks are for sm_map +public AdminMenu_Map(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Choose Map", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayMenu(g_Menu_Map, param, MENU_TIME_FOREVER); + } +} + +public MenuHandler_Map(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + GetMenuItem(menu, param2, g_Client_Data[param1], sizeof(g_Client_Data[])); + DisplayWhenMenu(param1); + } +} + +public MenuHandler_ChangeMap(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:when[2]; + GetMenuItem(menu, param2, when, sizeof(when)); + SetMapChange(client, g_Client_Data[param1], when[0]) + } +} + +// Following callbacks are for sm_votemap +public AdminMenu_VoteMap(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Map vote", param); + } + else if (action == TopMenuAction_SelectOption) + { + g_VoteMapInUse = param; + ClearArray(g_SelectedMaps); + DisplayMenu(g_Menu_Votemap, param, MENU_TIME_FOREVER); + } + else if (action == TopMenuAction_DrawOption) + { + /* disable this option if a vote is already running, theres no maps listed or someone else has already accessed this menu */ + buffer[0] = (!IsNewVoteAllowed() || g_VoteMapInUse) ? ITEMDRAW_IGNORE : ITEMDRAW_DEFAULT; + } +} + +public MenuHandler_VoteMap(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayWhenMenu(param1, true); + } + else // no action was selected. + { + /* Re-enable the menu option */ + g_VoteMapInUse = 0; + } + } + else if (action == MenuAction_DrawItem) + { + decl String:info[32]; + + GetMenuItem(menu, param2, info, sizeof(info)); + + if (FindStringInArray(g_SelectedMaps, info) != -1) + { + return ITEMDRAW_IGNORE; + } + else + { + return ITEMDRAW_DEFAULT; + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + + GetMenuItem(menu, param2, info, sizeof(info)); + + PushArrayString(g_SelectedMaps, info); + + /* Redisplay the list */ + if (GetArraySize(g_SelectedMaps) < 5) + { + DisplayMenu(g_MapList, param1, MENU_TIME_FOREVER); + } + else + { + DisplayWhenMenu(param1, true); + } + } + + return 0; +} + +public MenuHandler_VoteWhen(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + g_Menu_Info[param1][0] = 'i'; + DisplayConfirmVoteMenu(param1); + } + else + { + g_VoteMapInUse = 0; + } + } + else if (action == MenuAction_Select) + { + GetMenuItem(menu, param2, g_Menu_Info[param1], sizeof(g_Menu_Info[])); + + DisplayConfirmVoteMenu(param1); + } +} + +public MenuHandler_Confirm(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + g_VoteMapInUse = 0; + + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:maps[5][64]; + new selectedmaps = GetArraySize(g_SelectedMaps); + + for (new i = 0; i < selectedmaps; i++) + { + GetArrayString(g_SelectedMaps, i, maps[i], sizeof(maps[])); + } + + DisplayVoteMapMenu(param1, selectedmaps, maps); + } +} + +public MenuHandler_Accept(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + g_VoteMapInUse = 0; + } + else if (action == MenuAction_Select) + { + decl String:map[64] + GetMenuItem(menu, 1, map, sizeof(map)); + + SetMapChange(param1, map, g_Client_Data[param1][0]) + } +} + +public Handler_MapSelectMenu(Handle:menu, MenuAction:action, param1, param2) +{ + switch (action) + { + case MenuAction_Select: + { + if (GetArraySize(g_RTVMapList) >= GetConVarInt(g_Cvar_Maps)) + { + PrintToChat(param1, "[SM] %t", "Max Nominations"); + return; + } + + decl String:map[64], String:name[64]; + GetMenuItem(menu, param2, map, sizeof(map)); + + if (FindStringInArray(g_RTVMapList, map) != -1) + { + PrintToChat(param1, "[SM] %t", "Map Already Nominated"); + return; + } + + GetClientName(param1, name, 64); + + PushArrayString(g_RTVMapList, map); + RemoveMenuItem(menu, param2); + + g_Nominated[param1] = true; + + PrintToChatAll("[SM] %t", "Map Nominated", name, map); + } + } +} \ No newline at end of file diff --git a/plugins/mapmanager/timers.sp b/plugins/mapmanager/timers.sp new file mode 100644 index 00000000..c0d5a3e3 --- /dev/null +++ b/plugins/mapmanager/timers.sp @@ -0,0 +1,166 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains timer callbacks + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +public Action:Timer_ChangeMap(Handle:timer) +{ + ServerCommand("changelevel \"%s\"", g_NextMap); + PushArrayString(g_MapHistory, g_NextMap); + + return Plugin_Stop; +} + +public Action:Timer_RandomizeNextmap(Handle:timer) +{ + decl String:map[64]; + + new exclusion = GetConVarInt(g_Cvar_ExcludeMaps); + if (exclusion > GetArraySize(g_MapCycle)) + { + exclusion = GetArraySize(g_MapCycle) - 1; + } + + new b = GetRandomInt(0, GetArraySize(g_MapCycle) - 1); + GetArrayString(g_MapCycle, b, map, sizeof(map)); + + while (FindStringInArray(g_MapHistory, map) != -1) + { + b = GetRandomInt(0, GetArraySize(g_MapCycle) - 1); + GetArrayString(g_MapCycle, b, map, sizeof(map)); + } + + SetNextmap(map); + + LogMessage("[MapManager] Randomizer has chosen '%s' as the next map.", map); + + return Plugin_Stop; +} + +public Action:Timer_DelayRTV(Handle:timer) +{ + g_RTVAllowed = true; + g_RTVStarted = false; + g_RTVEnded = false; +} + +public Action:Timer_StartRTV(Handle:timer) +{ + if (timer == g_RetryTimer) + { + g_RetryTimer = INVALID_HANDLE; + } + + if (g_RetryTimer != INVALID_HANDLE) + { + return; + } + + if (IsVoteInProgress()) + { + // Can't start a vote, try again in 5 seconds. + g_RetryTimer = CreateTimer(5.0, Timer_StartRTV, TIMER_FLAG_NO_MAPCHANGE); + return; + } + + PrintToChatAll("[SM] %t", "RTV Vote Ready"); + + new Handle:MapVoteMenu = CreateMenu(Handler_MapMapVoteMenu, MenuAction:MENU_ACTIONS_ALL); + SetMenuTitle(MapVoteMenu, "Rock The Vote"); + + new Handle:tempMaps = CloneArray(g_MapList); + decl String:map[32]; + + GetCurrentMap(map, sizeof(map)); + new index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } + + // We assume that g_RTVMapList is within the correct limits, based on the logic for nominations + for (new i = 0; i < GetArraySize(g_RTVMapList); i++) + { + GetArrayString(g_RTVMapList, i, map, sizeof(map)); + AddMenuItem(MapVoteMenu, map, map); + + index = FindStringInArray(tempMaps, map); + if (index != -1) + { + RemoveFromArray(tempMaps, index); + } + } + + new limit = GetConVarInt(g_Cvar_Maps) - GetArraySize(g_RTVMapList); + if (limit > GetArraySize(tempMaps)) + { + limit = GetArraySize(tempMaps); + } + + for (new i = 0; i < limit; i++) + { + new b = GetRandomInt(0, GetArraySize(tempMaps) - 1); + GetArrayString(tempMaps, b, map, sizeof(map)); + PushArrayString(g_RTVMapList, map); + AddMenuItem(MapVoteMenu, map, map); + RemoveFromArray(tempMaps, b); + } + + CloseHandle(tempMaps); + + AddMenuItem(MapVoteMenu, "Don't Change", "Don't Change"); + + SetMenuExitButton(MapVoteMenu, false); + VoteMenuToAll(MapVoteMenu, 20); + + LogMessage("[SM] Rockthevote was successfully started."); +} + +public Action:Timer_StartMapVote(Handle:timer) +{ + if (!GetArraySize(g_MapList)) + { + return Plugin_Stop; + } + + if (timer == g_RetryTimer) + { + g_RetryTimer = INVALID_HANDLE; + } + else + { + g_VoteTimer = INVALID_HANDLE; + } + + InitiateVote(); + + return Plugin_Stop; +} \ No newline at end of file diff --git a/plugins/mapmanager/votes.sp b/plugins/mapmanager/votes.sp new file mode 100644 index 00000000..c8a1d6f7 --- /dev/null +++ b/plugins/mapmanager/votes.sp @@ -0,0 +1,318 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Map Manager Plugin + * Contains vote callbacks + * + * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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/>. + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or <http://www.sourcemod.net/license.php>. + * + * Version: $Id$ + */ + +// sm_votemap +public Handler_VoteCallback(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Display) + { + decl String:title[64]; + GetMenuTitle(menu, title, sizeof(title)); + + decl String:map[64]; + GetMenuItem(menu, 1, map, sizeof(map)); + + decl String:buffer[255]; + Format(buffer, sizeof(buffer), "%T", title, param1, map); + + new Handle:panel = Handle:param2; + SetPanelTitle(panel, buffer); + } + else if (action == MenuAction_DisplayItem) + { + decl String:display[64]; + GetMenuItem(menu, param2, "", 0, _, display, sizeof(display)); + + if (strcmp(display, "No") == 0 || strcmp(display, "Yes") == 0) + { + decl String:buffer[255]; + Format(buffer, sizeof(buffer), "%T", display, param1); + + return RedrawMenuItem(buffer); + } + } + else if (action == MenuAction_VoteCancel && param1 == VoteCancel_NoVotes) + { + PrintToChatAll("[SM] %t", "No Votes Cast"); + } + else if (action == MenuAction_VoteEnd) + { + decl String:item[64], String:display[64]; + new Float:percent, Float:limit, votes, totalVotes; + + GetMenuVoteInfo(param2, votes, totalVotes); + GetMenuItem(menu, param1, item, sizeof(item), _, display, sizeof(display)); + + if (strcmp(item, VOTE_NO) == 0 && param1 == 1) + { + votes = totalVotes - votes; // Reverse the votes to be in relation to the Yes option. + } + + percent = GetVotePercent(votes, totalVotes); + + limit = GetConVarFloat(g_Cvar_VoteMap); + + // A multi-argument vote is "always successful", but have to check if its a Yes/No vote. + if ((strcmp(item, VOTE_YES) == 0 && FloatCompare(percent,limit) < 0 && param1 == 0) || (strcmp(item, VOTE_NO) == 0 && param1 == 1)) + { + LogAction(-1, -1, "Vote failed."); + PrintToChatAll("[SM] %t", "Votemap Failed", RoundToNearest(100.0*limit), RoundToNearest(100.0*percent), totalVotes); + } + else + { + PrintToChatAll("[SM] %t", "Votemap Successful", RoundToNearest(100.0*percent), totalVotes); + + if (g_VoteMapInUse && IsClientInGame(g_VoteMapInUse)) + { + DisplayAcceptVoteMenu(item); + } + else + { + LogAction(-1, -1, "Changing map to %s due to vote.", item); + PrintToChatAll("[SM] %t", "Changing map", item); + SetMapChange(0, item, g_Client_Data[g_VoteMapInUse][0]) + } + } + } + + return 0; +} + +public Handler_MapMapVoteMenu(Handle:menu, MenuAction:action, param1, param2) +{ + switch (action) + { + case MenuAction_End: + { + CloseHandle(menu); + } + + case MenuAction_Display: + { + decl String:oldTitle[255], String:buffer[255]; + GetMenuTitle(menu, oldTitle, sizeof(oldTitle)); + Format(buffer, sizeof(buffer), "%T", oldTitle, param1); + + new Handle:panel = Handle:param2; + SetPanelTitle(panel, buffer); + } + + case MenuAction_DisplayItem: + { + if (GetMenuItemCount(menu) - 1 == param2) + { + decl String:buffer[255]; + Format(buffer, sizeof(buffer), "%T", "Don't Change", param1); + return RedrawMenuItem(buffer); + } + } + + // Why am I commented out? Because BAIL hasn't decided yet if + // vote notification will be built into the Vote API. + /*case MenuAction_Select: + { + decl String:Name[32], String:Map[32]; + GetClientName(param1, Name, sizeof(Name)); + GetMenuItem(menu, param2, Map, sizeof(Map)); + + PrintToChatAll("[SM] %s has voted for map '%s'", Name, Map); + }*/ + + case MenuAction_VoteCancel: + { + if (param1 == VoteCancel_NoVotes) + { + PrintToChatAll("[SM] %t", "No Votes"); + g_RTVEnded = true; + } + } + + case MenuAction_VoteEnd: + { + new String:map[64]; + + GetMenuItem(menu, param1, map, sizeof(map)); + + if (GetMenuItemCount(menu) - 1 == param1) // This should always match the "Keep Current" option + { + PrintToChatAll("[SM] %t", "Current Map Stays"); + LogMessage("[SM] Rockthevote has ended, current map kept."); + } + else + { + PrintToChatAll("[SM] %t", "Changing Maps", map); + LogMessage("[SM] Rockthevote has ended, changing to map %s.", map); + new Handle:dp; + CreateDataTimer(5.0, Timer_ChangeMap, dp); + WritePackString(dp, map); + } + + g_RTVEnded = true; + } + } + + return 0; +} + +public Handler_MapVoteMenu(Handle:menu, MenuAction:action, param1, param2) +{ + switch (action) + { + case MenuAction_End: + { + g_VoteMenu = INVALID_HANDLE; + CloseHandle(menu); + } + + case MenuAction_Display: + { + decl String:buffer[255]; + Format(buffer, sizeof(buffer), "%T", "Vote Nextmap", param1); + + new Handle:panel = Handle:param2; + SetPanelTitle(panel, buffer); + } + + case MenuAction_DisplayItem: + { + if (GetMenuItemCount(menu) - 1 == param2) + { + decl String:map[64], String:buffer[255]; + GetMenuItem(menu, param2, map, sizeof(map)); + if (strcmp(map, VOTE_EXTEND, false) == 0) + { + Format(buffer, sizeof(buffer), "%T", "Extend Map", param1); + return RedrawMenuItem(buffer); + } + } + } + + // Why am I commented out? Because BAIL hasn't decided yet if + // vote notification will be built into the Vote API. + /*case MenuAction_Select: + { + decl String:Name[32], String:Map[32]; + GetClientName(param1, Name, sizeof(Name)); + GetMenuItem(menu, param2, Map, sizeof(Map)); + + PrintToChatAll("[SM] %s has voted for map '%s'", Name, Map); + }*/ + + case MenuAction_VoteCancel: + { + // If we receive 0 votes, pick at random. + if (param1 == VoteCancel_NoVotes && GetConVarBool(g_Cvar_NoVoteMode)) + { + new count = GetMenuItemCount(menu); + new item = GetRandomInt(0, count - 1); + decl String:map[32]; + GetMenuItem(menu, item, map, sizeof(map)); + + while (strcmp(map, VOTE_EXTEND, false) == 0) + { + item = GetRandomInt(0, count - 1); + GetMenuItem(menu, item, map, sizeof(map)); + } + + SetNextMap(map); + } + else + { + // We were actually cancelled. What should we do? + } + } + + case MenuAction_VoteEnd: + { + decl String:map[32]; + GetMenuItem(menu, param1, map, sizeof(map)); + + if (strcmp(map, VOTE_EXTEND, false) == 0) + { + new time; + if (GetMapTimeLimit(time)) + { + if (time > 0 && time < GetConVarInt(g_Cvar_ExtendTimeMax)) + { + ExtendMapTimeLimit(GetConVarInt(g_Cvar_ExtendTimeStep)*60); + } + } + + if (g_Cvar_Winlimit != INVALID_HANDLE) + { + new winlimit = GetConVarInt(g_Cvar_Winlimit); + if (winlimit && winlimit < GetConVarInt(g_Cvar_ExtendRoundMax)) + { + SetConVarInt(g_Cvar_Winlimit, winlimit + GetConVarInt(g_Cvar_ExtendRoundStep)); + } + } + + if (g_Cvar_Maxrounds != INVALID_HANDLE) + { + new maxrounds = GetConVarInt(g_Cvar_Maxrounds); + if (maxrounds && maxrounds < GetConVarInt(g_Cvar_ExtendRoundMax)) + { + SetConVarInt(g_Cvar_Maxrounds, maxrounds + GetConVarInt(g_Cvar_ExtendRoundStep)); + } + } + + if (g_Cvar_Fraglimit != INVALID_HANDLE) + { + new fraglimit = GetConVarInt(g_Cvar_Fraglimit); + if (fraglimit && fraglimit < GetConVarInt(g_Cvar_ExtendFragMax)) + { + SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep)); + } + } + + PrintToChatAll("[SM] %t", "Current Map Extended"); + LogMessage("Voting for next map has finished. The current map has been extended."); + + // We extended, so we'll have to vote again. + g_HasVoteStarted = false; + CreateNextVote(); + SetupTimeleftTimer(); + } + else + { + SetNextMap(map); + } + } + } + + return 0; +} \ No newline at end of file diff --git a/plugins/testsuite/goto_test.sp b/plugins/testsuite/goto_test.sp new file mode 100644 index 00000000..2c6721c8 --- /dev/null +++ b/plugins/testsuite/goto_test.sp @@ -0,0 +1,28 @@ +#include <sourcemod> + +public OnPluginStart() +{ + RegServerCmd("test_goto", Test_Goto); +} + +public Action:Test_Goto(args) +{ + new bool:hello = false; + new String:crab[] = "space crab"; + +sample_label: + + new String:yam[] = "yams"; + + PrintToServer("%s %s", crab, yam); + + if (!hello) + { + new bool:what = true; + hello = what + goto sample_label; + } + + return Plugin_Handled; +} + diff --git a/sourcepawn/compiler/sc4.c b/sourcepawn/compiler/sc4.c index 91887f5c..1eb19208 100644 --- a/sourcepawn/compiler/sc4.c +++ b/sourcepawn/compiler/sc4.c @@ -854,19 +854,10 @@ SC_FUNC void modstk(int delta) /* set the stack to a hard offset from the frame */ SC_FUNC void setstk(cell value) { - stgwrite("\tlctrl 5\n"); /* get FRM in PRI */ + stgwrite("\tstackadjust "); assert(value<=0); /* STK should always become <= FRM */ - if (value<0) { - stgwrite("\tadd.c "); - outval(value, TRUE); /* add (negative) offset */ - code_idx+=opcodes(1)+opargs(1); - // ??? write zeros in the space between STK and the value in PRI (the new stk) - // get value of STK in ALT - // zero PRI - // need new FILL opcode that takes a variable size - } /* if */ - stgwrite("\tsctrl 4\n"); /* store in STK */ - code_idx+=opcodes(2)+opargs(2); + outval(value, TRUE); /* add (negative) offset */ + code_idx+=opcodes(1)+opargs(1); } SC_FUNC void modheap(int delta) diff --git a/sourcepawn/compiler/sc6.c b/sourcepawn/compiler/sc6.c index a19b62cd..6a431eac 100644 --- a/sourcepawn/compiler/sc6.c +++ b/sourcepawn/compiler/sc6.c @@ -596,6 +596,7 @@ static OPCODEC opcodelist[] = { { 21, "sref.s.pri", sIN_CSEG, parm1 }, { 67, "sshr", sIN_CSEG, parm0 }, { 44, "stack", sIN_CSEG, parm1 }, + {165, "stackadjust",sIN_CSEG, parm1 }, { 0, "stksize", 0, noop }, { 16, "stor.alt", sIN_CSEG, parm1 }, { 23, "stor.i", sIN_CSEG, parm0 }, diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 6103f3da..23e9a22c 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -1209,6 +1209,28 @@ inline void WriteOp_Stack(JitWriter *jit) } } +inline void WriteOp_StackAdjust(JitWriter *jit) +{ + cell_t val = jit->read_cell(); + + assert(val <= 0); + + //lea edi, [ebx-val] + + if (val < SCHAR_MAX && val > SCHAR_MIN) + { + IA32_Lea_DispRegImm8(jit, AMX_REG_STK, AMX_REG_FRM, val); + } + else + { + IA32_Lea_DispRegImm32(jit, AMX_REG_STK, AMX_REG_FRM, val); + } + + /* We assume the compiler has generated good code -- + * That is, we do not bother validating this amount! + */ +} + inline void WriteOp_Heap(JitWriter *jit) { //mov edx, [esi+hea] diff --git a/sourcepawn/jit/x86/opcode_helpers.h b/sourcepawn/jit/x86/opcode_helpers.h index eb74eb30..c7bb2c75 100644 --- a/sourcepawn/jit/x86/opcode_helpers.h +++ b/sourcepawn/jit/x86/opcode_helpers.h @@ -124,8 +124,8 @@ typedef enum OP_LOAD_ALT, //~!VERIFIED (load.pri) OP_LOAD_S_PRI, //VERIFIED OP_LOAD_S_ALT, //VERIFIED - OP_LREF_PRI, // !GEN :TODO: we will need this for dynarrays - OP_LREF_ALT, // !GEN :TODO: we will need this for dynarrays + OP_LREF_PRI, //VERIFIED + OP_LREF_ALT, //~VERIFIED OP_LREF_S_PRI, //VERIFIED OP_LREF_S_ALT, //~VERIFIED (lref.s.pri) OP_LOAD_I, //VERIFIED @@ -138,8 +138,8 @@ typedef enum OP_STOR_ALT, //~VERIFIED (stor.pri) OP_STOR_S_PRI, //VERIFIED OP_STOR_S_ALT, //~VERIFIED (stor.s.pri) - OP_SREF_PRI, // !GEN :TODO: we will need this for dynarrays - OP_SREF_ALT, // !GEN :TODO: we will need this for dynarrays + OP_SREF_PRI, //VERIFIED + OP_SREF_ALT, //~VERIFIED OP_SREF_S_PRI, //VERIFIED OP_SREF_S_ALT, //~VERIFIED (stor.s.alt) OP_STOR_I, //VERIFIED @@ -286,6 +286,7 @@ typedef enum OP_GENARRAY, //VERIFIED OP_GENARRAY_Z, //-VERIFIED (not tested for 1D arrays) OP_STRADJUST_PRI, //VERIFIED + OP_STACKADJUST, //:TODO: VERIFY OP_FABS, //VERIFIED OP_FLOAT, //VERIFIED OP_FLOATADD, //VERIFIED @@ -301,22 +302,4 @@ typedef enum OP_NUM_OPCODES } OPCODE; -/* -* :TODO: List of ASM Opts -* from jit_x86.cpp -* DONE: Rest of opcodes including the SYSREQ.N inlined version (rev2) -* Including genarray and the 2 tracker ones -* DONE: ALL ungen opcodes (rev1) -* from opcode_helpers.cpp -* DONE: SYSREQ.N .C (rev2) -* MACRO OPCODES (rev2) -* ERROR CHECKS\{VERIFY ADDR} (rev2) -* ARRAY STUFF -* TODO: BrkDebug -* EXEC FUNCTION -* VERIFY ADDR -* -* Oh and ALIGN to 16BYTES all stuff that is called via CALL and frequently used jump labels like what's done with PROC. -*/ - #endif //_INCLUDE_SOURCEPAWN_JIT_X86_OPCODE_INFO_H_ diff --git a/sourcepawn/jit/x86/opcode_switch.inc b/sourcepawn/jit/x86/opcode_switch.inc index 2ac2d2f0..e62c5791 100644 --- a/sourcepawn/jit/x86/opcode_switch.inc +++ b/sourcepawn/jit/x86/opcode_switch.inc @@ -748,6 +748,11 @@ WriteOp_FloatCompare(jit); break; } + case OP_STACKADJUST: + { + WriteOp_StackAdjust(jit); + break; + } #if defined USE_UNGEN_OPCODES #include "ungen_opcode_switch.inc" #endif From cc3c16c079546ba4421bbedbf860c7d678ac974e Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Thu, 27 Mar 2008 04:00:57 +0000 Subject: [PATCH 259/263] Changed the environment variable used in the include paths from SOURCEMM -> SOURCEMM16 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401961 --- loader/msvc8/loader.vcproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/loader/msvc8/loader.vcproj b/loader/msvc8/loader.vcproj index 0d48a624..a84f17d6 100644 --- a/loader/msvc8/loader.vcproj +++ b/loader/msvc8/loader.vcproj @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;"$(SOURCEMM)\sourcehook";"$(SOURCEMM)";"$(SOURCEMM)\sourcemm"" + AdditionalIncludeDirectories="..;"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LOADER_EXPORTS;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -120,7 +120,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;"$(SOURCEMM)\sourcemm";"$(SOURCEMM)";"$(SOURCEMM)\sourcehook"" + AdditionalIncludeDirectories="..;"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LOADER_EXPORTS;_CRT_SECURE_NO_DEPRECATE" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" From 97c26eee3ccf251b05bccf7641f87f3aa9b3cf26 Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Thu, 27 Mar 2008 04:54:56 +0000 Subject: [PATCH 260/263] Updated copyright year --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401964 --- core/ADTFactory.cpp | 2 +- core/ADTFactory.h | 2 +- core/AdminCache.cpp | 2 +- core/AdminCache.h | 2 +- core/CDataPack.cpp | 2 +- core/CDataPack.h | 2 +- core/CellArray.h | 2 +- core/CellRecipientFilter.h | 2 +- core/ChatTriggers.cpp | 2 +- core/ChatTriggers.h | 2 +- core/ConCmdManager.cpp | 2 +- core/ConCmdManager.h | 2 +- core/ConVarManager.cpp | 2 +- core/ConVarManager.h | 2 +- core/CoreConfig.cpp | 2 +- core/CoreConfig.h | 2 +- core/CrazyDebugger.cpp | 2 +- core/Database.cpp | 2 +- core/Database.h | 2 +- core/DebugReporter.cpp | 2 +- core/DebugReporter.h | 2 +- core/EventManager.cpp | 2 +- core/EventManager.h | 2 +- core/GameConfigs.cpp | 2 +- core/GameConfigs.h | 2 +- core/HalfLife2.cpp | 2 +- core/HalfLife2.h | 2 +- core/Logger.cpp | 2 +- core/Logger.h | 2 +- core/MemoryUtils.cpp | 2 +- core/MemoryUtils.h | 2 +- core/MenuManager.cpp | 2 +- core/MenuManager.h | 2 +- core/MenuStyle_Base.cpp | 2 +- core/MenuStyle_Base.h | 2 +- core/MenuStyle_Radio.cpp | 2 +- core/MenuStyle_Radio.h | 2 +- core/MenuStyle_Valve.cpp | 2 +- core/MenuStyle_Valve.h | 2 +- core/MenuVoting.cpp | 2 +- core/MenuVoting.h | 2 +- core/PlayerManager.cpp | 2 +- core/PlayerManager.h | 2 +- core/Profiler.cpp | 2 +- core/Profiler.h | 2 +- core/TextParsers.cpp | 2 +- core/TextParsers.h | 2 +- core/ThreadSupport.cpp | 2 +- core/ThreadSupport.h | 2 +- core/TimerSys.cpp | 2 +- core/TimerSys.h | 2 +- core/Translator.cpp | 2 +- core/Translator.h | 2 +- core/UserMessages.cpp | 2 +- core/UserMessages.h | 2 +- core/concmd_cleaner.cpp | 2 +- core/concmd_cleaner.h | 2 +- core/frame_hooks.cpp | 2 +- core/frame_hooks.h | 2 +- core/sm_autonatives.cpp | 2 +- core/sm_autonatives.h | 2 +- core/sm_crc32.cpp | 2 +- core/sm_crc32.h | 2 +- core/sm_fastlink.h | 2 +- core/sm_globals.h | 2 +- core/sm_memtable.cpp | 2 +- core/sm_memtable.h | 2 +- core/sm_queue.h | 2 +- core/sm_simple_prioqueue.h | 2 +- core/sm_srvcmds.cpp | 2 +- core/sm_srvcmds.h | 2 +- core/sm_stringutil.cpp | 2 +- core/sm_stringutil.h | 2 +- core/sm_trie.cpp | 2 +- core/sm_trie.h | 2 +- core/sm_version.h | 2 +- core/sm_version.tpl | 2 +- core/smn_admin.cpp | 2 +- core/smn_adt_array.cpp | 2 +- core/smn_adt_trie.cpp | 2 +- core/smn_banning.cpp | 2 +- core/smn_bitbuffer.cpp | 2 +- core/smn_console.cpp | 2 +- core/smn_core.cpp | 2 +- core/smn_database.cpp | 2 +- core/smn_datapacks.cpp | 2 +- core/smn_entities.cpp | 2 +- core/smn_events.cpp | 2 +- core/smn_fakenatives.cpp | 2 +- core/smn_filesystem.cpp | 2 +- core/smn_float.cpp | 2 +- core/smn_functions.cpp | 2 +- core/smn_gameconfigs.cpp | 2 +- core/smn_halflife.cpp | 2 +- core/smn_handles.cpp | 2 +- core/smn_hudtext.cpp | 2 +- core/smn_keyvalues.cpp | 2 +- core/smn_lang.cpp | 2 +- core/smn_maplists.cpp | 2 +- core/smn_menus.cpp | 2 +- core/smn_player.cpp | 2 +- core/smn_profiler.cpp | 2 +- core/smn_sorting.cpp | 2 +- core/smn_string.cpp | 2 +- core/smn_textparse.cpp | 2 +- core/smn_timers.cpp | 2 +- core/smn_usermsgs.cpp | 2 +- core/smn_usermsgs.h | 2 +- core/smn_vector.cpp | 2 +- core/sourcemm_api.cpp | 2 +- core/sourcemm_api.h | 2 +- core/sourcemod.cpp | 2 +- core/sourcemod.h | 2 +- core/systems/ExtensionSys.cpp | 2 +- core/systems/ExtensionSys.h | 2 +- core/systems/ForwardSys.cpp | 2 +- core/systems/ForwardSys.h | 2 +- core/systems/HandleSys.cpp | 2 +- core/systems/HandleSys.h | 2 +- core/systems/LibrarySys.cpp | 2 +- core/systems/LibrarySys.h | 2 +- core/systems/PluginInfoDatabase.cpp | 2 +- core/systems/PluginInfoDatabase.h | 2 +- core/systems/PluginSys.cpp | 2 +- core/systems/PluginSys.h | 2 +- core/systems/ShareSys.cpp | 2 +- core/systems/ShareSys.h | 2 +- core/thread/BaseWorker.cpp | 2 +- core/thread/BaseWorker.h | 2 +- core/thread/PosixThreads.cpp | 2 +- core/thread/PosixThreads.h | 2 +- core/thread/ThreadWorker.cpp | 2 +- core/thread/ThreadWorker.h | 2 +- core/thread/WinThreads.cpp | 2 +- core/thread/WinThreads.h | 2 +- core/version.rc | 2 +- core/vm/sp_vm_basecontext.cpp | 2 +- core/vm/sp_vm_basecontext.h | 2 +- core/vm/sp_vm_engine.cpp | 2 +- core/vm/sp_vm_engine.h | 2 +- core/vm/sp_vm_function.cpp | 2 +- core/vm/sp_vm_function.h | 2 +- extensions/batsupport/BATInterface.h | 2 +- extensions/batsupport/Makefile | 2 +- extensions/batsupport/extension.cpp | 2 +- extensions/batsupport/extension.h | 2 +- extensions/batsupport/sdk/smsdk_config.h | 2 +- extensions/batsupport/sdk/smsdk_ext.cpp | 2 +- extensions/batsupport/sdk/smsdk_ext.h | 2 +- extensions/bintools/CallMaker.cpp | 2 +- extensions/bintools/CallMaker.h | 2 +- extensions/bintools/CallWrapper.cpp | 2 +- extensions/bintools/CallWrapper.h | 2 +- extensions/bintools/Makefile | 2 +- extensions/bintools/extension.cpp | 2 +- extensions/bintools/extension.h | 2 +- extensions/bintools/jit_call.cpp | 2 +- extensions/bintools/jit_call.h | 2 +- extensions/bintools/sdk/smsdk_config.h | 2 +- extensions/bintools/sdk/smsdk_ext.cpp | 2 +- extensions/bintools/sdk/smsdk_ext.h | 2 +- extensions/bintools/svn_version.h | 2 +- extensions/bintools/svn_version.tpl | 2 +- extensions/bintools/version.rc | 2 +- extensions/cstrike/RegNatives.cpp | 2 +- extensions/cstrike/RegNatives.h | 2 +- extensions/cstrike/extension.cpp | 2 +- extensions/cstrike/extension.h | 2 +- extensions/cstrike/natives.cpp | 2 +- extensions/cstrike/sdk/smsdk_config.h | 2 +- extensions/cstrike/sdk/smsdk_ext.cpp | 2 +- extensions/cstrike/sdk/smsdk_ext.h | 2 +- extensions/cstrike/svn_version.h | 2 +- extensions/cstrike/svn_version.tpl | 2 +- extensions/cstrike/timeleft.cpp | 2 +- extensions/cstrike/timeleft.h | 2 +- extensions/cstrike/version.rc | 2 +- extensions/geoip/Makefile | 2 +- extensions/geoip/extension.cpp | 2 +- extensions/geoip/extension.h | 2 +- extensions/geoip/sdk/smsdk_config.h | 2 +- extensions/geoip/sdk/smsdk_ext.cpp | 2 +- extensions/geoip/sdk/smsdk_ext.h | 2 +- extensions/geoip/svn_version.h | 2 +- extensions/geoip/svn_version.tpl | 2 +- extensions/geoip/version.rc | 2 +- extensions/mysql/Makefile | 2 +- extensions/mysql/extension.cpp | 2 +- extensions/mysql/extension.h | 2 +- extensions/mysql/mysql/MyBasicResults.cpp | 2 +- extensions/mysql/mysql/MyBasicResults.h | 2 +- extensions/mysql/mysql/MyBoundResults.cpp | 2 +- extensions/mysql/mysql/MyBoundResults.h | 2 +- extensions/mysql/mysql/MyDatabase.cpp | 2 +- extensions/mysql/mysql/MyDatabase.h | 2 +- extensions/mysql/mysql/MyDriver.cpp | 2 +- extensions/mysql/mysql/MyDriver.h | 2 +- extensions/mysql/mysql/MyStatement.cpp | 2 +- extensions/mysql/mysql/MyStatement.h | 2 +- extensions/mysql/sdk/smsdk_config.h | 2 +- extensions/mysql/sdk/smsdk_ext.cpp | 2 +- extensions/mysql/sdk/smsdk_ext.h | 2 +- extensions/mysql/svn_version.h | 2 +- extensions/mysql/svn_version.tpl | 2 +- extensions/mysql/version.rc | 2 +- extensions/regex/Makefile.ep1 | 2 +- extensions/regex/Makefile.ep2 | 2 +- extensions/regex/Makefile.orig | 2 +- extensions/regex/extension.cpp | 2 +- extensions/regex/extension.h | 2 +- extensions/regex/sdk/smsdk_config.h | 2 +- extensions/regex/sdk/smsdk_ext.cpp | 2 +- extensions/regex/sdk/smsdk_ext.h | 2 +- extensions/sdktools/CellRecipientFilter.h | 2 +- extensions/sdktools/Makefile | 2 +- extensions/sdktools/extension.cpp | 2 +- extensions/sdktools/extension.h | 2 +- extensions/sdktools/inputnatives.cpp | 2 +- extensions/sdktools/sdk/smsdk_config.h | 2 +- extensions/sdktools/sdk/smsdk_ext.cpp | 2 +- extensions/sdktools/sdk/smsdk_ext.h | 2 +- extensions/sdktools/svn_version.h | 2 +- extensions/sdktools/svn_version.tpl | 2 +- extensions/sdktools/teamnatives.cpp | 2 +- extensions/sdktools/tempents.cpp | 2 +- extensions/sdktools/tempents.h | 2 +- extensions/sdktools/tenatives.cpp | 2 +- extensions/sdktools/trnatives.cpp | 2 +- extensions/sdktools/util.h | 2 +- extensions/sdktools/vcallbuilder.cpp | 2 +- extensions/sdktools/vcallbuilder.h | 2 +- extensions/sdktools/vcaller.cpp | 2 +- extensions/sdktools/vdecoder.cpp | 2 +- extensions/sdktools/vdecoder.h | 2 +- extensions/sdktools/version.rc | 2 +- extensions/sdktools/vglobals.cpp | 2 +- extensions/sdktools/vglobals.h | 2 +- extensions/sdktools/vhelpers.cpp | 2 +- extensions/sdktools/vhelpers.h | 2 +- extensions/sdktools/vnatives.cpp | 2 +- extensions/sdktools/vnatives.h | 2 +- extensions/sdktools/voice.cpp | 2 +- extensions/sdktools/vsound.cpp | 2 +- extensions/sdktools/vsound.h | 2 +- extensions/sdktools/vstringtable.cpp | 2 +- extensions/sqlite/Makefile | 2 +- extensions/sqlite/driver/SqDatabase.cpp | 2 +- extensions/sqlite/driver/SqDatabase.h | 2 +- extensions/sqlite/driver/SqDriver.cpp | 2 +- extensions/sqlite/driver/SqDriver.h | 2 +- extensions/sqlite/driver/SqQuery.cpp | 2 +- extensions/sqlite/driver/SqQuery.h | 2 +- extensions/sqlite/driver/SqResults.cpp | 2 +- extensions/sqlite/driver/SqResults.h | 2 +- extensions/sqlite/extension.cpp | 2 +- extensions/sqlite/extension.h | 2 +- extensions/sqlite/sdk/smsdk_config.h | 2 +- extensions/sqlite/sdk/smsdk_ext.cpp | 2 +- extensions/sqlite/sdk/smsdk_ext.h | 2 +- extensions/sqlite/sm_memtable.cpp | 2 +- extensions/sqlite/sm_memtable.h | 2 +- extensions/sqlite/svn_version.h | 2 +- extensions/sqlite/svn_version.tpl | 2 +- extensions/sqlite/version.rc | 2 +- extensions/tf2/Makefile.ep1 | 2 +- extensions/tf2/Makefile.ep2 | 2 +- extensions/tf2/Makefile.orig | 2 +- extensions/tf2/RegNatives.cpp | 2 +- extensions/tf2/RegNatives.h | 2 +- extensions/tf2/extension.cpp | 2 +- extensions/tf2/extension.h | 2 +- extensions/tf2/natives.cpp | 2 +- extensions/tf2/sdk/smsdk_config.h | 2 +- extensions/tf2/sdk/smsdk_ext.cpp | 2 +- extensions/tf2/sdk/smsdk_ext.h | 2 +- extensions/tf2/svn_version.h | 2 +- extensions/tf2/svn_version.tpl | 2 +- extensions/tf2/version.rc | 2 +- extensions/topmenus/Makefile | 2 +- extensions/topmenus/TopMenu.cpp | 2 +- extensions/topmenus/TopMenu.h | 2 +- extensions/topmenus/TopMenuManager.cpp | 2 +- extensions/topmenus/TopMenuManager.h | 2 +- extensions/topmenus/extension.cpp | 2 +- extensions/topmenus/extension.h | 2 +- extensions/topmenus/sdk/sm_memtable.cpp | 2 +- extensions/topmenus/sdk/sm_memtable.h | 2 +- extensions/topmenus/sdk/smsdk_config.h | 2 +- extensions/topmenus/sdk/smsdk_ext.cpp | 2 +- extensions/topmenus/sdk/smsdk_ext.h | 2 +- extensions/topmenus/smn_topmenus.cpp | 2 +- extensions/topmenus/smn_topmenus.h | 2 +- extensions/topmenus/svn_version.h | 2 +- extensions/topmenus/svn_version.tpl | 2 +- extensions/topmenus/version.rc | 2 +- loader/Makefile | 2 +- loader/loader.cpp | 2 +- loader/svn_version.h | 2 +- loader/svn_version.tpl | 2 +- loader/version.rc | 2 +- plugins/admin-flatfile/admin-flatfile.sp | 2 +- plugins/admin-flatfile/admin-groups.sp | 2 +- plugins/admin-flatfile/admin-overrides.sp | 2 +- plugins/admin-flatfile/admin-simple.sp | 2 +- plugins/admin-flatfile/admin-users.sp | 2 +- plugins/admin-sql-prefetch.sp | 2 +- plugins/admin-sql-threaded.sp | 2 +- plugins/adminhelp.sp | 2 +- plugins/adminmenu.sp | 2 +- plugins/antiflood.sp | 2 +- plugins/basebans.sp | 2 +- plugins/basebans/ban.sp | 2 +- plugins/basechat.sp | 2 +- plugins/basecomm.sp | 2 +- plugins/basecomm/gag.sp | 2 +- plugins/basecommands.sp | 2 +- plugins/basecommands/cancelvote.sp | 2 +- plugins/basecommands/execcfg.sp | 2 +- plugins/basecommands/kick.sp | 2 +- plugins/basecommands/map.sp | 2 +- plugins/basecommands/reloadadmins.sp | 2 +- plugins/basecommands/who.sp | 2 +- plugins/basetriggers.sp | 2 +- plugins/basevotes.sp | 2 +- plugins/basevotes/voteban.sp | 2 +- plugins/basevotes/votekick.sp | 2 +- plugins/basevotes/votemap.sp | 2 +- plugins/compile.exe | Bin 0 -> 113664 bytes plugins/funcommands.sp | 2 +- plugins/funcommands/beacon.sp | 2 +- plugins/funcommands/blind.sp | 2 +- plugins/funcommands/drug.sp | 2 +- plugins/funcommands/fire.sp | 2 +- plugins/funcommands/gravity.sp | 2 +- plugins/funcommands/ice.sp | 2 +- plugins/funcommands/noclip.sp | 2 +- plugins/funcommands/timebomb.sp | 2 +- plugins/funvotes.sp | 2 +- plugins/funvotes/votealltalk.sp | 2 +- plugins/funvotes/voteburn.sp | 2 +- plugins/funvotes/voteff.sp | 2 +- plugins/funvotes/votegravity.sp | 2 +- plugins/funvotes/voteslay.sp | 2 +- plugins/include/admin.inc | 2 +- plugins/include/adminmenu.inc | 2 +- plugins/include/adt.inc | 2 +- plugins/include/adt_array.inc | 2 +- plugins/include/adt_trie.inc | 2 +- plugins/include/banning.inc | 2 +- plugins/include/bitbuffer.inc | 2 +- plugins/include/clients.inc | 2 +- plugins/include/commandfilters.inc | 2 +- plugins/include/console.inc | 2 +- plugins/include/core.inc | 2 +- plugins/include/cstrike.inc | 2 +- plugins/include/datapack.inc | 2 +- plugins/include/dbi.inc | 2 +- plugins/include/entity.inc | 2 +- plugins/include/entity_prop_stocks.inc | 2 +- plugins/include/events.inc | 2 +- plugins/include/files.inc | 2 +- plugins/include/float.inc | 2 +- plugins/include/functions.inc | 2 +- plugins/include/geoip.inc | 2 +- plugins/include/halflife.inc | 2 +- plugins/include/handles.inc | 2 +- plugins/include/helpers.inc | 2 +- plugins/include/keyvalues.inc | 2 +- plugins/include/lang.inc | 2 +- plugins/include/logging.inc | 2 +- plugins/include/menus.inc | 2 +- plugins/include/profiler.inc | 2 +- plugins/include/sdktools.inc | 2 +- plugins/include/sdktools_engine.inc | 2 +- plugins/include/sdktools_entinput.inc | 2 +- plugins/include/sdktools_functions.inc | 2 +- plugins/include/sdktools_sound.inc | 2 +- plugins/include/sdktools_stocks.inc | 2 +- plugins/include/sdktools_stringtables.inc | 2 +- plugins/include/sdktools_tempents.inc | 2 +- plugins/include/sdktools_tempents_stocks.inc | 2 +- plugins/include/sdktools_trace.inc | 2 +- plugins/include/sdktools_voice.inc | 2 +- plugins/include/sorting.inc | 2 +- plugins/include/sourcemod.inc | 2 +- plugins/include/string.inc | 2 +- plugins/include/textparse.inc | 2 +- plugins/include/timers.inc | 2 +- plugins/include/topmenus.inc | 2 +- plugins/include/usermessages.inc | 2 +- plugins/include/vector.inc | 2 +- plugins/include/version.inc | 2 +- plugins/include/version.tpl | 2 +- plugins/mapchooser.sp | 2 +- plugins/mapmanager.sp | 2 +- plugins/mapmanager/commands.sp | 2 +- plugins/mapmanager/events.sp | 2 +- plugins/mapmanager/functions.sp | 2 +- plugins/mapmanager/functions_menu.sp | 2 +- plugins/mapmanager/globals.sp | 2 +- plugins/mapmanager/menus.sp | 2 +- plugins/mapmanager/timers.sp | 2 +- plugins/mapmanager/votes.sp | 2 +- plugins/nextmap.sp | 2 +- plugins/playercommands.sp | 2 +- plugins/playercommands/slap.sp | 2 +- plugins/playercommands/slay.sp | 2 +- plugins/randomcycle.sp | 2 +- plugins/reservedslots.sp | 2 +- plugins/rockthevote.sp | 2 +- plugins/spcomp.exe | Bin 0 -> 315392 bytes plugins/sql-admin-manager.sp | 2 +- public/IADTFactory.h | 2 +- public/IAdminSystem.h | 2 +- public/IDBDriver.h | 2 +- public/IDataPack.h | 2 +- public/IExtensionSys.h | 2 +- public/IForwardSys.h | 2 +- public/IGameConfigs.h | 2 +- public/IGameHelpers.h | 2 +- public/IHandleSys.h | 2 +- public/ILibrarySys.h | 2 +- public/IMemoryUtils.h | 2 +- public/IMenuManager.h | 2 +- public/IPlayerHelpers.h | 2 +- public/IPluginSys.h | 2 +- public/IRootConsoleMenu.h | 2 +- public/IShareSys.h | 2 +- public/ISourceMod.h | 2 +- public/ITextParsers.h | 2 +- public/IThreader.h | 2 +- public/ITimerSystem.h | 2 +- public/IUserMessages.h | 2 +- public/compat_wrappers.h | 2 +- public/extensions/IBinTools.h | 2 +- public/extensions/ITopMenus.h | 2 +- public/jit/jit_helpers.h | 2 +- public/jit/x86/x86_macros.h | 2 +- public/metamod_wrappers.h | 2 +- public/mms_sample_ext/Makefile.ep2 | 2 +- public/mms_sample_ext/Makefile.orig | 2 +- public/sample_ext/Makefile | 2 +- public/sample_ext/Makefile.ep1 | 2 +- public/sample_ext/Makefile.ep2 | 2 +- public/sample_ext/Makefile.orig | 2 +- public/sample_ext/extension.cpp | 2 +- public/sample_ext/extension.h | 2 +- public/sample_ext/sdk/smsdk_config.h | 2 +- public/sample_ext/sdk/smsdk_ext.cpp | 2 +- public/sample_ext/sdk/smsdk_ext.h | 2 +- public/sm_platform.h | 2 +- public/sm_trie_tpl.h | 2 +- public/sourcepawn/sp_file_headers.h | 2 +- public/sourcepawn/sp_typeutil.h | 2 +- public/sourcepawn/sp_vm_api.h | 2 +- public/sourcepawn/sp_vm_base.h | 2 +- public/sourcepawn/sp_vm_types.h | 2 +- sourcepawn/compiler/Makefile | 2 +- sourcepawn/compiler/sc1.c | 2 +- sourcepawn/compiler/svn_version.h | 2 +- sourcepawn/compiler/svn_version.tpl | 2 +- sourcepawn/jit/x86/Makefile | 2 +- sourcepawn/jit/x86/dll_exports.cpp | 2 +- sourcepawn/jit/x86/dll_exports.h | 2 +- sourcepawn/jit/x86/jit_version.h | 2 +- sourcepawn/jit/x86/jit_version.tpl | 2 +- sourcepawn/jit/x86/jit_x86.cpp | 2 +- sourcepawn/jit/x86/jit_x86.h | 2 +- sourcepawn/jit/x86/opcode_helpers.cpp | 2 +- sourcepawn/jit/x86/opcode_helpers.h | 2 +- sourcepawn/jit/x86/opcode_switch.inc | 2 +- sourcepawn/jit/x86/ungen_opcode_switch.inc | 2 +- sourcepawn/jit/x86/ungen_opcodes.h | 2 +- sourcepawn/jit/x86/version.rc | 2 +- 474 files changed, 472 insertions(+), 472 deletions(-) create mode 100644 plugins/compile.exe create mode 100644 plugins/spcomp.exe diff --git a/core/ADTFactory.cpp b/core/ADTFactory.cpp index c6630971..e8fc2031 100644 --- a/core/ADTFactory.cpp +++ b/core/ADTFactory.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ADTFactory.h b/core/ADTFactory.h index 9c80a0de..31bff041 100644 --- a/core/ADTFactory.h +++ b/core/ADTFactory.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/AdminCache.cpp b/core/AdminCache.cpp index 9e447248..e469cdbc 100644 --- a/core/AdminCache.cpp +++ b/core/AdminCache.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/AdminCache.h b/core/AdminCache.h index f6cc2db7..ab0b7461 100644 --- a/core/AdminCache.h +++ b/core/AdminCache.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CDataPack.cpp b/core/CDataPack.cpp index c502f806..99d15694 100644 --- a/core/CDataPack.cpp +++ b/core/CDataPack.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CDataPack.h b/core/CDataPack.h index d04cca51..83a53539 100644 --- a/core/CDataPack.h +++ b/core/CDataPack.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CellArray.h b/core/CellArray.h index 786cd255..42f8b452 100644 --- a/core/CellArray.h +++ b/core/CellArray.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CellRecipientFilter.h b/core/CellRecipientFilter.h index 30070553..e7dcddee 100644 --- a/core/CellRecipientFilter.h +++ b/core/CellRecipientFilter.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ChatTriggers.cpp b/core/ChatTriggers.cpp index cf6baa36..4e1ec018 100644 --- a/core/ChatTriggers.cpp +++ b/core/ChatTriggers.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ChatTriggers.h b/core/ChatTriggers.h index 0da7e549..c003f997 100644 --- a/core/ChatTriggers.h +++ b/core/ChatTriggers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ConCmdManager.cpp b/core/ConCmdManager.cpp index ec112f78..b41b6bfd 100644 --- a/core/ConCmdManager.cpp +++ b/core/ConCmdManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ConCmdManager.h b/core/ConCmdManager.h index 51938cf7..8c25bb73 100644 --- a/core/ConCmdManager.h +++ b/core/ConCmdManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index 5de8d87a..f8e27cee 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ConVarManager.h b/core/ConVarManager.h index ac921ec5..148f7c40 100644 --- a/core/ConVarManager.h +++ b/core/ConVarManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CoreConfig.cpp b/core/CoreConfig.cpp index dab545bb..0075c537 100644 --- a/core/CoreConfig.cpp +++ b/core/CoreConfig.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CoreConfig.h b/core/CoreConfig.h index 2de99a33..8a1732b7 100644 --- a/core/CoreConfig.h +++ b/core/CoreConfig.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/CrazyDebugger.cpp b/core/CrazyDebugger.cpp index 492766ce..3bada64f 100644 --- a/core/CrazyDebugger.cpp +++ b/core/CrazyDebugger.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Database.cpp b/core/Database.cpp index 5efd0d6f..4b9e4294 100644 --- a/core/Database.cpp +++ b/core/Database.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Database.h b/core/Database.h index aae09862..505842a3 100644 --- a/core/Database.h +++ b/core/Database.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/DebugReporter.cpp b/core/DebugReporter.cpp index 29e203d3..4572ebaf 100644 --- a/core/DebugReporter.cpp +++ b/core/DebugReporter.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/DebugReporter.h b/core/DebugReporter.h index acac6571..9fa37aae 100644 --- a/core/DebugReporter.h +++ b/core/DebugReporter.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/EventManager.cpp b/core/EventManager.cpp index 5882dc54..76ad2478 100644 --- a/core/EventManager.cpp +++ b/core/EventManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/EventManager.h b/core/EventManager.h index 09fc0394..54a830bc 100644 --- a/core/EventManager.h +++ b/core/EventManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/GameConfigs.cpp b/core/GameConfigs.cpp index 354f3d19..777b20e1 100644 --- a/core/GameConfigs.cpp +++ b/core/GameConfigs.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/GameConfigs.h b/core/GameConfigs.h index f0fd35b2..4b447084 100644 --- a/core/GameConfigs.h +++ b/core/GameConfigs.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 2a84f142..f7fd7c17 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/HalfLife2.h b/core/HalfLife2.h index 90059620..ba61c31e 100644 --- a/core/HalfLife2.h +++ b/core/HalfLife2.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Logger.cpp b/core/Logger.cpp index bd8cbe8f..cc35ef1a 100644 --- a/core/Logger.cpp +++ b/core/Logger.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Logger.h b/core/Logger.h index fb643a2e..7d9cc57d 100644 --- a/core/Logger.h +++ b/core/Logger.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MemoryUtils.cpp b/core/MemoryUtils.cpp index 81090a61..6af80718 100644 --- a/core/MemoryUtils.cpp +++ b/core/MemoryUtils.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MemoryUtils.h b/core/MemoryUtils.h index 312d2ede..560d3a97 100644 --- a/core/MemoryUtils.h +++ b/core/MemoryUtils.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuManager.cpp b/core/MenuManager.cpp index c7b64c1d..34b83202 100644 --- a/core/MenuManager.cpp +++ b/core/MenuManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuManager.h b/core/MenuManager.h index c3f97af3..2672d92d 100644 --- a/core/MenuManager.h +++ b/core/MenuManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Base.cpp b/core/MenuStyle_Base.cpp index 62f427eb..f53afa7f 100644 --- a/core/MenuStyle_Base.cpp +++ b/core/MenuStyle_Base.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Base.h b/core/MenuStyle_Base.h index 9cfe95a3..8dc41fa1 100644 --- a/core/MenuStyle_Base.h +++ b/core/MenuStyle_Base.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Radio.cpp b/core/MenuStyle_Radio.cpp index 20372c59..8da01b1c 100644 --- a/core/MenuStyle_Radio.cpp +++ b/core/MenuStyle_Radio.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Radio.h b/core/MenuStyle_Radio.h index 826c5de5..f9d1dd66 100644 --- a/core/MenuStyle_Radio.h +++ b/core/MenuStyle_Radio.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Valve.cpp b/core/MenuStyle_Valve.cpp index f51a85a0..39e987a1 100644 --- a/core/MenuStyle_Valve.cpp +++ b/core/MenuStyle_Valve.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuStyle_Valve.h b/core/MenuStyle_Valve.h index bf7bda4d..68d4925b 100644 --- a/core/MenuStyle_Valve.h +++ b/core/MenuStyle_Valve.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuVoting.cpp b/core/MenuVoting.cpp index d1f5d672..ee9b4c1f 100644 --- a/core/MenuVoting.cpp +++ b/core/MenuVoting.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/MenuVoting.h b/core/MenuVoting.h index 22e42a09..0710c298 100644 --- a/core/MenuVoting.h +++ b/core/MenuVoting.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index b6f37ca5..e8b14cc1 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/PlayerManager.h b/core/PlayerManager.h index 767a90dd..e4930099 100644 --- a/core/PlayerManager.h +++ b/core/PlayerManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Profiler.cpp b/core/Profiler.cpp index b69341da..fab086fb 100644 --- a/core/Profiler.cpp +++ b/core/Profiler.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Profiler.h b/core/Profiler.h index 3781a247..b6588f49 100644 --- a/core/Profiler.h +++ b/core/Profiler.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/TextParsers.cpp b/core/TextParsers.cpp index 781ada22..060124f5 100644 --- a/core/TextParsers.cpp +++ b/core/TextParsers.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/TextParsers.h b/core/TextParsers.h index 7762c263..30e8a781 100644 --- a/core/TextParsers.h +++ b/core/TextParsers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ThreadSupport.cpp b/core/ThreadSupport.cpp index e694abe5..a8f1cc19 100644 --- a/core/ThreadSupport.cpp +++ b/core/ThreadSupport.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/ThreadSupport.h b/core/ThreadSupport.h index 6c0e8fa6..badb2171 100644 --- a/core/ThreadSupport.h +++ b/core/ThreadSupport.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/TimerSys.cpp b/core/TimerSys.cpp index 633de682..32726a01 100644 --- a/core/TimerSys.cpp +++ b/core/TimerSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/TimerSys.h b/core/TimerSys.h index 3f040ea3..fa96f769 100644 --- a/core/TimerSys.h +++ b/core/TimerSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Translator.cpp b/core/Translator.cpp index 004d8903..917cf372 100644 --- a/core/Translator.cpp +++ b/core/Translator.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/Translator.h b/core/Translator.h index cd3f835d..c878e3e7 100644 --- a/core/Translator.h +++ b/core/Translator.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/UserMessages.cpp b/core/UserMessages.cpp index 0413286f..62ea58f1 100644 --- a/core/UserMessages.cpp +++ b/core/UserMessages.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/UserMessages.h b/core/UserMessages.h index 01969fcf..4fbf5c43 100644 --- a/core/UserMessages.h +++ b/core/UserMessages.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/concmd_cleaner.cpp b/core/concmd_cleaner.cpp index 0f376c18..658c4c37 100644 --- a/core/concmd_cleaner.cpp +++ b/core/concmd_cleaner.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/concmd_cleaner.h b/core/concmd_cleaner.h index cfd90be8..99122ccd 100644 --- a/core/concmd_cleaner.h +++ b/core/concmd_cleaner.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/frame_hooks.cpp b/core/frame_hooks.cpp index 09a38a67..b84a3e53 100644 --- a/core/frame_hooks.cpp +++ b/core/frame_hooks.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/frame_hooks.h b/core/frame_hooks.h index f99d560c..3bcb05b3 100644 --- a/core/frame_hooks.h +++ b/core/frame_hooks.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_autonatives.cpp b/core/sm_autonatives.cpp index bf7c785e..09fd2881 100644 --- a/core/sm_autonatives.cpp +++ b/core/sm_autonatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_autonatives.h b/core/sm_autonatives.h index 6ee35645..c3b0d22b 100644 --- a/core/sm_autonatives.h +++ b/core/sm_autonatives.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_crc32.cpp b/core/sm_crc32.cpp index b6e426e2..a94d6053 100644 --- a/core/sm_crc32.cpp +++ b/core/sm_crc32.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_crc32.h b/core/sm_crc32.h index 8b36e970..cccac8c6 100644 --- a/core/sm_crc32.h +++ b/core/sm_crc32.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_fastlink.h b/core/sm_fastlink.h index 3f678711..9814faa2 100644 --- a/core/sm_fastlink.h +++ b/core/sm_fastlink.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_globals.h b/core/sm_globals.h index 42fa6b15..7f7f5253 100644 --- a/core/sm_globals.h +++ b/core/sm_globals.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_memtable.cpp b/core/sm_memtable.cpp index 95cdebda..8f18b136 100644 --- a/core/sm_memtable.cpp +++ b/core/sm_memtable.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_memtable.h b/core/sm_memtable.h index 22743b7f..caf8cf87 100644 --- a/core/sm_memtable.h +++ b/core/sm_memtable.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_queue.h b/core/sm_queue.h index 2a963aa8..4d438ad5 100644 --- a/core/sm_queue.h +++ b/core/sm_queue.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_simple_prioqueue.h b/core/sm_simple_prioqueue.h index a30ca254..ad7b0a42 100644 --- a/core/sm_simple_prioqueue.h +++ b/core/sm_simple_prioqueue.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index 7f2a749d..957d4ff1 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_srvcmds.h b/core/sm_srvcmds.h index 5d38d666..ea8d172b 100644 --- a/core/sm_srvcmds.h +++ b/core/sm_srvcmds.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_stringutil.cpp b/core/sm_stringutil.cpp index 70586d96..de344f03 100644 --- a/core/sm_stringutil.cpp +++ b/core/sm_stringutil.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_stringutil.h b/core/sm_stringutil.h index e96aac62..12868046 100644 --- a/core/sm_stringutil.h +++ b/core/sm_stringutil.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_trie.cpp b/core/sm_trie.cpp index 899ccd60..3c518f20 100644 --- a/core/sm_trie.cpp +++ b/core/sm_trie.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_trie.h b/core/sm_trie.h index 6e25fbd1..ca224d53 100644 --- a/core/sm_trie.h +++ b/core/sm_trie.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_version.h b/core/sm_version.h index 58fdccc2..91f34709 100644 --- a/core/sm_version.h +++ b/core/sm_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sm_version.tpl b/core/sm_version.tpl index 611663dc..c9d0c6a3 100644 --- a/core/sm_version.tpl +++ b/core/sm_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_admin.cpp b/core/smn_admin.cpp index 836a6cd5..d7fec06b 100644 --- a/core/smn_admin.cpp +++ b/core/smn_admin.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_adt_array.cpp b/core/smn_adt_array.cpp index cafcca54..08852eb0 100644 --- a/core/smn_adt_array.cpp +++ b/core/smn_adt_array.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_adt_trie.cpp b/core/smn_adt_trie.cpp index 2aab9833..19ef31a3 100644 --- a/core/smn_adt_trie.cpp +++ b/core/smn_adt_trie.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_banning.cpp b/core/smn_banning.cpp index 876e31fd..0ed31467 100644 --- a/core/smn_banning.cpp +++ b/core/smn_banning.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_bitbuffer.cpp b/core/smn_bitbuffer.cpp index 949717e2..11a31229 100644 --- a/core/smn_bitbuffer.cpp +++ b/core/smn_bitbuffer.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_console.cpp b/core/smn_console.cpp index 63417144..8f2a4eb7 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_core.cpp b/core/smn_core.cpp index 67c413c6..93feb99d 100644 --- a/core/smn_core.cpp +++ b/core/smn_core.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_database.cpp b/core/smn_database.cpp index 22f4b6a3..5327cb8d 100644 --- a/core/smn_database.cpp +++ b/core/smn_database.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_datapacks.cpp b/core/smn_datapacks.cpp index ed78ac1d..40e5d6b7 100644 --- a/core/smn_datapacks.cpp +++ b/core/smn_datapacks.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_entities.cpp b/core/smn_entities.cpp index 29b341bd..2a6d91a0 100644 --- a/core/smn_entities.cpp +++ b/core/smn_entities.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_events.cpp b/core/smn_events.cpp index 1cae1ed6..7fcac525 100644 --- a/core/smn_events.cpp +++ b/core/smn_events.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_fakenatives.cpp b/core/smn_fakenatives.cpp index b9e49076..35697216 100644 --- a/core/smn_fakenatives.cpp +++ b/core/smn_fakenatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_filesystem.cpp b/core/smn_filesystem.cpp index 08630af3..8c19e4af 100644 --- a/core/smn_filesystem.cpp +++ b/core/smn_filesystem.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_float.cpp b/core/smn_float.cpp index 0b15aca2..a13cd26f 100644 --- a/core/smn_float.cpp +++ b/core/smn_float.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_functions.cpp b/core/smn_functions.cpp index 24cade1b..2f6f68c5 100644 --- a/core/smn_functions.cpp +++ b/core/smn_functions.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_gameconfigs.cpp b/core/smn_gameconfigs.cpp index 0efa7e97..0ec301ed 100644 --- a/core/smn_gameconfigs.cpp +++ b/core/smn_gameconfigs.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_halflife.cpp b/core/smn_halflife.cpp index 2b8adc9c..d34d6732 100644 --- a/core/smn_halflife.cpp +++ b/core/smn_halflife.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_handles.cpp b/core/smn_handles.cpp index 6cb2bb4a..e4fb47cb 100644 --- a/core/smn_handles.cpp +++ b/core/smn_handles.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_hudtext.cpp b/core/smn_hudtext.cpp index 50d1923a..01426830 100644 --- a/core/smn_hudtext.cpp +++ b/core/smn_hudtext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_keyvalues.cpp b/core/smn_keyvalues.cpp index 825b26f1..ee7252b4 100644 --- a/core/smn_keyvalues.cpp +++ b/core/smn_keyvalues.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_lang.cpp b/core/smn_lang.cpp index 602c4934..56e6b6fa 100644 --- a/core/smn_lang.cpp +++ b/core/smn_lang.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_maplists.cpp b/core/smn_maplists.cpp index b2c228dd..f44eb732 100644 --- a/core/smn_maplists.cpp +++ b/core/smn_maplists.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_menus.cpp b/core/smn_menus.cpp index 13473ee4..72628c07 100644 --- a/core/smn_menus.cpp +++ b/core/smn_menus.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_player.cpp b/core/smn_player.cpp index 5f7d21a6..688f87ed 100644 --- a/core/smn_player.cpp +++ b/core/smn_player.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_profiler.cpp b/core/smn_profiler.cpp index 392fc617..a359e1ff 100644 --- a/core/smn_profiler.cpp +++ b/core/smn_profiler.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_sorting.cpp b/core/smn_sorting.cpp index 2e1bf330..7dcdb82b 100644 --- a/core/smn_sorting.cpp +++ b/core/smn_sorting.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_string.cpp b/core/smn_string.cpp index dae6b19f..65295536 100644 --- a/core/smn_string.cpp +++ b/core/smn_string.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_textparse.cpp b/core/smn_textparse.cpp index 78b26304..2a989ed4 100644 --- a/core/smn_textparse.cpp +++ b/core/smn_textparse.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_timers.cpp b/core/smn_timers.cpp index 362606e0..3a95c34f 100644 --- a/core/smn_timers.cpp +++ b/core/smn_timers.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_usermsgs.cpp b/core/smn_usermsgs.cpp index 0e68d395..b1206e53 100644 --- a/core/smn_usermsgs.cpp +++ b/core/smn_usermsgs.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_usermsgs.h b/core/smn_usermsgs.h index a4eb5fc8..bb16ab38 100644 --- a/core/smn_usermsgs.h +++ b/core/smn_usermsgs.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/smn_vector.cpp b/core/smn_vector.cpp index 96bf57b9..46158d7a 100644 --- a/core/smn_vector.cpp +++ b/core/smn_vector.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sourcemm_api.cpp b/core/sourcemm_api.cpp index d91168d8..263c5ff8 100644 --- a/core/sourcemm_api.cpp +++ b/core/sourcemm_api.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sourcemm_api.h b/core/sourcemm_api.h index 85b85817..2b31c851 100644 --- a/core/sourcemm_api.h +++ b/core/sourcemm_api.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index 06ba14d6..4aea3619 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/sourcemod.h b/core/sourcemod.h index cb4ff880..3948b44a 100644 --- a/core/sourcemod.h +++ b/core/sourcemod.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ExtensionSys.cpp b/core/systems/ExtensionSys.cpp index 8209b3ce..4d053496 100644 --- a/core/systems/ExtensionSys.cpp +++ b/core/systems/ExtensionSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ExtensionSys.h b/core/systems/ExtensionSys.h index dbba34e6..a3e1ddce 100644 --- a/core/systems/ExtensionSys.h +++ b/core/systems/ExtensionSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ForwardSys.cpp b/core/systems/ForwardSys.cpp index cf42fa79..d83b1040 100644 --- a/core/systems/ForwardSys.cpp +++ b/core/systems/ForwardSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ForwardSys.h b/core/systems/ForwardSys.h index 68b7d9fa..e3ff7b4d 100644 --- a/core/systems/ForwardSys.h +++ b/core/systems/ForwardSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/HandleSys.cpp b/core/systems/HandleSys.cpp index 951e0cb9..897a5ff9 100644 --- a/core/systems/HandleSys.cpp +++ b/core/systems/HandleSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/HandleSys.h b/core/systems/HandleSys.h index b76c1896..8fb0e879 100644 --- a/core/systems/HandleSys.h +++ b/core/systems/HandleSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/LibrarySys.cpp b/core/systems/LibrarySys.cpp index 15386387..641cc22f 100644 --- a/core/systems/LibrarySys.cpp +++ b/core/systems/LibrarySys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/LibrarySys.h b/core/systems/LibrarySys.h index cc7aa121..0a948b83 100644 --- a/core/systems/LibrarySys.h +++ b/core/systems/LibrarySys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/PluginInfoDatabase.cpp b/core/systems/PluginInfoDatabase.cpp index a8be1601..2ee18097 100644 --- a/core/systems/PluginInfoDatabase.cpp +++ b/core/systems/PluginInfoDatabase.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/PluginInfoDatabase.h b/core/systems/PluginInfoDatabase.h index 16ed542a..8d84be48 100644 --- a/core/systems/PluginInfoDatabase.h +++ b/core/systems/PluginInfoDatabase.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 06d6bb88..7b2dfcab 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index 6fa4b7e4..d7dc8e65 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ShareSys.cpp b/core/systems/ShareSys.cpp index 196c4eb0..213a4e2f 100644 --- a/core/systems/ShareSys.cpp +++ b/core/systems/ShareSys.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/systems/ShareSys.h b/core/systems/ShareSys.h index 998ec98a..b26b9ea2 100644 --- a/core/systems/ShareSys.h +++ b/core/systems/ShareSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/BaseWorker.cpp b/core/thread/BaseWorker.cpp index d0365f58..ef126e64 100644 --- a/core/thread/BaseWorker.cpp +++ b/core/thread/BaseWorker.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/BaseWorker.h b/core/thread/BaseWorker.h index 6173fa9f..38deaac9 100644 --- a/core/thread/BaseWorker.h +++ b/core/thread/BaseWorker.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/PosixThreads.cpp b/core/thread/PosixThreads.cpp index 02bbcb71..f0369a4c 100644 --- a/core/thread/PosixThreads.cpp +++ b/core/thread/PosixThreads.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/PosixThreads.h b/core/thread/PosixThreads.h index 90be641b..0a1d4cb1 100644 --- a/core/thread/PosixThreads.h +++ b/core/thread/PosixThreads.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/ThreadWorker.cpp b/core/thread/ThreadWorker.cpp index d6b8000e..5f4c969e 100644 --- a/core/thread/ThreadWorker.cpp +++ b/core/thread/ThreadWorker.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/ThreadWorker.h b/core/thread/ThreadWorker.h index 0101e2b3..93e7c434 100644 --- a/core/thread/ThreadWorker.h +++ b/core/thread/ThreadWorker.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/WinThreads.cpp b/core/thread/WinThreads.cpp index a62c8609..cf7780d7 100644 --- a/core/thread/WinThreads.cpp +++ b/core/thread/WinThreads.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/thread/WinThreads.h b/core/thread/WinThreads.h index 511be4b6..059a9209 100644 --- a/core/thread/WinThreads.h +++ b/core/thread/WinThreads.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/version.rc b/core/version.rc index 2a9e0860..0e0cf070 100644 --- a/core/version.rc +++ b/core/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod Core" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "sourcemod" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "sourcemod_mm.dll" VALUE "ProductName", "SourceMod" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/core/vm/sp_vm_basecontext.cpp b/core/vm/sp_vm_basecontext.cpp index d851a714..b963d523 100644 --- a/core/vm/sp_vm_basecontext.cpp +++ b/core/vm/sp_vm_basecontext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/vm/sp_vm_basecontext.h b/core/vm/sp_vm_basecontext.h index 9df690b2..4b58937e 100644 --- a/core/vm/sp_vm_basecontext.h +++ b/core/vm/sp_vm_basecontext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/vm/sp_vm_engine.cpp b/core/vm/sp_vm_engine.cpp index 136172aa..6a28014b 100644 --- a/core/vm/sp_vm_engine.cpp +++ b/core/vm/sp_vm_engine.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/vm/sp_vm_engine.h b/core/vm/sp_vm_engine.h index a14b8b45..c50f8267 100644 --- a/core/vm/sp_vm_engine.h +++ b/core/vm/sp_vm_engine.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/vm/sp_vm_function.cpp b/core/vm/sp_vm_function.cpp index 4a008120..cfc080ab 100644 --- a/core/vm/sp_vm_function.cpp +++ b/core/vm/sp_vm_function.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/core/vm/sp_vm_function.h b/core/vm/sp_vm_function.h index e19417b0..275143c9 100644 --- a/core/vm/sp_vm_function.h +++ b/core/vm/sp_vm_function.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/batsupport/BATInterface.h b/extensions/batsupport/BATInterface.h index 7640f52b..f89e1de5 100644 --- a/extensions/batsupport/BATInterface.h +++ b/extensions/batsupport/BATInterface.h @@ -1,5 +1,5 @@ /* ======== Basic Admin tool ======== -* Copyright (C) 2004-2006 Erling K. S�terdal +* Copyright (C) 2004-2008 Erling K. S�terdal * No warranties of any kind * * License: zlib/libpng diff --git a/extensions/batsupport/Makefile b/extensions/batsupport/Makefile index 8ea51205..bfebba58 100644 --- a/extensions/batsupport/Makefile +++ b/extensions/batsupport/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/batsupport/extension.cpp b/extensions/batsupport/extension.cpp index 1a691c78..10a3f8f4 100644 --- a/extensions/batsupport/extension.cpp +++ b/extensions/batsupport/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BAT Support Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/batsupport/extension.h b/extensions/batsupport/extension.h index d2ef1ae9..4e4015e2 100644 --- a/extensions/batsupport/extension.h +++ b/extensions/batsupport/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BAT Support Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/batsupport/sdk/smsdk_config.h b/extensions/batsupport/sdk/smsdk_config.h index 18ffb732..d34dc0db 100644 --- a/extensions/batsupport/sdk/smsdk_config.h +++ b/extensions/batsupport/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BAT Support Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/batsupport/sdk/smsdk_ext.cpp b/extensions/batsupport/sdk/smsdk_ext.cpp index ef7cd82f..6e4c84e6 100644 --- a/extensions/batsupport/sdk/smsdk_ext.cpp +++ b/extensions/batsupport/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/batsupport/sdk/smsdk_ext.h b/extensions/batsupport/sdk/smsdk_ext.h index 1be1ce8a..f7b5a066 100644 --- a/extensions/batsupport/sdk/smsdk_ext.h +++ b/extensions/batsupport/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/CallMaker.cpp b/extensions/bintools/CallMaker.cpp index 9ee6aad4..2084a478 100644 --- a/extensions/bintools/CallMaker.cpp +++ b/extensions/bintools/CallMaker.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/CallMaker.h b/extensions/bintools/CallMaker.h index 42da57b9..2ed0eeeb 100644 --- a/extensions/bintools/CallMaker.h +++ b/extensions/bintools/CallMaker.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/CallWrapper.cpp b/extensions/bintools/CallWrapper.cpp index 41392e2b..5f87de5d 100644 --- a/extensions/bintools/CallWrapper.cpp +++ b/extensions/bintools/CallWrapper.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/CallWrapper.h b/extensions/bintools/CallWrapper.h index c7a18cdd..1ca78bc4 100644 --- a/extensions/bintools/CallWrapper.h +++ b/extensions/bintools/CallWrapper.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/Makefile b/extensions/bintools/Makefile index fd8c1f79..eb85ca4f 100644 --- a/extensions/bintools/Makefile +++ b/extensions/bintools/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/bintools/extension.cpp b/extensions/bintools/extension.cpp index be88bb09..b62d0287 100644 --- a/extensions/bintools/extension.cpp +++ b/extensions/bintools/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/extension.h b/extensions/bintools/extension.h index 42534511..2bdbdb0c 100644 --- a/extensions/bintools/extension.h +++ b/extensions/bintools/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/jit_call.cpp b/extensions/bintools/jit_call.cpp index 7443260e..ea0755c4 100644 --- a/extensions/bintools/jit_call.cpp +++ b/extensions/bintools/jit_call.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/jit_call.h b/extensions/bintools/jit_call.h index d12c59f0..39d46412 100644 --- a/extensions/bintools/jit_call.h +++ b/extensions/bintools/jit_call.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/sdk/smsdk_config.h b/extensions/bintools/sdk/smsdk_config.h index dcb85e6b..f706d6dd 100644 --- a/extensions/bintools/sdk/smsdk_config.h +++ b/extensions/bintools/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/sdk/smsdk_ext.cpp b/extensions/bintools/sdk/smsdk_ext.cpp index a4b80a10..db14af69 100644 --- a/extensions/bintools/sdk/smsdk_ext.cpp +++ b/extensions/bintools/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/sdk/smsdk_ext.h b/extensions/bintools/sdk/smsdk_ext.h index 4324a11b..d77d84db 100644 --- a/extensions/bintools/sdk/smsdk_ext.h +++ b/extensions/bintools/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/svn_version.h b/extensions/bintools/svn_version.h index 5b19358a..5ae76abf 100644 --- a/extensions/bintools/svn_version.h +++ b/extensions/bintools/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/svn_version.tpl b/extensions/bintools/svn_version.tpl index 388fafd4..158d9bf4 100644 --- a/extensions/bintools/svn_version.tpl +++ b/extensions/bintools/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/bintools/version.rc b/extensions/bintools/version.rc index 8a357fe5..3d0e4184 100644 --- a/extensions/bintools/version.rc +++ b/extensions/bintools/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod BinTools Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod BinTools Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "bintools.ext.dll" VALUE "ProductName", "SourceMod BinTools Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/cstrike/RegNatives.cpp b/extensions/cstrike/RegNatives.cpp index 2f001b78..e663a186 100644 --- a/extensions/cstrike/RegNatives.cpp +++ b/extensions/cstrike/RegNatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/RegNatives.h b/extensions/cstrike/RegNatives.h index c92e5072..f9c22f82 100644 --- a/extensions/cstrike/RegNatives.h +++ b/extensions/cstrike/RegNatives.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/extension.cpp b/extensions/cstrike/extension.cpp index b35b98ba..4caf629c 100644 --- a/extensions/cstrike/extension.cpp +++ b/extensions/cstrike/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/extension.h b/extensions/cstrike/extension.h index dc77a009..20a866a1 100644 --- a/extensions/cstrike/extension.h +++ b/extensions/cstrike/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/natives.cpp b/extensions/cstrike/natives.cpp index b97f070e..29c81aea 100644 --- a/extensions/cstrike/natives.cpp +++ b/extensions/cstrike/natives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/sdk/smsdk_config.h b/extensions/cstrike/sdk/smsdk_config.h index a070e6b3..c3b6081a 100644 --- a/extensions/cstrike/sdk/smsdk_config.h +++ b/extensions/cstrike/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/sdk/smsdk_ext.cpp b/extensions/cstrike/sdk/smsdk_ext.cpp index f5e6f3fc..37733333 100644 --- a/extensions/cstrike/sdk/smsdk_ext.cpp +++ b/extensions/cstrike/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/sdk/smsdk_ext.h b/extensions/cstrike/sdk/smsdk_ext.h index c137616b..3d5a229d 100644 --- a/extensions/cstrike/sdk/smsdk_ext.h +++ b/extensions/cstrike/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/svn_version.h b/extensions/cstrike/svn_version.h index d39c1aa0..403601cf 100644 --- a/extensions/cstrike/svn_version.h +++ b/extensions/cstrike/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/svn_version.tpl b/extensions/cstrike/svn_version.tpl index ad458193..08a4c47d 100644 --- a/extensions/cstrike/svn_version.tpl +++ b/extensions/cstrike/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/timeleft.cpp b/extensions/cstrike/timeleft.cpp index c465ca76..2637c05c 100644 --- a/extensions/cstrike/timeleft.cpp +++ b/extensions/cstrike/timeleft.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/timeleft.h b/extensions/cstrike/timeleft.h index 0b7c4799..bb44b91b 100644 --- a/extensions/cstrike/timeleft.h +++ b/extensions/cstrike/timeleft.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/cstrike/version.rc b/extensions/cstrike/version.rc index 37d14dad..2abaa001 100644 --- a/extensions/cstrike/version.rc +++ b/extensions/cstrike/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod CS:S Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod CS:S Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "game.cstrike.ext.dll" VALUE "ProductName", "SourceMod CS:S Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/geoip/Makefile b/extensions/geoip/Makefile index 29e872f7..db4062f6 100644 --- a/extensions/geoip/Makefile +++ b/extensions/geoip/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/geoip/extension.cpp b/extensions/geoip/extension.cpp index 191470b0..e65485a7 100644 --- a/extensions/geoip/extension.cpp +++ b/extensions/geoip/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod GeoIP Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/extension.h b/extensions/geoip/extension.h index 48a03117..ff978e53 100644 --- a/extensions/geoip/extension.h +++ b/extensions/geoip/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod GeoIP Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/sdk/smsdk_config.h b/extensions/geoip/sdk/smsdk_config.h index 7faf7f58..dbe2ad2c 100644 --- a/extensions/geoip/sdk/smsdk_config.h +++ b/extensions/geoip/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod GeoIP Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/sdk/smsdk_ext.cpp b/extensions/geoip/sdk/smsdk_ext.cpp index a4b80a10..db14af69 100644 --- a/extensions/geoip/sdk/smsdk_ext.cpp +++ b/extensions/geoip/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/sdk/smsdk_ext.h b/extensions/geoip/sdk/smsdk_ext.h index 4324a11b..d77d84db 100644 --- a/extensions/geoip/sdk/smsdk_ext.h +++ b/extensions/geoip/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/svn_version.h b/extensions/geoip/svn_version.h index be31e51c..3bd07604 100644 --- a/extensions/geoip/svn_version.h +++ b/extensions/geoip/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod GeoIP Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/svn_version.tpl b/extensions/geoip/svn_version.tpl index df71de4f..5edca91f 100644 --- a/extensions/geoip/svn_version.tpl +++ b/extensions/geoip/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod GeoIP Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/geoip/version.rc b/extensions/geoip/version.rc index d89d3701..f047d0e0 100644 --- a/extensions/geoip/version.rc +++ b/extensions/geoip/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod GeoIP Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod GeoIP Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "geoip.ext.dll" VALUE "ProductName", "SourceMod GeoIP Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/mysql/Makefile b/extensions/mysql/Makefile index 3fb9a0c3..be18bc06 100644 --- a/extensions/mysql/Makefile +++ b/extensions/mysql/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/mysql/extension.cpp b/extensions/mysql/extension.cpp index f6238abb..5607ef12 100644 --- a/extensions/mysql/extension.cpp +++ b/extensions/mysql/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/extension.h b/extensions/mysql/extension.h index b75849b2..489c5f68 100644 --- a/extensions/mysql/extension.h +++ b/extensions/mysql/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyBasicResults.cpp b/extensions/mysql/mysql/MyBasicResults.cpp index 85a7aedc..edd03f1b 100644 --- a/extensions/mysql/mysql/MyBasicResults.cpp +++ b/extensions/mysql/mysql/MyBasicResults.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyBasicResults.h b/extensions/mysql/mysql/MyBasicResults.h index 80650163..a5173ade 100644 --- a/extensions/mysql/mysql/MyBasicResults.h +++ b/extensions/mysql/mysql/MyBasicResults.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyBoundResults.cpp b/extensions/mysql/mysql/MyBoundResults.cpp index 2c7b4db1..5252f169 100644 --- a/extensions/mysql/mysql/MyBoundResults.cpp +++ b/extensions/mysql/mysql/MyBoundResults.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyBoundResults.h b/extensions/mysql/mysql/MyBoundResults.h index 068dd797..fede5ac9 100644 --- a/extensions/mysql/mysql/MyBoundResults.h +++ b/extensions/mysql/mysql/MyBoundResults.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyDatabase.cpp b/extensions/mysql/mysql/MyDatabase.cpp index b9f797a0..5b15d89d 100644 --- a/extensions/mysql/mysql/MyDatabase.cpp +++ b/extensions/mysql/mysql/MyDatabase.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyDatabase.h b/extensions/mysql/mysql/MyDatabase.h index 14ba739e..48b71647 100644 --- a/extensions/mysql/mysql/MyDatabase.h +++ b/extensions/mysql/mysql/MyDatabase.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyDriver.cpp b/extensions/mysql/mysql/MyDriver.cpp index a39e12ec..54e67c0a 100644 --- a/extensions/mysql/mysql/MyDriver.cpp +++ b/extensions/mysql/mysql/MyDriver.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyDriver.h b/extensions/mysql/mysql/MyDriver.h index 17dc04aa..fd78ff33 100644 --- a/extensions/mysql/mysql/MyDriver.h +++ b/extensions/mysql/mysql/MyDriver.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyStatement.cpp b/extensions/mysql/mysql/MyStatement.cpp index 60aee85e..c643af32 100644 --- a/extensions/mysql/mysql/MyStatement.cpp +++ b/extensions/mysql/mysql/MyStatement.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/mysql/MyStatement.h b/extensions/mysql/mysql/MyStatement.h index 6323f333..5cad0af6 100644 --- a/extensions/mysql/mysql/MyStatement.h +++ b/extensions/mysql/mysql/MyStatement.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/sdk/smsdk_config.h b/extensions/mysql/sdk/smsdk_config.h index e6603b41..d5bb8c44 100644 --- a/extensions/mysql/sdk/smsdk_config.h +++ b/extensions/mysql/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/sdk/smsdk_ext.cpp b/extensions/mysql/sdk/smsdk_ext.cpp index a4b80a10..db14af69 100644 --- a/extensions/mysql/sdk/smsdk_ext.cpp +++ b/extensions/mysql/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/sdk/smsdk_ext.h b/extensions/mysql/sdk/smsdk_ext.h index 4324a11b..d77d84db 100644 --- a/extensions/mysql/sdk/smsdk_ext.h +++ b/extensions/mysql/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/svn_version.h b/extensions/mysql/svn_version.h index 9cb9b6ea..1cf9eecc 100644 --- a/extensions/mysql/svn_version.h +++ b/extensions/mysql/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/svn_version.tpl b/extensions/mysql/svn_version.tpl index ae804164..0f989691 100644 --- a/extensions/mysql/svn_version.tpl +++ b/extensions/mysql/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod MySQL Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/mysql/version.rc b/extensions/mysql/version.rc index 370f1757..500c847f 100644 --- a/extensions/mysql/version.rc +++ b/extensions/mysql/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod MySQL Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod MySQL Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "dbi.mysql.ext.dll" VALUE "ProductName", "SourceMod MySQL Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/regex/Makefile.ep1 b/extensions/regex/Makefile.ep1 index 989ee7d4..f580ca04 100644 --- a/extensions/regex/Makefile.ep1 +++ b/extensions/regex/Makefile.ep1 @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.4.2, Episode 1 of the HL2SDK. diff --git a/extensions/regex/Makefile.ep2 b/extensions/regex/Makefile.ep2 index 3582838c..4bd0adf5 100644 --- a/extensions/regex/Makefile.ep2 +++ b/extensions/regex/Makefile.ep2 @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.6.0, Episode 2 of the HL2SDK. diff --git a/extensions/regex/Makefile.orig b/extensions/regex/Makefile.orig index 3dc19ef8..e6c8b5e8 100644 --- a/extensions/regex/Makefile.orig +++ b/extensions/regex/Makefile.orig @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.6.0, Episode 1 of the HL2SDK. diff --git a/extensions/regex/extension.cpp b/extensions/regex/extension.cpp index e3519172..5f86d564 100644 --- a/extensions/regex/extension.cpp +++ b/extensions/regex/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/regex/extension.h b/extensions/regex/extension.h index 0c4beff2..25b0785a 100644 --- a/extensions/regex/extension.h +++ b/extensions/regex/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/regex/sdk/smsdk_config.h b/extensions/regex/sdk/smsdk_config.h index 0889a8f5..b9aaab0c 100644 --- a/extensions/regex/sdk/smsdk_config.h +++ b/extensions/regex/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/regex/sdk/smsdk_ext.cpp b/extensions/regex/sdk/smsdk_ext.cpp index 0c728f00..bf027ac5 100644 --- a/extensions/regex/sdk/smsdk_ext.cpp +++ b/extensions/regex/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/regex/sdk/smsdk_ext.h b/extensions/regex/sdk/smsdk_ext.h index 4702f2a2..0ee0dfa2 100644 --- a/extensions/regex/sdk/smsdk_ext.h +++ b/extensions/regex/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/CellRecipientFilter.h b/extensions/sdktools/CellRecipientFilter.h index 68c2e333..e48ed7d1 100644 --- a/extensions/sdktools/CellRecipientFilter.h +++ b/extensions/sdktools/CellRecipientFilter.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/Makefile b/extensions/sdktools/Makefile index d02951cf..1988e1e8 100644 --- a/extensions/sdktools/Makefile +++ b/extensions/sdktools/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson HL2SDK_ORIG = ../../../hl2sdk diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index c01ff74a..865cd8ae 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/extension.h b/extensions/sdktools/extension.h index c13343a9..700b73f3 100644 --- a/extensions/sdktools/extension.h +++ b/extensions/sdktools/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/inputnatives.cpp b/extensions/sdktools/inputnatives.cpp index 86435fd1..b8b56620 100644 --- a/extensions/sdktools/inputnatives.cpp +++ b/extensions/sdktools/inputnatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/sdk/smsdk_config.h b/extensions/sdktools/sdk/smsdk_config.h index d9a07d6b..3f41c1fe 100644 --- a/extensions/sdktools/sdk/smsdk_config.h +++ b/extensions/sdktools/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/sdk/smsdk_ext.cpp b/extensions/sdktools/sdk/smsdk_ext.cpp index 40bdc775..a823d1b2 100644 --- a/extensions/sdktools/sdk/smsdk_ext.cpp +++ b/extensions/sdktools/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/sdk/smsdk_ext.h b/extensions/sdktools/sdk/smsdk_ext.h index fdda6ad3..aec87f98 100644 --- a/extensions/sdktools/sdk/smsdk_ext.h +++ b/extensions/sdktools/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/svn_version.h b/extensions/sdktools/svn_version.h index 2f1f44c0..b39a767b 100644 --- a/extensions/sdktools/svn_version.h +++ b/extensions/sdktools/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/svn_version.tpl b/extensions/sdktools/svn_version.tpl index ad458193..08a4c47d 100644 --- a/extensions/sdktools/svn_version.tpl +++ b/extensions/sdktools/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/teamnatives.cpp b/extensions/sdktools/teamnatives.cpp index 3eac3c68..6ebb67d8 100644 --- a/extensions/sdktools/teamnatives.cpp +++ b/extensions/sdktools/teamnatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/tempents.cpp b/extensions/sdktools/tempents.cpp index 9660affa..407f709a 100644 --- a/extensions/sdktools/tempents.cpp +++ b/extensions/sdktools/tempents.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/tempents.h b/extensions/sdktools/tempents.h index 9e3ff97a..366ccc6a 100644 --- a/extensions/sdktools/tempents.h +++ b/extensions/sdktools/tempents.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/tenatives.cpp b/extensions/sdktools/tenatives.cpp index 7ab784a4..4d0b69f3 100644 --- a/extensions/sdktools/tenatives.cpp +++ b/extensions/sdktools/tenatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/trnatives.cpp b/extensions/sdktools/trnatives.cpp index 5f19a72a..f748ec72 100644 --- a/extensions/sdktools/trnatives.cpp +++ b/extensions/sdktools/trnatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/util.h b/extensions/sdktools/util.h index 2aa42160..b304923a 100644 --- a/extensions/sdktools/util.h +++ b/extensions/sdktools/util.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vcallbuilder.cpp b/extensions/sdktools/vcallbuilder.cpp index 54b6cb05..b6eca41d 100644 --- a/extensions/sdktools/vcallbuilder.cpp +++ b/extensions/sdktools/vcallbuilder.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vcallbuilder.h b/extensions/sdktools/vcallbuilder.h index ccd8816f..3237fe5d 100644 --- a/extensions/sdktools/vcallbuilder.h +++ b/extensions/sdktools/vcallbuilder.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vcaller.cpp b/extensions/sdktools/vcaller.cpp index 75b89b82..6ea1f131 100644 --- a/extensions/sdktools/vcaller.cpp +++ b/extensions/sdktools/vcaller.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vdecoder.cpp b/extensions/sdktools/vdecoder.cpp index 12bfaabb..03f0dcff 100644 --- a/extensions/sdktools/vdecoder.cpp +++ b/extensions/sdktools/vdecoder.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vdecoder.h b/extensions/sdktools/vdecoder.h index b8f37955..f397d7bb 100644 --- a/extensions/sdktools/vdecoder.h +++ b/extensions/sdktools/vdecoder.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/version.rc b/extensions/sdktools/version.rc index 0ec90dc4..546028f6 100644 --- a/extensions/sdktools/version.rc +++ b/extensions/sdktools/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod SDKTools Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod SDKTools Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "sdktools.ext.dll" VALUE "ProductName", "SourceMod SDKTools Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/sdktools/vglobals.cpp b/extensions/sdktools/vglobals.cpp index 0925dbec..ea569c20 100644 --- a/extensions/sdktools/vglobals.cpp +++ b/extensions/sdktools/vglobals.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vglobals.h b/extensions/sdktools/vglobals.h index 5e9a65ee..d3783089 100644 --- a/extensions/sdktools/vglobals.h +++ b/extensions/sdktools/vglobals.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vhelpers.cpp b/extensions/sdktools/vhelpers.cpp index 49a83b3d..adf24043 100644 --- a/extensions/sdktools/vhelpers.cpp +++ b/extensions/sdktools/vhelpers.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vhelpers.h b/extensions/sdktools/vhelpers.h index 3ba1b116..46cbdb81 100644 --- a/extensions/sdktools/vhelpers.h +++ b/extensions/sdktools/vhelpers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index d905fadd..d04aaacf 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vnatives.h b/extensions/sdktools/vnatives.h index 0dd2375a..74612360 100644 --- a/extensions/sdktools/vnatives.h +++ b/extensions/sdktools/vnatives.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/voice.cpp b/extensions/sdktools/voice.cpp index 196745bc..d9b179f4 100644 --- a/extensions/sdktools/voice.cpp +++ b/extensions/sdktools/voice.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vsound.cpp b/extensions/sdktools/vsound.cpp index 75fcb166..078f39fb 100644 --- a/extensions/sdktools/vsound.cpp +++ b/extensions/sdktools/vsound.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vsound.h b/extensions/sdktools/vsound.h index 040cbbe6..0536b558 100644 --- a/extensions/sdktools/vsound.h +++ b/extensions/sdktools/vsound.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension -* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sdktools/vstringtable.cpp b/extensions/sdktools/vstringtable.cpp index 22561340..522e4e47 100644 --- a/extensions/sdktools/vstringtable.cpp +++ b/extensions/sdktools/vstringtable.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/Makefile b/extensions/sqlite/Makefile index ff7ed908..453d49bd 100644 --- a/extensions/sqlite/Makefile +++ b/extensions/sqlite/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/sqlite/driver/SqDatabase.cpp b/extensions/sqlite/driver/SqDatabase.cpp index a008aca1..07724238 100644 --- a/extensions/sqlite/driver/SqDatabase.cpp +++ b/extensions/sqlite/driver/SqDatabase.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqDatabase.h b/extensions/sqlite/driver/SqDatabase.h index 6044a3f0..591bdd9d 100644 --- a/extensions/sqlite/driver/SqDatabase.h +++ b/extensions/sqlite/driver/SqDatabase.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqDriver.cpp b/extensions/sqlite/driver/SqDriver.cpp index 67b6fa6d..397fed5b 100644 --- a/extensions/sqlite/driver/SqDriver.cpp +++ b/extensions/sqlite/driver/SqDriver.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqDriver.h b/extensions/sqlite/driver/SqDriver.h index 2cd429e6..f73d1092 100644 --- a/extensions/sqlite/driver/SqDriver.h +++ b/extensions/sqlite/driver/SqDriver.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqQuery.cpp b/extensions/sqlite/driver/SqQuery.cpp index fce5ae07..b1753e81 100644 --- a/extensions/sqlite/driver/SqQuery.cpp +++ b/extensions/sqlite/driver/SqQuery.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqQuery.h b/extensions/sqlite/driver/SqQuery.h index 92392319..16bef53f 100644 --- a/extensions/sqlite/driver/SqQuery.h +++ b/extensions/sqlite/driver/SqQuery.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqResults.cpp b/extensions/sqlite/driver/SqResults.cpp index 8dae5470..0809ab6a 100644 --- a/extensions/sqlite/driver/SqResults.cpp +++ b/extensions/sqlite/driver/SqResults.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/driver/SqResults.h b/extensions/sqlite/driver/SqResults.h index 2a28c382..afc366a2 100644 --- a/extensions/sqlite/driver/SqResults.h +++ b/extensions/sqlite/driver/SqResults.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/extension.cpp b/extensions/sqlite/extension.cpp index 8f31c951..960f86bf 100644 --- a/extensions/sqlite/extension.cpp +++ b/extensions/sqlite/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/extension.h b/extensions/sqlite/extension.h index 053cf737..c6f89db9 100644 --- a/extensions/sqlite/extension.h +++ b/extensions/sqlite/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/sdk/smsdk_config.h b/extensions/sqlite/sdk/smsdk_config.h index 955f7c57..a8823b81 100644 --- a/extensions/sqlite/sdk/smsdk_config.h +++ b/extensions/sqlite/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/sdk/smsdk_ext.cpp b/extensions/sqlite/sdk/smsdk_ext.cpp index 8d55b217..c504da48 100644 --- a/extensions/sqlite/sdk/smsdk_ext.cpp +++ b/extensions/sqlite/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/sdk/smsdk_ext.h b/extensions/sqlite/sdk/smsdk_ext.h index 4324a11b..d77d84db 100644 --- a/extensions/sqlite/sdk/smsdk_ext.h +++ b/extensions/sqlite/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/sm_memtable.cpp b/extensions/sqlite/sm_memtable.cpp index 95cdebda..8f18b136 100644 --- a/extensions/sqlite/sm_memtable.cpp +++ b/extensions/sqlite/sm_memtable.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/sm_memtable.h b/extensions/sqlite/sm_memtable.h index 744eb4b6..53ba5ff8 100644 --- a/extensions/sqlite/sm_memtable.h +++ b/extensions/sqlite/sm_memtable.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/svn_version.h b/extensions/sqlite/svn_version.h index dd2fefef..4df967d2 100644 --- a/extensions/sqlite/svn_version.h +++ b/extensions/sqlite/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/svn_version.tpl b/extensions/sqlite/svn_version.tpl index 133fbb9a..2473a102 100644 --- a/extensions/sqlite/svn_version.tpl +++ b/extensions/sqlite/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/sqlite/version.rc b/extensions/sqlite/version.rc index 718aa476..5fc38de7 100644 --- a/extensions/sqlite/version.rc +++ b/extensions/sqlite/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod SQLite Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod SQLite Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "dbi.sqlite.ext.dll" VALUE "ProductName", "SourceMod SQLite Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/tf2/Makefile.ep1 b/extensions/tf2/Makefile.ep1 index 87f0423f..ab43177b 100644 --- a/extensions/tf2/Makefile.ep1 +++ b/extensions/tf2/Makefile.ep1 @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../smsdk diff --git a/extensions/tf2/Makefile.ep2 b/extensions/tf2/Makefile.ep2 index ff407f70..7146c611 100644 --- a/extensions/tf2/Makefile.ep2 +++ b/extensions/tf2/Makefile.ep2 @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../smsdk diff --git a/extensions/tf2/Makefile.orig b/extensions/tf2/Makefile.orig index f31cf6f2..fcb92145 100644 --- a/extensions/tf2/Makefile.orig +++ b/extensions/tf2/Makefile.orig @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../smsdk diff --git a/extensions/tf2/RegNatives.cpp b/extensions/tf2/RegNatives.cpp index 2f001b78..e663a186 100644 --- a/extensions/tf2/RegNatives.cpp +++ b/extensions/tf2/RegNatives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/RegNatives.h b/extensions/tf2/RegNatives.h index 1913530f..9ffe0669 100644 --- a/extensions/tf2/RegNatives.h +++ b/extensions/tf2/RegNatives.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/extension.cpp b/extensions/tf2/extension.cpp index ae67d077..c739a8f2 100644 --- a/extensions/tf2/extension.cpp +++ b/extensions/tf2/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/extension.h b/extensions/tf2/extension.h index 91090fd9..6435cf38 100644 --- a/extensions/tf2/extension.h +++ b/extensions/tf2/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/natives.cpp b/extensions/tf2/natives.cpp index 7d6887f0..7161c820 100644 --- a/extensions/tf2/natives.cpp +++ b/extensions/tf2/natives.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/sdk/smsdk_config.h b/extensions/tf2/sdk/smsdk_config.h index 09397393..b503ca4b 100644 --- a/extensions/tf2/sdk/smsdk_config.h +++ b/extensions/tf2/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Counter-Strike:Source Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/sdk/smsdk_ext.cpp b/extensions/tf2/sdk/smsdk_ext.cpp index f5e6f3fc..37733333 100644 --- a/extensions/tf2/sdk/smsdk_ext.cpp +++ b/extensions/tf2/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/sdk/smsdk_ext.h b/extensions/tf2/sdk/smsdk_ext.h index c137616b..3d5a229d 100644 --- a/extensions/tf2/sdk/smsdk_ext.h +++ b/extensions/tf2/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/svn_version.h b/extensions/tf2/svn_version.h index 8873263e..5d888fd0 100644 --- a/extensions/tf2/svn_version.h +++ b/extensions/tf2/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/svn_version.tpl b/extensions/tf2/svn_version.tpl index ad458193..08a4c47d 100644 --- a/extensions/tf2/svn_version.tpl +++ b/extensions/tf2/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SDKTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/tf2/version.rc b/extensions/tf2/version.rc index 37d14dad..2abaa001 100644 --- a/extensions/tf2/version.rc +++ b/extensions/tf2/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod CS:S Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod CS:S Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "game.cstrike.ext.dll" VALUE "ProductName", "SourceMod CS:S Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/extensions/topmenus/Makefile b/extensions/topmenus/Makefile index 1fe7e23f..702700e5 100644 --- a/extensions/topmenus/Makefile +++ b/extensions/topmenus/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/extensions/topmenus/TopMenu.cpp b/extensions/topmenus/TopMenu.cpp index 61b14620..a342e870 100644 --- a/extensions/topmenus/TopMenu.cpp +++ b/extensions/topmenus/TopMenu.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/TopMenu.h b/extensions/topmenus/TopMenu.h index 2747c778..13631c74 100644 --- a/extensions/topmenus/TopMenu.h +++ b/extensions/topmenus/TopMenu.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/TopMenuManager.cpp b/extensions/topmenus/TopMenuManager.cpp index 4652f781..0cec8baf 100644 --- a/extensions/topmenus/TopMenuManager.cpp +++ b/extensions/topmenus/TopMenuManager.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/TopMenuManager.h b/extensions/topmenus/TopMenuManager.h index dc1efed6..18a2c2c4 100644 --- a/extensions/topmenus/TopMenuManager.h +++ b/extensions/topmenus/TopMenuManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/extension.cpp b/extensions/topmenus/extension.cpp index c7761293..8741dbf9 100644 --- a/extensions/topmenus/extension.cpp +++ b/extensions/topmenus/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/extension.h b/extensions/topmenus/extension.h index 11730719..7efb0419 100644 --- a/extensions/topmenus/extension.h +++ b/extensions/topmenus/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/sdk/sm_memtable.cpp b/extensions/topmenus/sdk/sm_memtable.cpp index 95cdebda..8f18b136 100644 --- a/extensions/topmenus/sdk/sm_memtable.cpp +++ b/extensions/topmenus/sdk/sm_memtable.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/sdk/sm_memtable.h b/extensions/topmenus/sdk/sm_memtable.h index 7c7f00a2..e4a42fd3 100644 --- a/extensions/topmenus/sdk/sm_memtable.h +++ b/extensions/topmenus/sdk/sm_memtable.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/sdk/smsdk_config.h b/extensions/topmenus/sdk/smsdk_config.h index 3da0e133..029e786f 100644 --- a/extensions/topmenus/sdk/smsdk_config.h +++ b/extensions/topmenus/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/sdk/smsdk_ext.cpp b/extensions/topmenus/sdk/smsdk_ext.cpp index 618ce3b8..852361b1 100644 --- a/extensions/topmenus/sdk/smsdk_ext.cpp +++ b/extensions/topmenus/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/sdk/smsdk_ext.h b/extensions/topmenus/sdk/smsdk_ext.h index b37ce03f..81e182d2 100644 --- a/extensions/topmenus/sdk/smsdk_ext.h +++ b/extensions/topmenus/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/smn_topmenus.cpp b/extensions/topmenus/smn_topmenus.cpp index cb68c592..0457afdc 100644 --- a/extensions/topmenus/smn_topmenus.cpp +++ b/extensions/topmenus/smn_topmenus.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/smn_topmenus.h b/extensions/topmenus/smn_topmenus.h index cda80fc6..dd216b3c 100644 --- a/extensions/topmenus/smn_topmenus.h +++ b/extensions/topmenus/smn_topmenus.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/svn_version.h b/extensions/topmenus/svn_version.h index 8b5468a4..6dba6a55 100644 --- a/extensions/topmenus/svn_version.h +++ b/extensions/topmenus/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/svn_version.tpl b/extensions/topmenus/svn_version.tpl index 133fbb9a..2473a102 100644 --- a/extensions/topmenus/svn_version.tpl +++ b/extensions/topmenus/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod SQLite Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/extensions/topmenus/version.rc b/extensions/topmenus/version.rc index 03c7c970..897ab627 100644 --- a/extensions/topmenus/version.rc +++ b/extensions/topmenus/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod TopMenus Extension" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "SourceMod TopMenus Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "topmenus.ext.dll" VALUE "ProductName", "SourceMod TopMenus Extension" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/loader/Makefile b/loader/Makefile index a1fe7f02..06645536 100644 --- a/loader/Makefile +++ b/loader/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # do not need to be built against HL2SDK, and do not require diff --git a/loader/loader.cpp b/loader/loader.cpp index 043e7d22..bb5f5ee9 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/loader/svn_version.h b/loader/svn_version.h index 58fdccc2..91f34709 100644 --- a/loader/svn_version.h +++ b/loader/svn_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/loader/svn_version.tpl b/loader/svn_version.tpl index 611663dc..c9d0c6a3 100644 --- a/loader/svn_version.tpl +++ b/loader/svn_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/loader/version.rc b/loader/version.rc index 946552e0..ebd54169 100644 --- a/loader/version.rc +++ b/loader/version.rc @@ -49,7 +49,7 @@ BEGIN VALUE "FileDescription", "SourceMod Loader" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "sourcemod" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "sourcemod_mm.dll" VALUE "ProductName", "SourceMod Loader" VALUE "ProductVersion", SVN_FULL_VERSION diff --git a/plugins/admin-flatfile/admin-flatfile.sp b/plugins/admin-flatfile/admin-flatfile.sp index 2cc9bc0d..250ebb24 100644 --- a/plugins/admin-flatfile/admin-flatfile.sp +++ b/plugins/admin-flatfile/admin-flatfile.sp @@ -4,7 +4,7 @@ * SourceMod Admin File Reader Plugin * Manages the standard flat files for admins. This is the file to compile. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-flatfile/admin-groups.sp b/plugins/admin-flatfile/admin-groups.sp index 4824774e..3ed5343f 100644 --- a/plugins/admin-flatfile/admin-groups.sp +++ b/plugins/admin-flatfile/admin-groups.sp @@ -4,7 +4,7 @@ * SourceMod Admin File Reader Plugin * Reads the admin_groups.cfg file. Do not compile this directly. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-flatfile/admin-overrides.sp b/plugins/admin-flatfile/admin-overrides.sp index 3ff926d5..a8adbdc1 100644 --- a/plugins/admin-flatfile/admin-overrides.sp +++ b/plugins/admin-flatfile/admin-overrides.sp @@ -5,7 +5,7 @@ * Reads overrides from the admin_levels.cfg file. Do not compile * this directly. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-flatfile/admin-simple.sp b/plugins/admin-flatfile/admin-simple.sp index 58b94858..9e8c8500 100644 --- a/plugins/admin-flatfile/admin-simple.sp +++ b/plugins/admin-flatfile/admin-simple.sp @@ -4,7 +4,7 @@ * SourceMod Admin File Reader Plugin * Reads the admins.cfg file. Do not compile this directly. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-flatfile/admin-users.sp b/plugins/admin-flatfile/admin-users.sp index 1549b3ef..d0d090aa 100644 --- a/plugins/admin-flatfile/admin-users.sp +++ b/plugins/admin-flatfile/admin-users.sp @@ -4,7 +4,7 @@ * SourceMod Admin File Reader Plugin * Reads the admins.cfg file. Do not compile this directly. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-sql-prefetch.sp b/plugins/admin-sql-prefetch.sp index 502112ac..d22e45a8 100644 --- a/plugins/admin-sql-prefetch.sp +++ b/plugins/admin-sql-prefetch.sp @@ -4,7 +4,7 @@ * SourceMod SQL Admins Plugin (Prefetch) * Prefetches admins from an SQL database without threading. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/admin-sql-threaded.sp b/plugins/admin-sql-threaded.sp index 601acd18..d27ab348 100644 --- a/plugins/admin-sql-threaded.sp +++ b/plugins/admin-sql-threaded.sp @@ -4,7 +4,7 @@ * SourceMod SQL Admins Plugin (Threaded) * Fetches admins from an SQL database dynamically. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/adminhelp.sp b/plugins/adminhelp.sp index d322f52b..a13269f1 100644 --- a/plugins/adminhelp.sp +++ b/plugins/adminhelp.sp @@ -4,7 +4,7 @@ * SourceMod Admin Help Plugin * Displays and searches SourceMod commands and descriptions. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/adminmenu.sp b/plugins/adminmenu.sp index d3985ed5..8e719613 100644 --- a/plugins/adminmenu.sp +++ b/plugins/adminmenu.sp @@ -4,7 +4,7 @@ * SourceMod Admin Menu Plugin * Creates the base admin menu, for plugins to add items to. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/antiflood.sp b/plugins/antiflood.sp index ae39c1e6..7fe73eba 100644 --- a/plugins/antiflood.sp +++ b/plugins/antiflood.sp @@ -4,7 +4,7 @@ * SourceMod Anti-Flood Plugin * Protects against chat flooding. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basebans.sp b/plugins/basebans.sp index 4fed0f80..1254c9f8 100644 --- a/plugins/basebans.sp +++ b/plugins/basebans.sp @@ -4,7 +4,7 @@ * SourceMod Basic Commands Plugin * Implements basic admin commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basebans/ban.sp b/plugins/basebans/ban.sp index 40c698da..9efdb4db 100644 --- a/plugins/basebans/ban.sp +++ b/plugins/basebans/ban.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands * Functionality related to banning. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basechat.sp b/plugins/basechat.sp index a8ed25f9..a8aabc1d 100644 --- a/plugins/basechat.sp +++ b/plugins/basechat.sp @@ -4,7 +4,7 @@ * SourceMod Basic Chat Plugin * Implements basic communication commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecomm.sp b/plugins/basecomm.sp index 5636dbc3..c2a6612f 100644 --- a/plugins/basecomm.sp +++ b/plugins/basecomm.sp @@ -4,7 +4,7 @@ * SourceMod Communication Plugin * Provides fucntionality for controlling communication on the server * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecomm/gag.sp b/plugins/basecomm/gag.sp index fc14b32b..f29753db 100644 --- a/plugins/basecomm/gag.sp +++ b/plugins/basecomm/gag.sp @@ -4,7 +4,7 @@ * SourceMod Basecomm * Part of Basecomm plugin, menu and other functionality. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index f3222982..ec6e7abb 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -4,7 +4,7 @@ * SourceMod Basic Commands Plugin * Implements basic admin commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/cancelvote.sp b/plugins/basecommands/cancelvote.sp index 1fb36689..106e3dc4 100644 --- a/plugins/basecommands/cancelvote.sp +++ b/plugins/basecommands/cancelvote.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides cancelvote functionality. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/execcfg.sp b/plugins/basecommands/execcfg.sp index b4cebf6b..9b1af7f1 100644 --- a/plugins/basecommands/execcfg.sp +++ b/plugins/basecommands/execcfg.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides exec cfg functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/kick.sp b/plugins/basecommands/kick.sp index 13f580a9..0871ffc0 100644 --- a/plugins/basecommands/kick.sp +++ b/plugins/basecommands/kick.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides kick functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/map.sp b/plugins/basecommands/map.sp index cea38b31..3779c11c 100644 --- a/plugins/basecommands/map.sp +++ b/plugins/basecommands/map.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides map functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/reloadadmins.sp b/plugins/basecommands/reloadadmins.sp index 82ce4d2e..be9ca36f 100644 --- a/plugins/basecommands/reloadadmins.sp +++ b/plugins/basecommands/reloadadmins.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides reloadadmins functionality. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basecommands/who.sp b/plugins/basecommands/who.sp index 699528e1..a9e64b5a 100644 --- a/plugins/basecommands/who.sp +++ b/plugins/basecommands/who.sp @@ -4,7 +4,7 @@ * SourceMod Basecommands Plugin * Provides sm_who functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basetriggers.sp b/plugins/basetriggers.sp index d24d7f2a..d141fdc1 100644 --- a/plugins/basetriggers.sp +++ b/plugins/basetriggers.sp @@ -4,7 +4,7 @@ * SourceMod Basic Info Triggers Plugin * Implements basic information chat triggers like ff and timeleft. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basevotes.sp b/plugins/basevotes.sp index c6c53df7..cc2e3462 100644 --- a/plugins/basevotes.sp +++ b/plugins/basevotes.sp @@ -4,7 +4,7 @@ * SourceMod Basic Votes Plugin * Implements basic vote commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basevotes/voteban.sp b/plugins/basevotes/voteban.sp index 1827c0c6..10cc11fb 100644 --- a/plugins/basevotes/voteban.sp +++ b/plugins/basevotes/voteban.sp @@ -4,7 +4,7 @@ * SourceMod Basevotes Plugin * Provides ban functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basevotes/votekick.sp b/plugins/basevotes/votekick.sp index ca5122ca..e3213b47 100644 --- a/plugins/basevotes/votekick.sp +++ b/plugins/basevotes/votekick.sp @@ -4,7 +4,7 @@ * SourceMod Basevotes Plugin * Provides kick functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/basevotes/votemap.sp b/plugins/basevotes/votemap.sp index 843b78d1..968d7074 100644 --- a/plugins/basevotes/votemap.sp +++ b/plugins/basevotes/votemap.sp @@ -4,7 +4,7 @@ * SourceMod Basevotes Plugin * Provides map functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/compile.exe b/plugins/compile.exe new file mode 100644 index 0000000000000000000000000000000000000000..5cfa71745a0f2c074e28f28bfd3da9f0678ed30d GIT binary patch literal 113664 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Ȑs4I)X!98al#8kd#5EUPfL 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 literal 0 HcmV?d00001 diff --git a/plugins/funcommands.sp b/plugins/funcommands.sp index aa5bd467..8042b3b0 100644 --- a/plugins/funcommands.sp +++ b/plugins/funcommands.sp @@ -4,7 +4,7 @@ * SourceMod Basic Fun Commands Plugin * Implements basic punishment commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/beacon.sp b/plugins/funcommands/beacon.sp index b178a032..f80bebd3 100644 --- a/plugins/funcommands/beacon.sp +++ b/plugins/funcommands/beacon.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides beacon functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/blind.sp b/plugins/funcommands/blind.sp index 3f90aa06..b4aceaaf 100644 --- a/plugins/funcommands/blind.sp +++ b/plugins/funcommands/blind.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides blind functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/drug.sp b/plugins/funcommands/drug.sp index f6572dc9..1b9ba51d 100644 --- a/plugins/funcommands/drug.sp +++ b/plugins/funcommands/drug.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides drug functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/fire.sp b/plugins/funcommands/fire.sp index 9f0b4c31..d561a035 100644 --- a/plugins/funcommands/fire.sp +++ b/plugins/funcommands/fire.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides FireBomb functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/gravity.sp b/plugins/funcommands/gravity.sp index dfb7ece8..12349bf5 100644 --- a/plugins/funcommands/gravity.sp +++ b/plugins/funcommands/gravity.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides gravity functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/ice.sp b/plugins/funcommands/ice.sp index fcd06084..21a451f0 100644 --- a/plugins/funcommands/ice.sp +++ b/plugins/funcommands/ice.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides freeze and freezebomb functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/noclip.sp b/plugins/funcommands/noclip.sp index d4732faa..e7f2536a 100644 --- a/plugins/funcommands/noclip.sp +++ b/plugins/funcommands/noclip.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides noclip functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funcommands/timebomb.sp b/plugins/funcommands/timebomb.sp index be6731e0..f9f6501a 100644 --- a/plugins/funcommands/timebomb.sp +++ b/plugins/funcommands/timebomb.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides TimeBomb functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes.sp b/plugins/funvotes.sp index 231765ae..d461f2ab 100644 --- a/plugins/funvotes.sp +++ b/plugins/funvotes.sp @@ -4,7 +4,7 @@ * SourceMod Fun Votes Plugin * Implements extra fun vote commands. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes/votealltalk.sp b/plugins/funvotes/votealltalk.sp index 01731e71..43bd15c3 100644 --- a/plugins/funvotes/votealltalk.sp +++ b/plugins/funvotes/votealltalk.sp @@ -4,7 +4,7 @@ * SourceMod Basefunvotes Plugin * Provides votealltalk functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes/voteburn.sp b/plugins/funvotes/voteburn.sp index c3ea24bd..403da2e5 100644 --- a/plugins/funvotes/voteburn.sp +++ b/plugins/funvotes/voteburn.sp @@ -4,7 +4,7 @@ * SourceMod Basefunvotes Plugin * Provides voteburn functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes/voteff.sp b/plugins/funvotes/voteff.sp index 399a3ea4..c4766b78 100644 --- a/plugins/funvotes/voteff.sp +++ b/plugins/funvotes/voteff.sp @@ -4,7 +4,7 @@ * SourceMod Basefunvotes Plugin * Provides vote ff functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes/votegravity.sp b/plugins/funvotes/votegravity.sp index 74a30ffd..63086da6 100644 --- a/plugins/funvotes/votegravity.sp +++ b/plugins/funvotes/votegravity.sp @@ -4,7 +4,7 @@ * SourceMod Basefunvotes Plugin * Provides votegravity functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/funvotes/voteslay.sp b/plugins/funvotes/voteslay.sp index db705fa7..e0637cea 100644 --- a/plugins/funvotes/voteslay.sp +++ b/plugins/funvotes/voteslay.sp @@ -4,7 +4,7 @@ * SourceMod Basefunvotes Plugin * Provides voteslay functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/include/admin.inc b/plugins/include/admin.inc index 14b337ca..20ba921a 100644 --- a/plugins/include/admin.inc +++ b/plugins/include/admin.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/adminmenu.inc b/plugins/include/adminmenu.inc index dcac5c4f..ebadb81e 100644 --- a/plugins/include/adminmenu.inc +++ b/plugins/include/adminmenu.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/adt.inc b/plugins/include/adt.inc index 5fb58bf0..62097783 100644 --- a/plugins/include/adt.inc +++ b/plugins/include/adt.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/adt_array.inc b/plugins/include/adt_array.inc index d92a8cf4..97e55ca4 100644 --- a/plugins/include/adt_array.inc +++ b/plugins/include/adt_array.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/adt_trie.inc b/plugins/include/adt_trie.inc index b777d41d..3c9c4cfa 100644 --- a/plugins/include/adt_trie.inc +++ b/plugins/include/adt_trie.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/banning.inc b/plugins/include/banning.inc index 1b350482..07611565 100644 --- a/plugins/include/banning.inc +++ b/plugins/include/banning.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/bitbuffer.inc b/plugins/include/bitbuffer.inc index 87de566c..fd1c18ec 100644 --- a/plugins/include/bitbuffer.inc +++ b/plugins/include/bitbuffer.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/clients.inc b/plugins/include/clients.inc index 29d6ac5b..6a946133 100644 --- a/plugins/include/clients.inc +++ b/plugins/include/clients.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/commandfilters.inc b/plugins/include/commandfilters.inc index 914982a8..bc432a85 100644 --- a/plugins/include/commandfilters.inc +++ b/plugins/include/commandfilters.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/console.inc b/plugins/include/console.inc index 84d04cd5..76c0d3bf 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/core.inc b/plugins/include/core.inc index ca226e09..b64de197 100644 --- a/plugins/include/core.inc +++ b/plugins/include/core.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/cstrike.inc b/plugins/include/cstrike.inc index 7f8ae436..b7568c45 100644 --- a/plugins/include/cstrike.inc +++ b/plugins/include/cstrike.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/datapack.inc b/plugins/include/datapack.inc index 0a80f943..263af798 100644 --- a/plugins/include/datapack.inc +++ b/plugins/include/datapack.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/dbi.inc b/plugins/include/dbi.inc index 084b6d4e..361afc64 100644 --- a/plugins/include/dbi.inc +++ b/plugins/include/dbi.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/entity.inc b/plugins/include/entity.inc index fefc76f5..9046af24 100644 --- a/plugins/include/entity.inc +++ b/plugins/include/entity.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/entity_prop_stocks.inc b/plugins/include/entity_prop_stocks.inc index b4b5cd64..897d97ad 100644 --- a/plugins/include/entity_prop_stocks.inc +++ b/plugins/include/entity_prop_stocks.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/events.inc b/plugins/include/events.inc index 300703bd..07630794 100644 --- a/plugins/include/events.inc +++ b/plugins/include/events.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/files.inc b/plugins/include/files.inc index 20f3424c..d01c1492 100644 --- a/plugins/include/files.inc +++ b/plugins/include/files.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/float.inc b/plugins/include/float.inc index 280e22c1..3f789be4 100644 --- a/plugins/include/float.inc +++ b/plugins/include/float.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/functions.inc b/plugins/include/functions.inc index 1a77f7f1..eba2d9dc 100644 --- a/plugins/include/functions.inc +++ b/plugins/include/functions.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 07fbb0fb..10f1fe5d 100644 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/halflife.inc b/plugins/include/halflife.inc index 35fd7f74..a58adabc 100644 --- a/plugins/include/halflife.inc +++ b/plugins/include/halflife.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/handles.inc b/plugins/include/handles.inc index 68e437a1..b09703d0 100644 --- a/plugins/include/handles.inc +++ b/plugins/include/handles.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/helpers.inc b/plugins/include/helpers.inc index 40338059..106f0b64 100644 --- a/plugins/include/helpers.inc +++ b/plugins/include/helpers.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/keyvalues.inc b/plugins/include/keyvalues.inc index c14b15fa..e053f591 100644 --- a/plugins/include/keyvalues.inc +++ b/plugins/include/keyvalues.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/lang.inc b/plugins/include/lang.inc index 9aba0be9..1301b8a1 100644 --- a/plugins/include/lang.inc +++ b/plugins/include/lang.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/logging.inc b/plugins/include/logging.inc index 14b0e906..aa4c0c84 100644 --- a/plugins/include/logging.inc +++ b/plugins/include/logging.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/menus.inc b/plugins/include/menus.inc index 825209dc..b338808a 100644 --- a/plugins/include/menus.inc +++ b/plugins/include/menus.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/profiler.inc b/plugins/include/profiler.inc index cfc16a5a..3c49b308 100644 --- a/plugins/include/profiler.inc +++ b/plugins/include/profiler.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools.inc b/plugins/include/sdktools.inc index ac0360ca..e3e8a38a 100644 --- a/plugins/include/sdktools.inc +++ b/plugins/include/sdktools.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_engine.inc b/plugins/include/sdktools_engine.inc index 3971be9a..6e39b157 100644 --- a/plugins/include/sdktools_engine.inc +++ b/plugins/include/sdktools_engine.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_entinput.inc b/plugins/include/sdktools_entinput.inc index fb161c35..1af2ec70 100644 --- a/plugins/include/sdktools_entinput.inc +++ b/plugins/include/sdktools_entinput.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_functions.inc b/plugins/include/sdktools_functions.inc index 1765878c..d4e6a892 100644 --- a/plugins/include/sdktools_functions.inc +++ b/plugins/include/sdktools_functions.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_sound.inc b/plugins/include/sdktools_sound.inc index aa51cfa2..2005a965 100644 --- a/plugins/include/sdktools_sound.inc +++ b/plugins/include/sdktools_sound.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_stocks.inc b/plugins/include/sdktools_stocks.inc index 186dc231..c9befa39 100644 --- a/plugins/include/sdktools_stocks.inc +++ b/plugins/include/sdktools_stocks.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_stringtables.inc b/plugins/include/sdktools_stringtables.inc index 4ca903b8..eb628c72 100644 --- a/plugins/include/sdktools_stringtables.inc +++ b/plugins/include/sdktools_stringtables.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_tempents.inc b/plugins/include/sdktools_tempents.inc index 3963beaf..fc895304 100644 --- a/plugins/include/sdktools_tempents.inc +++ b/plugins/include/sdktools_tempents.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_tempents_stocks.inc b/plugins/include/sdktools_tempents_stocks.inc index e809e3eb..9be534a8 100644 --- a/plugins/include/sdktools_tempents_stocks.inc +++ b/plugins/include/sdktools_tempents_stocks.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_trace.inc b/plugins/include/sdktools_trace.inc index 32d9face..f27b062c 100644 --- a/plugins/include/sdktools_trace.inc +++ b/plugins/include/sdktools_trace.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sdktools_voice.inc b/plugins/include/sdktools_voice.inc index 74e0659c..730f5ca3 100644 --- a/plugins/include/sdktools_voice.inc +++ b/plugins/include/sdktools_voice.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sorting.inc b/plugins/include/sorting.inc index 7fd59687..2d36be3b 100644 --- a/plugins/include/sorting.inc +++ b/plugins/include/sorting.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index 9fdd0985..f6669498 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/string.inc b/plugins/include/string.inc index b0c19cee..85c9a468 100644 --- a/plugins/include/string.inc +++ b/plugins/include/string.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/textparse.inc b/plugins/include/textparse.inc index 1835aad2..408c931c 100644 --- a/plugins/include/textparse.inc +++ b/plugins/include/textparse.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/timers.inc b/plugins/include/timers.inc index f7b5d402..e03d580b 100644 --- a/plugins/include/timers.inc +++ b/plugins/include/timers.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/topmenus.inc b/plugins/include/topmenus.inc index a59f2fa0..f2b0f950 100644 --- a/plugins/include/topmenus.inc +++ b/plugins/include/topmenus.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/usermessages.inc b/plugins/include/usermessages.inc index 79e0e229..e90fa81f 100644 --- a/plugins/include/usermessages.inc +++ b/plugins/include/usermessages.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/vector.inc b/plugins/include/vector.inc index 6dc0f447..ae1ede62 100644 --- a/plugins/include/vector.inc +++ b/plugins/include/vector.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/version.inc b/plugins/include/version.inc index 9adbf8bc..ba26c448 100644 --- a/plugins/include/version.inc +++ b/plugins/include/version.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/include/version.tpl b/plugins/include/version.tpl index 6bc2c04a..28e8d0e0 100644 --- a/plugins/include/version.tpl +++ b/plugins/include/version.tpl @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. diff --git a/plugins/mapchooser.sp b/plugins/mapchooser.sp index bf978f05..ee8d23f2 100644 --- a/plugins/mapchooser.sp +++ b/plugins/mapchooser.sp @@ -5,7 +5,7 @@ * Creates a map vote at appropriate times, setting sm_nextmap to the winning * vote * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager.sp b/plugins/mapmanager.sp index dbf3ec39..9e6e065d 100644 --- a/plugins/mapmanager.sp +++ b/plugins/mapmanager.sp @@ -5,7 +5,7 @@ * Provides all map related functionality, including map changing, map voting, * and nextmap. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/commands.sp b/plugins/mapmanager/commands.sp index bba25765..30199406 100644 --- a/plugins/mapmanager/commands.sp +++ b/plugins/mapmanager/commands.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains callbacks for commands * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/events.sp b/plugins/mapmanager/events.sp index be57776b..0d868310 100644 --- a/plugins/mapmanager/events.sp +++ b/plugins/mapmanager/events.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains event callbacks * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/functions.sp b/plugins/mapmanager/functions.sp index 963dcafc..365c004e 100644 --- a/plugins/mapmanager/functions.sp +++ b/plugins/mapmanager/functions.sp @@ -4,7 +4,7 @@ * SourceMod Map Management Plugin * Contains misc functions. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/functions_menu.sp b/plugins/mapmanager/functions_menu.sp index 51f78f57..709f7764 100644 --- a/plugins/mapmanager/functions_menu.sp +++ b/plugins/mapmanager/functions_menu.sp @@ -4,7 +4,7 @@ * SourceMod Map Management Plugin * Contains misc functions. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/globals.sp b/plugins/mapmanager/globals.sp index 171c3a16..db917957 100644 --- a/plugins/mapmanager/globals.sp +++ b/plugins/mapmanager/globals.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains globals and defines * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/menus.sp b/plugins/mapmanager/menus.sp index c47e76be..3157f16c 100644 --- a/plugins/mapmanager/menus.sp +++ b/plugins/mapmanager/menus.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains menu callbacks * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/timers.sp b/plugins/mapmanager/timers.sp index c0d5a3e3..bfef0f27 100644 --- a/plugins/mapmanager/timers.sp +++ b/plugins/mapmanager/timers.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains timer callbacks * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/mapmanager/votes.sp b/plugins/mapmanager/votes.sp index c8a1d6f7..4f7a9849 100644 --- a/plugins/mapmanager/votes.sp +++ b/plugins/mapmanager/votes.sp @@ -4,7 +4,7 @@ * SourceMod Map Manager Plugin * Contains vote callbacks * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/nextmap.sp b/plugins/nextmap.sp index 16150086..c3767276 100644 --- a/plugins/nextmap.sp +++ b/plugins/nextmap.sp @@ -4,7 +4,7 @@ * SourceMod Nextmap Plugin * Adds sm_nextmap cvar for changing map and nextmap chat trigger. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/playercommands.sp b/plugins/playercommands.sp index 5709333b..0318dca1 100644 --- a/plugins/playercommands.sp +++ b/plugins/playercommands.sp @@ -4,7 +4,7 @@ * SourceMod SlapSlay Commands Plugin * Implements slap and slay commands * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/playercommands/slap.sp b/plugins/playercommands/slap.sp index 891bb463..7c99c417 100644 --- a/plugins/playercommands/slap.sp +++ b/plugins/playercommands/slap.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides slap functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/playercommands/slay.sp b/plugins/playercommands/slay.sp index daa00232..e182b580 100644 --- a/plugins/playercommands/slay.sp +++ b/plugins/playercommands/slay.sp @@ -4,7 +4,7 @@ * SourceMod Basefuncommands Plugin * Provides slay functionality * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/randomcycle.sp b/plugins/randomcycle.sp index e8708b9f..fc2de27a 100644 --- a/plugins/randomcycle.sp +++ b/plugins/randomcycle.sp @@ -4,7 +4,7 @@ * SourceMod Random Map Cycle Plugin * Randomly picks a map from the mapcycle. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/reservedslots.sp b/plugins/reservedslots.sp index defdb900..efdf1e98 100644 --- a/plugins/reservedslots.sp +++ b/plugins/reservedslots.sp @@ -4,7 +4,7 @@ * SourceMod Reserved Slots Plugin * Provides basic reserved slots. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/rockthevote.sp b/plugins/rockthevote.sp index 7d50b1c0..3d3a0287 100644 --- a/plugins/rockthevote.sp +++ b/plugins/rockthevote.sp @@ -4,7 +4,7 @@ * SourceMod Rock The Vote Plugin * Creates a map vote when the required number of players have requested one. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/plugins/spcomp.exe b/plugins/spcomp.exe new file mode 100644 index 0000000000000000000000000000000000000000..bd3a7118228c50550ca431ee74bfde5b537ad314 GIT binary patch literal 315392 zcmeFadwf*Y)i-`7bCL{U!VEBhL8Fd#)Mx@m6ER^DI!F?u2AE4`5=#=WMtU5nrErd* zCL!_6v>7&o_*7fl#~a1A-X1TlRlH#!kbt5hwMt91czN0#2NZ81c+2};`^@B`JkPJs z`+GmnUj}AopM6<-?X}lld+oK?-e<x0HcDnml4N{_hb3tXe(BFEzW@8LgGioq%2Si1 z$0odZ>K0Soi>KBrSFLibSoxzLti1e(t}8CT=9(X=uJ2#zTB%**y6PHN)uN#5hd*k) za#n6`jynbV!NiSbe&~=d{dxK98+|Y1`Q@{3_8rA<;X9A|4vX}|z9&R{m#<L#ZuAX^ z-&@3Q;HoPWg7I~XebtgwXOg9fPrh+cI_;ojHcd2HBxwa&?lXz#GnQpYk{!WLqK4N9 z<C*9}f9YRI$`onZuQCPQ!~>P1!s2)2ha#or3uLK+0()g?%NZ0n{@>kQW-0&pNg}qh zS{~mgz_ZCf{kWxOsaLL1DJ6pT5MI>Q6n^OfE=gKCYh~-@>gAF&>(7X#wjWIW;wSy* z1wm#R*`%r~5xW%BK&1G^Px{X*Nj<Yxu3C8oB1Bu!W~mqtcaKt!@_LQZ6#Vw@TMB$j zfp01BEd{=%z_%3mmIB{W;9ClOOM!1G@GS-YmngvM+;XDIZSnbe^P~((-(l(9Gxm?t zW4qNKl=SGw*0fo>j_m?swmW+C9uuo~+hhBf9Fvw-Nq%43cUYA>ANd`=fL}S(HDBV7 zPXWXpmyfqhCeZmw7s})#n<L;;_EU~q(m5(b4kwB`k;mc>@axh^nMmSSr=J$s2$a2~ z$G{W7WW{phe96au>Np<$lx`L2KR90c!0U(|)8K*mdE=f5K9I5!Qa)g{49WTq>j;rj z=|sPM(=w!zeV|~h$9Bhdwq4{A`1Rae1^hmlF7VqzPb1|AE_RNqZ@{zFG!~yQQ{9%> zpgKcub6X{CLYU7%27QMd=9ljkftC?i)C{UGB1KT$_eH)@OpQhkc%B;ve}IjzPn0+L zcqwcP#0;p`BB@S__VKkMQtr>(g(lEnFR@2FmmX7C3^3#wOV8x^XQE|nH>fFx8(5p$ z&id7&#E*y3!jqHc#KqD&OLvaG-30cE?pCw)_f6X2q#PU6?0p$hqScLbk)$0h>|dgD z)A+_y`|AOJUx+PtTT>Oh%syq?)oF=)+=Ma8be2niyv-Er(LQ9`3i}K9vd=Updol52 z6B}MP87a|y+R-J2FSVGrHTQP5OOiTWA2z8u>!x*6s{VmV?=yAIm9&AvolDGpEqx}b zIo$~$ltn+}Z1C~9=x#QIo{9}?nM?E?&fZ`s9C4N$C^^heqqKT=DLWGHkV|^vEtYtV z6-A5VVY@GWje~z5yae*cvshnC^I}ojAZnT)TzZE?(oSGmK7JbkTPXYaO$dZ}9N*y3 z6lDk>(Mj`+flVFByrYAh;Mrq?4eD(4hLtU{u#2poUF`*h+dO^kS?mZpCZAm-o3{ao zJq#{?+5m4_ZCL``dY6>+jO&9Sk=`MovV|5_V>iF(+0}4uAW>0Z9wwX{)U#NN%w3{^ za;zs_BWu}9TAE9G7WcBSJrMNqMx%=4R8|9~d-w!F3XxNNt-r=W-5Bq%voH-zr#Wm1 zVO+XV#&iuTw4m*t8f%9c6b0BVU_WVbx_6B6QL;N;YmL_mB7h!tR_mqVEs*vTgN6gl zSKuGUShjomT2yPqq;&qFO5#7w&q(umn#Dtj<?fBFx{WPZ({*SE>I#M%K&8_k62k|Q zAQqY+NhQM=Wx%@H7q710M8n0?A8%h8Z*Pig`Ekt^Z+FMr3*zlXajiJsUK(#Ni?>(A z+r9Djs(5>CyuD66kNIRKHTdG8BYgiZ8u%7~sJ3XQD~&n?Y3XOf!%PfBKi~i5@G#O# zdX}^-)_1O8|JmHzU^HOi$%2-iesv+sBQ#isPpP2tpBzK^1r|R)akohtN#oN|APu$) zU|DEsfUgnoovd#ZK5MoprGOI@<&`24v=b=p2&-`y*0^lXEzJ4l(PKnX;O$l?DK3#I zX*7n_6c^SMr7}^D0_1Rr9J|vw3JPo7V{#NBhehQ0T{=f;VNLOv9QDW{i5xK_hcbkj zAjnr6PlGj<4AsT5%zewc*2o`x7_VM#i@u7EQl3FJ{?-tYQD*H;L4H1(g0SA6FR7RJ zRevFaRSUz`cxY%{O?G$nm&^LAzmg;YFpI(_slQq#b1PezAB-=MSPhsc5gIc0MeKoi zbt{h&F{_8zg4STf1cp)Z9OT!CYTSCeOHvoHumj_#Fl-N^lnI66p*^g|nOLwVV)e(X z_x4x6YDEpaT!7jG%Eo$BI|~Vj0e+h3C3}$1NaOC7)K#q7ov`jiG0D$w$DGO*y3lO% zOPJqx$mP}U_yXnHA~u1AmdCBz*#d=KEEg^;h0N6lGU9dHzpy<Q&Ox;Kd5_4u@>Kw2 z3zi3c5%A8#Ul4~Z5Ae*X86flBg3M06y+E=>J)kSAE*Po&6j6E6*vbq32bEJ^R6gI! z78IaLADds`k5~f3dx^oS3vAIR(Zuw)eHnACB4waspQes&q_NVz9L4nhX&5NW^y_ml zHfcDjPUR87BJ~jJ4E*q1Z4Pq87nCA5@>ww#D))#S=Z)mBiX0V2j!Bf`7Lmg~l4Fv{ zQ6_|u(oKm%6x8v<J57?ZM&y1QK_EYH6Lsf;<$m4+y(h>Q_lv=<w-<qkx1dq1X3RK9 zIAYY7V5#N&MLTt;J6^4fbm#K;g4S!#H2RQ*6zW6kjYb!?nx99nda5bQ$~W}(<&t`) zASdXe803`G<Xk=~0;7<#=zl*yO<?ydnuxZs>U!`V7+)c5uB}g6Qq%25+jBKJwugaI zO)+y6oBQIS$Cy_xtSL=|9@BY7ym||})GIpAl<q!#$YhJn`-;YgB2cVHlU6<+<UUau z24S(JUciE03@QL(3rhnSLV%H|J2%5GH~=6<QGNweO^{DD3eym^MMK~POuN<Ac(pxV z?TA-9S#>Fdbu<d}`>R_;D^`-ek+?`s_)H^O2eTD!CmD!|d%=VJVMvI0^&>>KV1W+< ze8Gbl1~hLtL?hZnS1wJ|n0$bPQT`?hu<BO5+DaM@%~aK;iM9(eX(Fg@UHNZ8zFcsD z%&IFu(2Gh2V?EcFvFY*94ot%F>RltmN`!Wdqt|3qWvaI8{TA~PkA}IUY2~gUKiPn$ zx0iu=J{xVD?I-Wzf!X2<_S>Flke9_ne`6PA#j6jpMLF>W?;_5QxcAmwWJ6=Ss|VIC zniS|>!1>mr)Zjy78oWQ^9MfP10gzZUg>6f$FeUz-sJPCKhLS#2*vF0#A^dE?Qa}GQ z0O{2Z6B<9YWDtZ{R<6AVq_3@H4H@xJ&oY+1EMEQ0nC3n+uDPe7BHI%S-ZND@_5Lh0 z`9o@PFVU8mx(w8`-Iza2GWCQVLUa?qTv`B5NmN@ScHi(T7;EF$<bEs!g8Wdg$gQ{6 zNtko1m$DUBD(RI2VS~vG3DY;qUMoep$Bc48ekrOmW=wX2*B@_h<#Du?HOOMxk2nK9 zzJG9dSUj;6GF#|Cnm*w4>)R>q8KhBMsFl@BWC58CnP2h67kpB9EFNm*b0JaV)s69* zY*yXq;|HuX7+WI~8vKb+V*tv9!mk$c0^9?U0Hv;4@$uEUlx?|RsfVE9IUfxVE2R{Y z5JE))l?K%9McuSYD`E>8S?Ck<^YMk*eKlDo)WtN#Xp}GP=T77c^HTv8Gz{{A9<-SB zf~B9P+htLTQGuU-l7*U&AQ#j~m(gUO6~qKBQJ)!WsW1;`6C6i!T8e6u1B#un`~HVQ zixH)KTn22+P-AtPB`t<>mr`*IjjZd?dT`yQXWFZzk{$7=yBkjl*&X)rUt$tS)M07K zuSSR+2`jflHArAV8aXAvZ*c<`Wh2E@xtB*y@$nlG6S1H~nO}(_o=<+jL=m^RNk{~g zH5B*d{b>7o_a4OPJG?C=d$@vPT{{Q~p>&q?JV~10=Hdscq|M83!Pg4<T0>t&cj2p; zzDnt<jJ_)9%S&HX^i@k=3Vo^cwFY0yHn)lIPVpV3=x+L2PhT4;GM?+a9^q1|@^(bT zb3eHb!KIX;mA>wwuY2k1L41uW#~>lU6oV#>bR%VHqOUgK+m|^6FiriLU*P8xv}$u5 zCHd&f4ii8;*MaZ;ObL}^BN?H5gdk~=Qcsy=!pefL{!A;rWs%2@5N%9vUQSt7;Hy8= zfjDf>OPg<@xZCjc>!lCl%ljw+xEo(pc-(BKke5O|_tV!S_}Y6XzP`ZMuf5d#T1qV- zC{|?d&-DGQO4<v(cXKy&fCF*kTEAzHSTtHAvl{q~-!XWXR^KN^n!^0i(^3l&Eyr_I z&FbtJZqhO!yxQCjNu7XP6Z*0wu~;n?tBSqj*Q?w0{$Z>y7n$^atZlVHwrkr!2K(sa z->_Z!Tjr1NSt8a^>n<^M9;-}TXi_sfkIm7{i3>BvVc2!Z0?Lo_w~VJ?SfL*<uGLp^ zAUK>Sb%Kq->X9a_*MKz*L5t^OZ3ejA5}6a=|2TCd(iY7z%32z_TTJXLy=Qn`EzM4I zUI31{kAcfs-WGhvEpZ>2imd7R5E+gZZtts-txercaxNud@iv^Ml6raP+$OCFcvyi) z_sRU+QB2eeDL3jHUt6B2EmzcLkJtWpwI$7c*-dDUHNXdcYofN>m3x7u4;3~3nq;^& z*0V&LLS*nOU0^0YFCui6?vqP;M)i|*b+V<qyAf<*H2DLJW-AENvKV9eb{CChBKSxj z__q)ff&?iAXGAk7+-{5AjGT%!3c2u`LlCk(Bq9EtLahv;n<>;tp`TL7PN8-Ry}J&f zRTR37LRV2pq0kZv6;UWep@VURE~U^T6q-k&H59slLKPI6iO?n*c0NU>=aVSqU^hZj z5rT+Pw$MWsMR!x^izGs26#57umP^CYuYB=SM7%{wyD0QJCFRkm3@Dux(T9jlG}?Vi zF+D#{SwHy+LJv~t84CTHLTe~=8-=_S+CU*Ig`x<R>@LqGabUY;TcU14p<n5VAtizo zeMglNrH5uJP)DI4g(M1HOrax0<?mAHZVH`GAs>YbDO5zEQxU>+7BMTGkPQ8q3Whv7 zNa8)1Hq+~OTJKxPW?}EIMjE6RWsx%9g8r!w&FIgjr*J>XGimiq+vA;8XLzMycdQsc zC_$N%)A~)~cT#`0_|57!({ITj>{;MHhu`4SbKk=l?G}J{SoC8vR=3(7kE;S)Vkv%f zvNUCGJsU;Skju#GqQhR5iZ<#wP5<slj8UUq_l(4dx}iKyghc8}X7b1rn43`GY|3-G z0bVpGY&4Fa^#h^ul=Q>~TWq)VG+)+BvMkIee<L34sW{y$h45K`Pc=S^@sZ?j{Fx{w z!_0;m();oGBR+TG^A<k;b^bkj^h%nx%<2!qC4=SX7eR7&EN<YB*O{c}XgR&nBjVa? zHj&(C)<+`HGWa4aqVA^Q^io`me3<88q*E<M=C)krc1nCyB$7GqsZ_%644Iqe1^P|Z zA7)3?aBQ$6(7@-Q?vi1$slpn`+fWw-IOJ*9KW&oKd0plr{pBMUk^J96C}^2ms4^d) zKT;c#IwtUsFEvTA!L?6(t;$U_*Rxz|sCk>Y$J|r0@91D`pL%vmzC<KG;c=+yd6aLH z$hJM54f;@QpZ3OxY%=htNe$Y5F(zK4F<4DuD#Jq*13<FfgyoPFZYUXUC>i7n?h$<t zb}2FR_0BSrS`Zt&)(jd#%55AY-_Yy^^AUbRx`_5CR!P&S7(KDWnlm=6I#_>tdcYiq z=^>$JWyS_=Kk2}Th#gi>!I~PCIZ1#T>w^({uE-ihwP9|~!1T1Ans>k!Jx!F<=EsI@ z(G6e$_9xa~_&V&w)(nVj)ba`I#Wa$Z$71dh^K0%s=!m#wUEaO;?e@vZFqB~IWz?}h ztuu9JkR^A!DcYlb^e>hN>ONiw)PPuj^>UyhVHPrjF?iPIG#OVA0Wa^wP@BO%$BaKZ z-!Egi#30M!HnwYIRm46o+{Qi}mrv*gDXkzPeS8o93#K#F@oO=wVRJ#dJ(+{&?c!Mm zQ7!T2<%^raSevLjK;8*HuA2m&@slV@B%;WYRFNL_6`-l@L7Dz4w@fV=ScSBKhwwFa zH0;^qhw|*}LnafxG9_*mAV%%SWM3ABQ_m3%+IdSaS@o@ng(knRf&U%4B-@pkXR<vk zKY<y!3r5D_wM$k_tEAsmwv_dv3-*}dwJS5X(9bw)GU_K)D#)7L_7GL$VAI$&STxxa zj$g&=@i?UcE2QoEml=4n$E)0~jv9UESDrW8zgu!Rw$HZVEN~ACJK3(nm(9C<=G}4Y zQ&?Ul=9_$B@N>NAm;6_#l}*!kisg9Gui9RL)p+q`y?TdivTcCKmM}TMh9yh3*d2HR z*aICGu&|ZYI10C;#{77b+nJo0;y<99&t$vp;S4j^x63-pnzZ*|UbZ8}725}Ty8uP9 zZMX^F3CDlX18{ey%TH$4I167l?=$a<*FP)jW?>6+oNby6ATE8U45p0(Dw_rTJ@t1` zVOQHO1L;xt9jWomz6Ng^tN)d3zybtpw2T4rCj-bh2B7{W@{3M(Bx=9%eAvJ${?I-( z5ylcO$o~fF*&gmk=bDFDKMca-q!H}x*dWpm)rLwA>&Hy!D_it*^hjdfSFxTjE9uCK znEXNh3jw4Ld0Pq4krGHj&u4LTH|XmWGzQu5>$XMj1ie^x$!^bf)r$FuNf^hT?b=cE zZu4$G-~A=lW1MA^?C1fR>@bMF$b9bjWXgy*jP`nWqrQDOwy&c~808af?gG%zYRDtc zN5&-1`r4gh<;IG1h#A|%FM77OeN1{n+(y$&KXt9uq`eHJ8=-v`0J|zw=uKJxtO_5m zF-6t8n-Y$V5$dM;c%9n|U7!N_olp$&BQV@mA-V|#0EXLO#0l|TXaknaElZm99kpL0 z=N|n~V_Nw~NfNzFBNhC$e?q=flQnxY5UPjndQfasHugs5@-699b*jE=IGy3SREA*5 zfp7!yFg`AP?E1^YN)VmIJ5i374l<Swc}jqy4yQrcqQ{7Tv6bsXOI&_F|6ybX^P_!5 zm>moErscaKr?FW01Yk~&%;9IHVQAB_9;%bw-F0%6p?!bY-Q;#BD~-Ck()n!B1l5J% z9zcaIAAcRYE2+BbL|y6GK-BViTUHsssAm8%x1Yaf2tCi|>`0rvyrV#!7>WdWX$ukA z!a527x2hq)H$#LoubW!qCWWn->T>(|L`-*)BCh^}D4b6lI)8_12&%q~7(#;R)7vo> zWVh4K&jB$#TG^2#)`m#8dwNM8fBd<aA&A9k-)wO+x~LMCBYj8XxGqkuKcxnq@kfLD zwEk@A>^OgdYHx_-@f(^2;$q)zux7SPok+1)8nKA5K>pfQTX~09&56w5bs|9)mXc`A zY^_G`Xv8)$%dLVw5noso@9-wiBk{C}BEXPPbS6M_??CMlg&pCmKZD7srmoNHk^~SC zAzo9ZSKfo{l3H)6DKoT;4DB3NLvy>`$Fq#a_Sc9>lI2p~_`>CAcz>oShwg0YWqA}1 z@cpO(L>x^L8;dC^q#v@-41`{R;pT%k!3MQ|N56F)`vfp-Km9d*KYsIV=aN!>>l*xY zXZ6(x3iV>b?GY31q;+}QNd*XJpd>{<laAgxE_zEk`l)fzkENp@9~TX?FD7%q{{6V< z2h-6HjYdbZVHx1t7K?V$PK%}Ym13_n0qDB$xd5Mq_#8moNBCTcu#}yhO`mLp=--$> zG<nR^|4s1!Z~6b5I{%w8rVO);<jgGexqc{rRK7WbH0KwPN>SVi=L1{p7u4Tdv-P1$ zTa1JP23YCoq&5(T<SRQsb3Y%%xUy}ncb^{MFJL1IvNYC{XmZccWPFn=gLkBeJyoPP zRb)nh-!@XD%AJcMRWNHb_>{c>9p?WohO9#jVT@%bM)7KFyI@fCqF>wG6((boMjz_1 zMVWzM*+^|^1Vf_;o;_0ASOiDglt%EhQ3Q{YD~xE<aS;4Wz#E6)Yr<nDzjqw1(r}+g zexel`e%CkQ`Wlp7qTQR34ec#Oy`t@C_u3TLaq7Yzf0%vPId>*zdTlC(JJ?r};Bf*S zr^;<fo)WPWJ$+$5gxM#a4U`-uyD{f``d|cL$81~eq~rzoRDlakXs02MMXW-)ClL%} z319-|9}0&d<WS$F91%NwUTBov1;D@*V%Zuukw$XaIQi;dccH6f_neDdRNpp~K6%}R zr&7eJ>4;o*VFA>OiwZ<UFjTS|s){<7tt=pWp68`@H@ncy<ZiaaO=<%)6`9#?*$y>? zZIAUplv=gFCT)N`kzG<((&JfFheb8C#vb)F_EBO{QQ=Wfq^^A$lP8rN@R)43^pfhi zO=i7l?0<@U7f`;6!lR--<aILn+~edmDp_}lucT+rA|EP25Kc1}bYAb0wb`g|CcCha zTGE(qT0Xn5i6WZP5kRq(P;5nMq4lEF(ZOv8wH$U~J>{%Vz6#h{1zTN@7~!8YXOeaT zs+j^S;hcpgZIa%Tq4#BA#q}=iYMCeY==+D!lAL9zd>QIiZx_BD>0Y3|O8JO1d~JOh zJB<F##}abq_$4G8!c;npf-Yb;<!fpCk#+!Sj!1=%+i0VMY@JwfM#*dk`va!)__^z9 z$Ym$mqfV-Dt<6b430;uf(XjCn<~NCvW2G6M4#5!*t&@?z!%{KV7W)mN@M!+<n?PcR zZBd$s8bV=yNg9Z@dYwEMh2@G$Z8?JGqbO)+!{h7koLi|aOrxVtCi}`b{MKbvoTkbZ zXKJ(@2S%=-Kg|Cj#s(18rmmAuMjZteb5%Dox+>08^CJ~uo=y8gDLTYHgSrC6p8RXp zWeM!(s<w2U+DDyp=L+Z|&9-rT{ZKE905Gme{0|dHVMc$C=BD(!8nPJ++D;*U9bdk4 z?m1dzx~}824-1QYj2LGy5aza#W=%AjbqbnwA~mOMv})}pG{xBV`EOfO*iKVJG4(#+ z7sSg7&yAlqT69!q>4%y|=bJ{9Sqcs8*t+S_eI#r!saVzJcVoj-3a&fpUHpXD%!Bx` zZT(1p{|vQIe}9^qufLz6W((J_WHHO*NRChLo+o2aCtdNgx-S!<X)JHQNLj}6{)WJ^ zxF7ME>l(y<z&`CiP`AB#F?Ok`Qg(#BQuq;#x5?d(NsukrLj44-S-OPwnB*Lq0h&m# z`QcR7KrGChu>)9Kl93G7pFA+X@Tb#npoQy4i0r)K{0X+$gOvP4aQ5K#Vq5GkJS65@ zo*M!_?8uXucq}>m@o#O>pCH7JJa+`~Pi9eU&&R)2RaoR!DIKS>`K|0yCAD7F%OsVU zQ}4khrb&apm{tcoo%-9ymc@g!*#sC|R_oWvk~Wk171$W}bxdYIZY@7q&4J3V_sLjR zedO8RZe#vd9q60-<r`6<L<P0}WW~Dq=U1381kBpG2HJM5z`)}K1CQe%ke#mlMA(l6 z|CeJ~W4r0k#z?^8ezgBVI(eDCre11bYw9{K5T*=l7RK%u3o4&j-wJ`E<}mbwY<u|S z_@r1*ONRxkUi@Ezd4CB_tr(ALRzIOGVb&R`VZ1(rd@fpVv0~51SZZ1DvD%`Q=&VqK zF`kg4w7jOmwthMy*VRztEfr>44Bka>?(hc1T-p$%6-t33t)CD5c{jFWF{>71^W~*` zk&Ej)T%M#Y`T~le;SMb~$Zwr3bk8{Us<4zWYmLjwTk2T{S`2QpL#W(xU#h`L5Q&B) zj2E_tUq{nDy_n|g9q{6y_Cgq2N`{j%EfhVUYmP*X#TS{y{}ab(k=KZC;5GA1*p=d^ z%*C1ta@5ang-#yiHeeCS-~~vHn1UgG%7s+QowB*A6C)WR{`Bt%5zAmTmNwS%<|;Lt z{jf@}cAMC2&&Rgd-+&%9YDu#?A;`ZvUo;DKxWtA{68p`hi;eGJ43Hs4cCj4H2O^{m zVM%w#VPHqgTkvd7<OY7KXoDOnia^n;f-^Mwg475U%u9r2tY{(M(ko42cf_<qydJM{ z#}^j#(?F5p7mQuK82*M-H{1f%i=f9kNxw<Jm+z&N{G2i81k9%gFrQv#n)5xHPq$_0 z+cTmEFrV(me7alz%P@vQX8D=|)k2W8ZDJEV)ke~dEi4;2P7f1)tQd~aXqadg>(f4H zq4qRzRqWPVM;S9kBK?q+j0i<!5H7EzEoktFRhtqq@wZd~21124#H3BMQ{52BfLwI) z(_sxjFNyip?#ZPjEJPa``0aBjf!w8wLB673C}6Cp<CU~Y&EF`ZWJh@$<nj@1hW?dV z&D6h=HJc)Xmm{b0+ZPJJ$ly}*%0(e9S9u-v^DdDjBPl;#N&DLB6!hYO*97Czw7mig z0i<GuPnb+GFlmUG`D%X}s8yW`)a(IX+HL|>zFH*`sLNn%Azx{%H%X$R`EMf)!%EmU zz`>jGh_!JBKO4Y6u`<kErRdCJ+8GFe*)z~Iz%B!aRk<tR-ryG{_^(7ArTVZ%Ju712 zPcNV<!E=xnf@5L_5E2_QFy&_V8@o^dYUVx0pu)mp*n+tWI@)5;d<=7=55o=oD(EID zK31I=-ID4NqjD-=B<iw|pDtk;F~J5r5h4QX`**2OZUv~w^2j4W-{FkcR>gf4U$ei0 zzsdjqj5Y2}w6zXCI}zrzuD5B;<#`^1lQ{BlZ&$4wUDVmTXVWvt#cJjFB$g+F7s~M( zncs?09j~$Qg!r{?qJ8*EFTPef6g&0&_59b^XA$wlSCirv`1fMN8BWABwe-joVWnR< z6v>;ZydZ>M*qgDZbEa5WK$^i$(EpN<A(cV!t(wD?+i3<{a#=6NiWR-f&Znk8)gDwY zfpe-@o?(EqmubHJ*T$ndk4oL;+1Zf+bK`7CkjHIXrw0<6i64|n2GPPKs|$EYUa*4` zA_YrG)XJ~^oOUJc#Bqy((sA+69*_UM*eUscjsHdeCH}7C<1gCcO1I)SFxii3#i+bJ zj{kyfE4=RE6{+(=H5WdAYUaS>2g%8#S159rK+CJ#GPs*MR6kTPs*ja{bY8Jqs3Wb6 z<~&Fzd*R-3QaGFT!!Y;#6XVY&%)k&)F20qXr;{NaHZ32biusQ$)HROS;jK`hXu}k) z<q|uIyhkt!=aBqNTxtO$6|A$*nGCVK4`SJ8n&VF`bGBtb4I8`6QNPciV`$GO8su<* zuYma$J@2ED1|Vg03Zo4x0~%Yvi1A1zFWNUEu5>U*#KTW8VwSYPeR8%pqj@ogTp5(S zQ{XzI@2KdtJu!dweF$S%civDcY3JW-Ql}G+KG^+!crhB8#E60E*_FKOUb}iacH&Nr zoXvx&6j`LiFfiaCo5w2<O#>`R(F0e5i6b{Gi)*v_R0EAjJCDCIg5qPS7A3_Fc0qvu z2r2~%SCT0h`&%R&6*rAu6Mwgs;93W+A&OFo2L9up0XHZk7GN}$GADwTfG@I?Z!z+M z8h4^9R#^logj$@W)D#8y1W}7Mc9<QpMX86nzN$xs+V}K!8LD8UIB93qk|(njVoS|c z=;8`~r2r`#yQ!fn$Yp238bgW{xBlGNUd0B`HsM*tkdB$XU*1U5+5j<O*H;j=P@6wT zMAugk@Cbh(!qik-?0JOKd_ohrI!AQHEX?BbE&nR7OcT7)7miHkk6$EuVW0xg;p(Xm zWoTK@&rKR!5@|*plEt%GofwW>&by7=aEA0O7-{h;5eeP((%BiTx{3vhNEM->5O-KG z521Z_Kqn=}g?*aGuy=*77!WO?{z-RSp@3r@cocaf%lP`24UBfk<Qxe%)(q7ana(qf z+6IJ4t6fs^(d)cZ2m#qMq*)9Cs#XZ%JcEFkwMEaoAgr<E&<cPW+|!BpZo)M#-<&L_ zrWYFBw!r8%!=pLw*nmd3u|^1pPUB{n{xG<xsn96<<u1`UNCW5quM2qzk!y=pU<|_P zLHjvc)6VCjH5g(~ARW`S3)8lnyiG0T7j#@^=wEsp4Bc8aYk*1T_pG);KPGDhELZHx zd#e%-GBVN@6E<)hdR)ZwH2@A&k~VB<!BSFN)sLeYl&#O?xuESojJ<kb=}O4AQha<~ z5u0ujJNQ_-T!6g-`42vR9znsv3EKx3v>oQ}oMV#sS8rkis6Uei1pV=6-yya6348;b z4~RnzAjc&07sNjm5Sae3LW6@Hftp4xa}t04MS&gWpR>gNR=Em&&K}9)^Qx(k92XuG zn`rb11Dp&CS%k))rNPg?6fU5o@;X3%Il$MW1?VuGs-b*_){<f?iXeR{HfWgn(h5za znb(ZqkY$*=A+Kao1ZC9mOQR0G!Y#E=j!fY9RSCTMWl|v|l<rQI9)z-nazJL{pcl)5 zOy;YL!*J#XA<|lqerW0Fe9@E`*(%u4M^s3OsvH2FZ`8sZ?f}om$VY<!I4AObepV_) zc0=*=@w0D&qIUxXc0M28gT||FECMXgQlp_CfT^xRtSF7uG-4yQ)UX0SpA6RkNHAw= zlj=f&fur&i<k6-fi<RV?BLKm>l%H;(rw^Theruw3YbSt4Rs!YlBd!&45B#vxXay-U znhQMwcefn!!LD+<k=;(&oqqnh$YwR<vRz~o!#gxULJTytqUJIzV8r=4Yle9zmM@=1 z7V|rWsHK4u{Uvh3fZdd#*#NoB7n#rP^NCCr!jSY+!=3=mT~-Sdpb9olo%{=oH}EF3 z`MA2iz=Qz?uotDlYJ1_Ta6a!B>pU5VxjcEqc-Z+v3-q=qCfus1TeTz>n&Ax@x0C~b zmJd7%BrT6BmZ{>2gqWn!RMrF?&Vkmr;F+^=gTRjrVc3st0NNG4$QArDQJWQV;W<dV zR8Li5-3YnR{BJ@ooB;$O7w$qjkY9mDVqjrhJupNNm!_Eu`bgIyI%Jb(v8a15o>E+9 z_w$w=M*oNjk+|#)ENxNah?0qubwJpz`k-9a$VC5tQL(THrE+(2`q3I17A|d4q=l~q zbZS3pNZjJ?0V?DQ^E9!h(1^^v)UT<e0Phj>k@aWX99hW%?*hZ$zzYnr5TuO|NRNqR zET-D|hTS6sy9HgY+(NB|<^+pK$*{0YiM`RX0QTmK_|jg=?MSQHrkgRFZbU__k~Cci zTqktwVfA9R+THaJS}-IQ!OZ=yQot+9+~xTcD)#&AyO>#?ux&N_NX2eHCa8?@n^v(g z44`8B4HesR#86JrK0zC>i`^KMK)aORx83Np^Jq}zfXRx<Xok~<WC>B~FtY`Do|kH{ zMhf`ny97y+St<L>a(C&~hg&0OC6*U?d5e)q6HgcecC;d1WmJLz4#QV<BQ}9C%Cs!< z@#~nX)S?nGLWBH)?~0oGs~c&=C+{-kMbS6Qct^{uHp;}Cn+BGHuA&39^HZ=(NAoQ* z@`;A=eZt$HxHDdLt88kP28yYyq2PRqx-rN~U2Qp$nS8n^Cu5A-JIlP<L|>$gn?;-j zqx&jYxx}ba+x7NF$P3Cx^5P)OJs3)QdzGx71qtDVgmCk}ij##^Y$)EAs5LcL0m7MS z2-=^7eE6LxD3>=&+Nmrgr)0!5%=LO(47y=etO_Dxks%^LDIpXlpmIqw$D13WNd8&K zQ<CV@BgOn8z>haC1(GH#(qXD9OBSGYFjeM6mhf_;HcCoPuABxgP}?Fo{4^sPVxv0^ z%ofXq*dU`><ShOXVo7<B;kF7k>X<?DW@CA=mKk3m$DQUE^qy7^w#eEJfgUcfLJ@2L zci=cQNRl37en3Ba6#816Vo8>iH#brhutDYUJ75b$6=>r`^oT$)N{Rd)C?W&bqQm&F z5W-Ns!T<v)_7_NhTHf=GU|P1`eF%dVyqi)L_J3@G4>JidA=Tj62qys(R%7r308b8M zY9bR}9zRV~Z6P<iM~EB9PoNO^Ui(*p65MHO8ik$g7_?U4$QCw|Y01xLh~0iGo|%c} zYO++hgk9iM;Z$II?sXjZr;~Sn{zKt~Y)_t|uW?J-#FQICtvfj>5w-*(_55}L+@kLu z_8ij+4a=YjJ7+bG1QEb%3p9rTT<^1lBOx9!N~G)-de7f0Y0_JLF?@B){K8ka2tP_I zh6R7=1F=H$98u3!nh?<t`7S?Ol(%9z3hid9(wK^#IudQHQX#v!&nsC0>pS>J8UN)U z)@uJ{+P{`y`q#4kZ{-3xN4x?dOXQRRh4rCBPGGMX#-P-GK)KHiCr>g8eJau?cVSAA zI?HP@$s5t*4~*lie0p-l3Xwd`Tw>4PwiPGaPXzCR(@4Dj6Hu@lw!{{F1EC79E&6Bt zMxnSsS(F-t+JrGDJcJzVC9b{&y@V`rP9Lwuu)%<c4YMOl;0E0%hedYf7Ibxx@A`x) zvA3{ZT6sI51^ng+#W;JRuUMdOiPCZ>rtwPceEdw7v{@rSV2tu9odVEW0mv~1P*VyJ z<)(~4&>2vci`@Qi<ertv?RitpgOh7t;cIDq4XYqwZ^puhpaaE>R9@&O1rT6q5=Px_ zJdyVCn7a%i7){t;AwS5s3s+_kJaN_m9#_Q%&<|*OkIeD$KYc)rhI=WlN~ohKf1lLG zpH0VV?*aMZNK=5{pN>*z0A8PTj)2hQ<2R=hwD**IHxg-o@S@NeaDZy5cy7RRSg8}? zOA)41H7AOe6rkQrV3f>YeLlq{a-4-6=r&zA8B6N9id95ULA3J4O$0w1L6%1zuE78g z{t5AiMEnPPsH96dD4yQJld?kuUqg_cgWje++m#^DM!lW(#~KmrY(L*(i^0Z>{juuV z_quFR=#kRBI4uf8GFItDz68$4g9>E<UL!0$7N2sr0K1mJR(lC9e4F8)2DvU6BPx=Y z3Upw!s3S%DC*W6BOgq$V6sm!9Q-=(amttx3J{8;nxJ{zqnJ7rc`=c9>5m!l&hxKfB zQI%24kJGhyMdr_5phnx-+B&+d!q%X;Mf5u&+NwCj)1UFgW>Y^8YEkHZn$qE+vxf5T z0rM=q$Kpe8miqXWfDN3={A?Hh3yi%!WoQFY{8j<YNh@7VY1?UdbK88%5s|t&Ro6lB zbd`9ruph$l+ZOv7W>RRJPGy%!tRqA&5Qx~K{{SJ<`-vUYADF)-ShCR{&mv@dqGmSr z1DPo9U22PAs|r57MFE<)1d{x5VN?a(?h(L0cpkuOM*HI;N~VEo^v7N#gHqV==%D6@ z(fp^zH-8xlq?`X&NRo8(e=bVm$f?QGLCqHqZzIiLBT}u3(fo*b5_-HXM%Gr*`t<_A zg-9D|{TX1dWcIlBXCi9M=HDP1O!K4BH@jhW@hPeRlu3ZXXsH8d1_HuF&vwCHKb?Kn z^-t8fw){Hy%ytk1(}wDY#5rAL1L_<juSW#)7#cmeTMRzv3U*wgP%kRGO~hgQkLWfp zr4KIz^`0D|9_};=@B$#1rrzza^rorTD9Zm=)SF|}n4(^hQ5UU(ApFz3Qz7sW_ex+C z!?0+J{v{K-iWtN@5W*nFCihbatqaZWeEYP{&s?_X19(hSr&)U)^ihLrB;bbeToGW~ zeTq|n{^Ksta{=6T^d0$S^ITXmIc(9rpcfAFi1P}uo(|kgA@atN7f7&Boo#E~c`){z zr*9k9kLB2Y+Jyo*+w*P<sUL~G_+i@y?m{Dcid__4D2iH>i+zekL{z3CE=lJoB1A%U zB{XrBx1CqlQEb$&$Rd9(C0Eyh5rKiHt+=l3A4%MGA<{nVH}C@PXbOZXJ971)(%E*d zi<W>6TdWL>p$sKxJnuwa76SiRzRo`%8B4bEAA^6;7yncKSuT*Uif!CU%6?H<qk$OW zMtQ2rh(q^`^Fr7Me}gGs_dw7lDO&^}+Xx_+Hia#y@+-HA_@nTi0KKqw0z)n!bwjo4 zYYK+7ETMXQf?Hhz{Os#Zu*;XO#?*xErR``s4y%tIbLrDEpIQ%S0cC}Nx!Hhe$jXY1 zIAPA@M@IM^V%yKlV385?0)*v*Z;bN0B8rX*ODH2G_|;21pQ>JC6qU1ut>r~eYG;iO z@AqgsKP7rw1hjgA$O$QEhV1D#Hl4r&ooieY7O~=599#4ztRmre3}waKhm?uhbfp5t z8~A~pf-7*$dfPy~U`4lx?-lV@@ERCcESJk03)Y^*YTY<@rsb{kx+*f@HYKaHQqBis zOUWq;4p2zsGw$Y511yTOy7LM=F966|JN&5OmSKx-LvBI^c2bNQyQnXiDu6+T&DwJd zY#Y`hS8TXr3e+vTVnwC^pOwl~4XDL#c9O6sSf3;xIow5+(l~`ZYOKCVsmIed39t}t zH24Dil^vsF$BMC2(AGuc1h|+|NLU0C_aPsR?`n+is$v&*uArUT)m8+wAByv4K^`+; z(J-}?w`J9J)F)bsm~4jrORfQSF<i+`WDs9$KKm3n-2jh^MI^XY4C7wegYs>?R0oFg zkWdoOFv?-=ihE}!DO^NOHX_B`Ym2I&9@wRbG!u6Kp<>*yP=|-&fcYiAau7w7{rK|n zuKlE3xIm=&poj~)F;=L`9s%>&UeE-qTHsuUsnPrru5egmB7Je>{)T=?5+6K8?msLB znevP%7&Qv!Q!DyRu&?Ap)_@qDZCNf%<g3U$D2{xknof#BfG<QT8mLvE5Y3i8UO{kR zF(QH+3d5P0MU)3cC8r=!xkm&YlyAMe3K9u;rq;Nhyi04`0>t%RbD39Ki_b=U_TckZ zd?b^cVVqDj!(RP$f3FZLz*$2$AL61lW2y``jGhn1zJ;gCt=iUK0qC}^)#qa?(-yT- z^&Hu0X2z9bYQ&g=N+=U)k2Tsfy5}My^UsSRXhN2N0+XYZblw}#K&z!bq`XBbP$`u? zNa34j5=rc$be1hTfH>%&vA6IW;y<~D66JwE;Ymzvt2#e3X%~n|P59UR5yl;82QH9r zyn`ehCdHzIYUke-by%nlwpV}Ku1ys}H=$V!->(B7|5ls06>X3}40}=rN7(Pp&@z`{ za#(z?OKS-6FMcR6Nn*UX+a$Fb!aO5+DjwEIYMDSDn>^Is$W*?!i1J#JF2G1P`p`M4 zMhk=<5;^Rt9^VMDw1gI6OKEo;tDO9I2!QZ&OYbm?-C!#mG|VA>5Id;gnSzw7qh<^7 z<|v{JpB}ZQWSDeFHS;-Y5i}XE+EU)))r{vLKUZ8ZK{lfRqyuf%eix;IFk-x7!(k50 zBeQ{z@KJ=v65TKq;`fPMPQx~V1E0(E+Sy`brWZP=r&ohfMV%6YMP+ZHXg`^j>2fnD zzvUf8>g13@OJe?eBQ@SpB-~F@2dDHyc9u)mJYWrXWE1&klpKcOwPMO9tG@##a0|`~ z*?BLfF+LYxFq!AuqCW-5O?2CV?Qy&3HFav*UTJ&0b{Gumc}e@!IM&~J%(WUbx;k;> z@!AiAGwHGfcmT2e@OC~BuUwCMJI-e_>Bx8Ilax3?n-V+RF)1OR^UI@OvYmz7%|l5u zsUJ9f^+MYL?5x?1VoMh5@859r%@YUpO!6x+b^QYlC)ns}5A)(b5P3mxP0=gqJ_||p z0qCqvbT39FjU6?w@<jTXROzCh?8-2Hu#@-}5v=QM!FmvJxJ%2=|7{_TvBGzn|K;}t zmiDafOWH`*2O=l)dXd@ERY|Z3bW5{(&L+ahr_e<a{0c}zQ87B)sM}r%Zp2LveE)S= zcA1jd{ACJAd_Snnat$vTnVe{FQk_6Nf>nY5iAwV+-T)oXqi*9j!qltJ6g1Fx6sNZo z^g|B8!tRm-<tLH56}nloVFP{DBGEcA1KXa<j3Nn}QMi_gNLGRi5|{OhNRy-%!YutR z7DIxTYW8zyfjY@)`d20``#D&xq-2i%6-MoI-$58c!AXlGoX~m;Yg^%(ASQ|`9Bx8< znV(;rjrbxQ_1P$3(gXo#dSOv~$w5e2lTU)BCp7R6j7s6PwZw4SA|C)u5Eh(zCjTuT z9JmfZ41=WlR~GFW957yv27o+{Wt*u*$WE8sTmVdv2WC{bdn?$SmH0iPn7oxbJULw< zqYmGQIE+4Qtu4zJ1>mGH8U3-QL3GPJ1B&pZ(RVoLs!CkX<uNRM?;gO!gK+{Hd3NC_ z7;T+V<Eis}*Upo;{xlKLiN;QVSL$K7pD+#wEGr7((Abrynm|S%j@`mI!T^&Z$<tHm z$;y9rHMEukMzaJ~Zv%B8_rL;ysu=TxRa$VRe&NR=Mi<v_BuRx$3t?X5?_#19B!Bu+ z?7O%@1#W^F77#F8CWraEQv?!Awm^jA>{Ph`5@aV4d$&*1D`})k9l6S1h;R*Oip=~J zs$*!(@Jh3I19xDYp;2MZ09aIfAu4X*ZFo!#3!GeAtY(S|M-Qz-KA~0>wT2sD;<xgN ze+8l85)tO}2$G3EH5t7I_dOUcw$PRapO9+WW-7%GT!LZCZ#{wB?`)z`uCB`TwJg_W z>oX~A-$Z$j?mw|-iGFZKOI%c#2?MnR4><c+ntlVH8~y?t`59eA+%SI#xQNDGiCPsZ z&kG+$5-~r&nG#Jr$G{hUd<|P@o0DG#+eg?y_Wc=zrh**$j)LQ$selC`A0C42C4@oH z6wW1SoM{Y>#TonMgW`r9lM2uFj!wY@rf^9Qf19KUNq!%nz6_XUa0#`C`FnP%-O*yy zwH$SU{d$4;yh|~a!W>JQANGYa@Q4(HO+}+un9&nehL0*vCT_a~P>cBe|3MHi%C%R0 z{7b|EYXi1D1$!*Z0^ihjr^Vl&NsXjGe&z27h_St{%>q-y3ze^U9jtJK!7{`D=rl>o z^o6rC0DMUb^+!d;)?S89`iO)79!w4pM%A~b(#W3xj8)|pmL2S{9)f-g;1Ea+#^&Aw zuaXvvQK3$0P{<a{uL2;-0$}{`Ya=N9-Ud!4NqlradBvc=ffMo&TBao}2oWE39qI&( zwEeWo-3A{31Em`uq$UdE^M3I0U?$z!WXBHDLVgsziX^NF&nFQs<o6#g7I8v*VwL0& zi$2KUUz{N-^@tdClF>W-THt2%6*-EfTujl8?m&Mg`N`5Bf7C?%#dv?_?dhoZA0V6{ zw6uqOa1g!A0FEW4y@7u}fb8IJfk%q0bJ2!PboG>v|KSGFV@5M@t(aP?e`!`H=wHez z8j{Quh(q7Wf@Lr(S%~jRkwrY$Xenx#A>cqQ!rGnegpu#@Bd3YB2{D^X)RF!0-xfUy z9ZEZk=3-F_7p&sKFF$|T=w+m(oP!<`5acu_w%8*WE|_apps3aMT%_Li+(q@Co$6F< z>fMOE5HwgJ$OHcbeMo1wttSp(7h##`w#KU-bC%DmLl2$9Lk3{ar|mNcRDeHrJ)|2c zQ2c&`(D|^Z!if24$M%6=5eUp3w	SPe9u$J)Z(3fn$qsF#EBB_K6LAl_&<n>1~fW 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 D(_s}o literal 0 HcmV?d00001 diff --git a/plugins/sql-admin-manager.sp b/plugins/sql-admin-manager.sp index 058ef74c..1926985f 100644 --- a/plugins/sql-admin-manager.sp +++ b/plugins/sql-admin-manager.sp @@ -4,7 +4,7 @@ * SourceMod SQL Admin Manager Plugin * Adds/managers admins and groups in an SQL database. * - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IADTFactory.h b/public/IADTFactory.h index 5159642a..347eba3f 100644 --- a/public/IADTFactory.h +++ b/public/IADTFactory.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IAdminSystem.h b/public/IAdminSystem.h index 0d887ea8..8aa8961e 100644 --- a/public/IAdminSystem.h +++ b/public/IAdminSystem.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IDBDriver.h b/public/IDBDriver.h index 71d9fe2d..47ae9467 100644 --- a/public/IDBDriver.h +++ b/public/IDBDriver.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IDataPack.h b/public/IDataPack.h index 2f1fceca..a84a4416 100644 --- a/public/IDataPack.h +++ b/public/IDataPack.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IExtensionSys.h b/public/IExtensionSys.h index 3f4989a2..f4367603 100644 --- a/public/IExtensionSys.h +++ b/public/IExtensionSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IForwardSys.h b/public/IForwardSys.h index 99149b64..61e4ff5b 100644 --- a/public/IForwardSys.h +++ b/public/IForwardSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IGameConfigs.h b/public/IGameConfigs.h index 0994a183..6e555cc3 100644 --- a/public/IGameConfigs.h +++ b/public/IGameConfigs.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IGameHelpers.h b/public/IGameHelpers.h index 1467ed6c..9bc373bc 100644 --- a/public/IGameHelpers.h +++ b/public/IGameHelpers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IHandleSys.h b/public/IHandleSys.h index b92cf828..4c9c16c6 100644 --- a/public/IHandleSys.h +++ b/public/IHandleSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/ILibrarySys.h b/public/ILibrarySys.h index da6d4711..b4cc05b4 100644 --- a/public/ILibrarySys.h +++ b/public/ILibrarySys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IMemoryUtils.h b/public/IMemoryUtils.h index 1d6ba093..3334bf88 100644 --- a/public/IMemoryUtils.h +++ b/public/IMemoryUtils.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IMenuManager.h b/public/IMenuManager.h index 16099f23..dfacf2cd 100644 --- a/public/IMenuManager.h +++ b/public/IMenuManager.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IPlayerHelpers.h b/public/IPlayerHelpers.h index 18efba8b..344206f0 100644 --- a/public/IPlayerHelpers.h +++ b/public/IPlayerHelpers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IPluginSys.h b/public/IPluginSys.h index 9c8d4aa9..c6dd0313 100644 --- a/public/IPluginSys.h +++ b/public/IPluginSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IRootConsoleMenu.h b/public/IRootConsoleMenu.h index dd0da8c9..4adfc3ae 100644 --- a/public/IRootConsoleMenu.h +++ b/public/IRootConsoleMenu.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IShareSys.h b/public/IShareSys.h index 84363bbf..8c73ab46 100644 --- a/public/IShareSys.h +++ b/public/IShareSys.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/ISourceMod.h b/public/ISourceMod.h index 06f1650b..3fb97263 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/ITextParsers.h b/public/ITextParsers.h index 6cbdac95..c0ccf6d5 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IThreader.h b/public/IThreader.h index 5fce071e..69821c69 100644 --- a/public/IThreader.h +++ b/public/IThreader.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/ITimerSystem.h b/public/ITimerSystem.h index 41119b7a..28a0cf6e 100644 --- a/public/ITimerSystem.h +++ b/public/ITimerSystem.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/IUserMessages.h b/public/IUserMessages.h index c5524b1d..b63d45d8 100644 --- a/public/IUserMessages.h +++ b/public/IUserMessages.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/compat_wrappers.h b/public/compat_wrappers.h index 7ad7e484..c5fd14d4 100644 --- a/public/compat_wrappers.h +++ b/public/compat_wrappers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/extensions/IBinTools.h b/public/extensions/IBinTools.h index beda6ee6..f8334de3 100644 --- a/public/extensions/IBinTools.h +++ b/public/extensions/IBinTools.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod BinTools Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/extensions/ITopMenus.h b/public/extensions/ITopMenus.h index ef063e2d..791ec9ed 100644 --- a/public/extensions/ITopMenus.h +++ b/public/extensions/ITopMenus.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/jit/jit_helpers.h b/public/jit/jit_helpers.h index 6bb825eb..01d97763 100644 --- a/public/jit/jit_helpers.h +++ b/public/jit/jit_helpers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT SDK - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/jit/x86/x86_macros.h b/public/jit/x86/x86_macros.h index cc21970a..1cea3502 100644 --- a/public/jit/x86/x86_macros.h +++ b/public/jit/x86/x86_macros.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT SDK - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/metamod_wrappers.h b/public/metamod_wrappers.h index de686cfd..9ab73f38 100644 --- a/public/metamod_wrappers.h +++ b/public/metamod_wrappers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/mms_sample_ext/Makefile.ep2 b/public/mms_sample_ext/Makefile.ep2 index 17adc6df..18893901 100644 --- a/public/mms_sample_ext/Makefile.ep2 +++ b/public/mms_sample_ext/Makefile.ep2 @@ -1,4 +1,4 @@ -#(C)2004-2007 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson HL2SDK = ../../../hl2sdk-ob diff --git a/public/mms_sample_ext/Makefile.orig b/public/mms_sample_ext/Makefile.orig index c4b59b5a..62b17db7 100644 --- a/public/mms_sample_ext/Makefile.orig +++ b/public/mms_sample_ext/Makefile.orig @@ -1,4 +1,4 @@ -#(C)2004-2007 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson HL2SDK = ../../../hl2sdk diff --git a/public/sample_ext/Makefile b/public/sample_ext/Makefile index 06b91671..14e9ae3d 100644 --- a/public/sample_ext/Makefile +++ b/public/sample_ext/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # do not need to be built against HL2SDK, and do not require diff --git a/public/sample_ext/Makefile.ep1 b/public/sample_ext/Makefile.ep1 index 4453f66d..dac5921d 100644 --- a/public/sample_ext/Makefile.ep1 +++ b/public/sample_ext/Makefile.ep1 @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.4.2, Episode 1 of the HL2SDK. diff --git a/public/sample_ext/Makefile.ep2 b/public/sample_ext/Makefile.ep2 index a5eab11b..ae87c584 100644 --- a/public/sample_ext/Makefile.ep2 +++ b/public/sample_ext/Makefile.ep2 @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.6.0, Episode 2 of the HL2SDK. diff --git a/public/sample_ext/Makefile.orig b/public/sample_ext/Makefile.orig index a838022c..61348368 100644 --- a/public/sample_ext/Makefile.orig +++ b/public/sample_ext/Makefile.orig @@ -1,4 +1,4 @@ -#(C)2004-2007 AlliedModders LLC +#(C)2004-2008 AlliedModders LLC # # This sample Makefile is designed for SourceMod extensions that # are built against Metamod:Source 1.6.0, Episode 1 of the HL2SDK. diff --git a/public/sample_ext/extension.cpp b/public/sample_ext/extension.cpp index d05a6c56..be2bfb71 100644 --- a/public/sample_ext/extension.cpp +++ b/public/sample_ext/extension.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sample_ext/extension.h b/public/sample_ext/extension.h index d8f445a4..719d36c2 100644 --- a/public/sample_ext/extension.h +++ b/public/sample_ext/extension.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sample_ext/sdk/smsdk_config.h b/public/sample_ext/sdk/smsdk_config.h index 59fb0874..8a46207c 100644 --- a/public/sample_ext/sdk/smsdk_config.h +++ b/public/sample_ext/sdk/smsdk_config.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Sample Extension - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sample_ext/sdk/smsdk_ext.cpp b/public/sample_ext/sdk/smsdk_ext.cpp index 0c728f00..bf027ac5 100644 --- a/public/sample_ext/sdk/smsdk_ext.cpp +++ b/public/sample_ext/sdk/smsdk_ext.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sample_ext/sdk/smsdk_ext.h b/public/sample_ext/sdk/smsdk_ext.h index 4702f2a2..0ee0dfa2 100644 --- a/public/sample_ext/sdk/smsdk_ext.h +++ b/public/sample_ext/sdk/smsdk_ext.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod Base Extension Code - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sm_platform.h b/public/sm_platform.h index 2cc0e29f..50928e61 100644 --- a/public/sm_platform.h +++ b/public/sm_platform.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sm_trie_tpl.h b/public/sm_trie_tpl.h index 5018c8a2..dce77f46 100644 --- a/public/sm_trie_tpl.h +++ b/public/sm_trie_tpl.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sourcepawn/sp_file_headers.h b/public/sourcepawn/sp_file_headers.h index 5445f2f3..0ee3572f 100644 --- a/public/sourcepawn/sp_file_headers.h +++ b/public/sourcepawn/sp_file_headers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sourcepawn/sp_typeutil.h b/public/sourcepawn/sp_typeutil.h index 3796c5a5..78eb0f5a 100644 --- a/public/sourcepawn/sp_typeutil.h +++ b/public/sourcepawn/sp_typeutil.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sourcepawn/sp_vm_api.h b/public/sourcepawn/sp_vm_api.h index 100dcaaa..8c780c43 100644 --- a/public/sourcepawn/sp_vm_api.h +++ b/public/sourcepawn/sp_vm_api.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sourcepawn/sp_vm_base.h b/public/sourcepawn/sp_vm_base.h index 18ed778a..e94b18cb 100644 --- a/public/sourcepawn/sp_vm_base.h +++ b/public/sourcepawn/sp_vm_base.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/public/sourcepawn/sp_vm_types.h b/public/sourcepawn/sp_vm_types.h index 4b348a86..165fbcb4 100644 --- a/public/sourcepawn/sp_vm_types.h +++ b/public/sourcepawn/sp_vm_types.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under diff --git a/sourcepawn/compiler/Makefile b/sourcepawn/compiler/Makefile index c7b7c1dd..8363fdfe 100644 --- a/sourcepawn/compiler/Makefile +++ b/sourcepawn/compiler/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2007 SourceMod Development Team +#(C)2004-2008 SourceMod Development Team # Makefile written by David "BAILOPAN" Anderson SMSDK = ../.. diff --git a/sourcepawn/compiler/sc1.c b/sourcepawn/compiler/sc1.c index 75828758..f6e5bb26 100644 --- a/sourcepawn/compiler/sc1.c +++ b/sourcepawn/compiler/sc1.c @@ -1191,7 +1191,7 @@ static void setconfig(char *root) static void setcaption(void) { pc_printf("SourcePawn Compiler " SVN_FULL_VERSION "\n"); - pc_printf("Copyright (c) 1997-2006, ITB CompuPhase, (C)2004-2007 AlliedModders, LLC\n\n"); + pc_printf("Copyright (c) 1997-2006, ITB CompuPhase, (C)2004-2008 AlliedModders, LLC\n\n"); } static void about(void) diff --git a/sourcepawn/compiler/svn_version.h b/sourcepawn/compiler/svn_version.h index bd964324..b14e45ce 100644 --- a/sourcepawn/compiler/svn_version.h +++ b/sourcepawn/compiler/svn_version.h @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * =============================================================== - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * =============================================================== * * This file is not open source and may not be copied without explicit diff --git a/sourcepawn/compiler/svn_version.tpl b/sourcepawn/compiler/svn_version.tpl index a0947f6d..fab83d15 100644 --- a/sourcepawn/compiler/svn_version.tpl +++ b/sourcepawn/compiler/svn_version.tpl @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * =============================================================== - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * =============================================================== * * This file is not open source and may not be copied without explicit diff --git a/sourcepawn/jit/x86/Makefile b/sourcepawn/jit/x86/Makefile index d6bd4873..9ba72d91 100644 --- a/sourcepawn/jit/x86/Makefile +++ b/sourcepawn/jit/x86/Makefile @@ -1,4 +1,4 @@ -#(C)2004-2006 SourceMM Development Team +#(C)2004-2008 Metamod:Source Development Team # Makefile written by David "BAILOPAN" Anderson SRCDS = ~/srcds diff --git a/sourcepawn/jit/x86/dll_exports.cpp b/sourcepawn/jit/x86/dll_exports.cpp index c69666c1..01462553 100644 --- a/sourcepawn/jit/x86/dll_exports.cpp +++ b/sourcepawn/jit/x86/dll_exports.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/dll_exports.h b/sourcepawn/jit/x86/dll_exports.h index 61475988..f72cbe33 100644 --- a/sourcepawn/jit/x86/dll_exports.h +++ b/sourcepawn/jit/x86/dll_exports.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/jit_version.h b/sourcepawn/jit/x86/jit_version.h index 525849a2..f71e054c 100644 --- a/sourcepawn/jit/x86/jit_version.h +++ b/sourcepawn/jit/x86/jit_version.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/jit_version.tpl b/sourcepawn/jit/x86/jit_version.tpl index 8f087fb3..ec873f89 100644 --- a/sourcepawn/jit/x86/jit_version.tpl +++ b/sourcepawn/jit/x86/jit_version.tpl @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 23e9a22c..9b2f24cb 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/jit_x86.h b/sourcepawn/jit/x86/jit_x86.h index a1d9dc0b..aade883d 100644 --- a/sourcepawn/jit/x86/jit_x86.h +++ b/sourcepawn/jit/x86/jit_x86.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/opcode_helpers.cpp b/sourcepawn/jit/x86/opcode_helpers.cpp index 55cbfe0a..079e23aa 100644 --- a/sourcepawn/jit/x86/opcode_helpers.cpp +++ b/sourcepawn/jit/x86/opcode_helpers.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/opcode_helpers.h b/sourcepawn/jit/x86/opcode_helpers.h index c7bb2c75..a3d48148 100644 --- a/sourcepawn/jit/x86/opcode_helpers.h +++ b/sourcepawn/jit/x86/opcode_helpers.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/opcode_switch.inc b/sourcepawn/jit/x86/opcode_switch.inc index e62c5791..eda57a91 100644 --- a/sourcepawn/jit/x86/opcode_switch.inc +++ b/sourcepawn/jit/x86/opcode_switch.inc @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/ungen_opcode_switch.inc b/sourcepawn/jit/x86/ungen_opcode_switch.inc index 4e9c8102..b6f11b68 100644 --- a/sourcepawn/jit/x86/ungen_opcode_switch.inc +++ b/sourcepawn/jit/x86/ungen_opcode_switch.inc @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/ungen_opcodes.h b/sourcepawn/jit/x86/ungen_opcodes.h index 7cb0181d..20810474 100644 --- a/sourcepawn/jit/x86/ungen_opcodes.h +++ b/sourcepawn/jit/x86/ungen_opcodes.h @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourcePawn JIT - * Copyright (C)2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is not open source and may not be copied without explicit wriiten diff --git a/sourcepawn/jit/x86/version.rc b/sourcepawn/jit/x86/version.rc index 60a7087f..5aa4d331 100644 --- a/sourcepawn/jit/x86/version.rc +++ b/sourcepawn/jit/x86/version.rc @@ -48,7 +48,7 @@ BEGIN VALUE "FileDescription", "SourcePawn JIT/Virtual Machine" VALUE "FileVersion", SVN_FULL_VERSION VALUE "InternalName", "sourcemod" - VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC" + VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC" VALUE "OriginalFilename", "sourcepawn.jit.x86.dll" VALUE "ProductName", "SourcePawn JIT" VALUE "ProductVersion", SVN_FULL_VERSION From a3d5a0151d8f44e9708128075fcd17a0197dda4c Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Thu, 27 Mar 2008 05:02:00 +0000 Subject: [PATCH 261/263] Err, these got added accidentally apparently. Thanks a lot TSVN. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401965 --- plugins/compile.exe | Bin 113664 -> 0 bytes plugins/spcomp.exe | Bin 315392 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 plugins/compile.exe delete mode 100644 plugins/spcomp.exe diff --git a/plugins/compile.exe b/plugins/compile.exe deleted file mode 100644 index 5cfa71745a0f2c074e28f28bfd3da9f0678ed30d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113664 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Ȑs4I)X!98al#8kd#5EUPfL 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 diff --git a/plugins/spcomp.exe b/plugins/spcomp.exe deleted file mode 100644 index bd3a7118228c50550ca431ee74bfde5b537ad314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315392 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	SPe9u$J)Z(3fn$qsF#EBB_K6LAl_&<n>1~fW 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 D(_s}o From 33b2847ec311222136df9b513ede2d067974033e Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Fri, 28 Mar 2008 04:51:53 +0000 Subject: [PATCH 262/263] Added scripting/adminmenu directory to build tool --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401968 --- tools/builder/PkgCore.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/builder/PkgCore.cs b/tools/builder/PkgCore.cs index e0d3a9c3..e0f5439b 100644 --- a/tools/builder/PkgCore.cs +++ b/tools/builder/PkgCore.cs @@ -51,6 +51,7 @@ namespace builder folders.Add("addons/sourcemod/data"); folders.Add("addons/sourcemod/scripting/include"); folders.Add("addons/sourcemod/scripting/admin-flatfile"); + folders.Add("addons/sourcemod/scripting/adminmenu"); folders.Add("addons/sourcemod/scripting/testsuite"); folders.Add("cfg/sourcemod"); folders.Add("addons/sourcemod/configs/sql-init-scripts"); @@ -114,6 +115,7 @@ namespace builder builder.CopyFolder(this, "translations", "addons/sourcemod/translations", null); builder.CopyFolder(this, "public/licenses", "addons/sourcemod", null); builder.CopyFolder(this, "plugins/admin-flatfile", "addons/sourcemod/scripting/admin-flatfile", null); + builder.CopyFolder(this, "plugins/adminmenu", "addons/sourcemod/scripting/adminmenu", null); builder.CopyFolder(this, "plugins/testsuite", "addons/sourcemod/scripting/testsuite", null); builder.CopyFolder(this, "plugins/basecommands", "addons/sourcemod/scripting/basecommands", null); builder.CopyFolder(this, "plugins/basecomm", "addons/sourcemod/scripting/basecomm", null); From 3a14544385f3a87189d3a44e86746effb83f3b64 Mon Sep 17 00:00:00 2001 From: Scott Ehlert <ds@alliedmods.net> Date: Fri, 28 Mar 2008 06:18:26 +0000 Subject: [PATCH 263/263] Changed env var used in include paths: SOURCEMM -> SORCEMM16 Changed env var used in include paths: SOURCEMM142 -> SORCEMM14 Removed some unneccessary build configuartations in some project files --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401969 --- extensions/cstrike/msvc8/cstrike.vcproj | 160 ------- extensions/mysql/msvc8/sm_mysql.vcproj | 4 +- extensions/sdktools/msvc8/sdktools.vcproj | 210 ++-------- extensions/sqlite/msvc8/sm_sqlite.vcproj | 4 +- extensions/tf2/msvc8/tf2.sln | 12 - extensions/tf2/msvc8/tf2.vcproj | 490 +--------------------- extensions/topmenus/msvc8/topmenus.vcproj | 4 +- 7 files changed, 34 insertions(+), 850 deletions(-) diff --git a/extensions/cstrike/msvc8/cstrike.vcproj b/extensions/cstrike/msvc8/cstrike.vcproj index 8821c1ee..6aa76a40 100644 --- a/extensions/cstrike/msvc8/cstrike.vcproj +++ b/extensions/cstrike/msvc8/cstrike.vcproj @@ -15,166 +15,6 @@ <ToolFiles> </ToolFiles> <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="tier0.lib" - OutputFile="$(OutDir)\game.cstrike.ext.dll" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)\game.cstrike.ext.dll" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> <Configuration Name="Debug - Episode1|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" diff --git a/extensions/mysql/msvc8/sm_mysql.vcproj b/extensions/mysql/msvc8/sm_mysql.vcproj index 67a32d4a..dac43eaf 100644 --- a/extensions/mysql/msvc8/sm_mysql.vcproj +++ b/extensions/mysql/msvc8/sm_mysql.vcproj @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -123,7 +123,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" StructMemberAlignment="3" diff --git a/extensions/sdktools/msvc8/sdktools.vcproj b/extensions/sdktools/msvc8/sdktools.vcproj index bc11f13a..630e9895 100644 --- a/extensions/sdktools/msvc8/sdktools.vcproj +++ b/extensions/sdktools/msvc8/sdktools.vcproj @@ -15,168 +15,6 @@ <ToolFiles> </ToolFiles> <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="vstdlib.lib tier0.lib tier1.lib mathlib.lib" - OutputFile="$(OutDir)\sdktools.ext.dll" - LinkIncremental="2" - IgnoreDefaultLibraryNames="LIBCMT" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="vstdlib.lib tier0.lib tier1.lib mathlib.lib" - OutputFile="$(OutDir)\sdktools.ext.dll" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> <Configuration Name="Debug - Orange Box|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" @@ -202,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -283,7 +121,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -364,7 +202,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -446,7 +284,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -527,7 +365,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -608,7 +446,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -796,24 +634,6 @@ <File RelativePath="..\sdk\smsdk_ext.cpp" > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCLCompilerTool" - ObjectFile="$(IntDir)\$(InputName)1.obj" - XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCLCompilerTool" - ObjectFile="$(IntDir)\$(InputName)1.obj" - XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" - /> - </FileConfiguration> <FileConfiguration Name="Debug - Orange Box|Win32" > @@ -868,6 +688,24 @@ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" /> </FileConfiguration> + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + ObjectFile="$(IntDir)\$(InputName)1.obj" + XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + ObjectFile="$(IntDir)\$(InputName)1.obj" + XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" + /> + </FileConfiguration> </File> <File RelativePath="..\sdk\smsdk_ext.h" diff --git a/extensions/sqlite/msvc8/sm_sqlite.vcproj b/extensions/sqlite/msvc8/sm_sqlite.vcproj index 8d9eb24f..f399dbc4 100644 --- a/extensions/sqlite/msvc8/sm_sqlite.vcproj +++ b/extensions/sqlite/msvc8/sm_sqlite.vcproj @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;THREADSAFE;SQLITE_OMIT_LOAD_EXTENSION" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -120,7 +120,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;SQLITE_THREADSAFE;SQLITE_OMIT_LOAD_EXTENSION;_WIN32_WINNT=0x0400" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" diff --git a/extensions/tf2/msvc8/tf2.sln b/extensions/tf2/msvc8/tf2.sln index 5aa5277e..02dbd658 100644 --- a/extensions/tf2/msvc8/tf2.sln +++ b/extensions/tf2/msvc8/tf2.sln @@ -5,24 +5,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tf2", "tf2.vcproj", "{B3E79 EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Episode1|Win32 = Debug - Episode1|Win32 - Debug - Old Metamod|Win32 = Debug - Old Metamod|Win32 Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Release - Episode 1|Win32 = Release - Episode 1|Win32 - Release - Old Metamod|Win32 = Release - Old Metamod|Win32 Release - Orange Box|Win32 = Release - Orange Box|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode1|Win32.ActiveCfg = Debug - Episode1|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Episode1|Win32.Build.0 = Debug - Episode1|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Old Metamod|Win32.ActiveCfg = Debug - Old Metamod|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Old Metamod|Win32.Build.0 = Debug - Old Metamod|Win32 {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.ActiveCfg = Release - Episode 1|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Episode 1|Win32.Build.0 = Release - Episode 1|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Old Metamod|Win32.ActiveCfg = Release - Old Metamod|Win32 - {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Old Metamod|Win32.Build.0 = Release - Old Metamod|Win32 {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 {B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 EndGlobalSection diff --git a/extensions/tf2/msvc8/tf2.vcproj b/extensions/tf2/msvc8/tf2.vcproj index 67172d95..3f28568f 100644 --- a/extensions/tf2/msvc8/tf2.vcproj +++ b/extensions/tf2/msvc8/tf2.vcproj @@ -15,246 +15,6 @@ <ToolFiles> </ToolFiles> <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="tier0.lib" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Debug - Episode1|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> <Configuration Name="Debug - Orange Box|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" @@ -280,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -303,7 +63,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.tf2.ext.dll" LinkIncremental="2" GenerateDebugInformation="true" @@ -335,167 +95,6 @@ Name="VCPostBuildEventTool" /> </Configuration> - <Configuration - Name="Debug - Old Metamod|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release - Old Metamod|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM142);$(SOURCEMM142)\sourcemm;$(SOURCEMM142)\sourcehook" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> <Configuration Name="Release - Orange Box|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" @@ -522,7 +121,7 @@ <Tool Name="VCCLCompilerTool" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" EnableEnhancedInstructionSet="1" @@ -543,88 +142,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDKOB)\lib\public\tier0.lib $(HL2SDKOB)\lib\public\tier1.lib $(HL2SDKOB)\lib\public\vstdlib.lib $(HL2SDKOB)\lib\public\mathlib.lib" - OutputFile="$(OutDir)\game.tf2.ext.dll" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release - Episode 1|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="2" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - FavorSizeOrSpeed="1" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM);$(SOURCEMM)\sourcemm;$(SOURCEMM)\sourcehook" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" - RuntimeLibrary="0" - EnableEnhancedInstructionSet="1" - RuntimeTypeInfo="false" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="$(HL2SDK)\lib\public\tier0.lib $(HL2SDK)\lib\public\tier1.lib $(HL2SDK)\lib\public\vstdlib.lib $(HL2SDK)\lib\public\mathlib.lib" + AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib"" OutputFile="$(OutDir)\game.tf2.ext.dll" LinkIncremental="1" GenerateDebugInformation="true" diff --git a/extensions/topmenus/msvc8/topmenus.vcproj b/extensions/topmenus/msvc8/topmenus.vcproj index a585fa55..459b5675 100644 --- a/extensions/topmenus/msvc8/topmenus.vcproj +++ b/extensions/topmenus/msvc8/topmenus.vcproj @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -118,7 +118,7 @@ /> <Tool Name="VCCLCompilerTool" - AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(SOURCEMM)\sourcehook" + AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook"" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD" RuntimeLibrary="0" RuntimeTypeInfo="false"