Compare commits
29
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4acbd45a34 | ||
|
|
c46a4e0a41 | ||
|
|
4916b99c1a | ||
|
|
012d58cc29 | ||
|
|
e7344c6b62 | ||
|
|
e41c7fddca | ||
|
|
4b1d372004 | ||
|
|
d120789a23 | ||
|
|
154be77ccb | ||
|
|
d5d620340d | ||
|
|
4c29a78f56 | ||
|
|
f05b9ef600 | ||
|
|
6a8e6837a7 | ||
|
|
d9bfdd3ae4 | ||
|
|
0c29170bba | ||
|
|
7f2765af9b | ||
|
|
51ae63bd78 | ||
|
|
f37c188b5a | ||
|
|
34ae5da0cb | ||
|
|
365dee321f | ||
|
|
aea5ad1459 | ||
|
|
2aa592ae2f | ||
|
|
fef508156b | ||
|
|
9347be33c3 | ||
|
|
52ed344653 | ||
|
|
a25b9d4b53 | ||
|
|
9e0590e12f | ||
|
|
f6b9b99abe | ||
|
|
2b5bf29dfc |
@@ -10,3 +10,9 @@ c5062ca8283033cf33f45da6f19e486ca10835ff sourcemod-1.3.3
|
||||
4d6afc42522c8f416dc45be7af7b145507b00630 sourcemod-1.3.4
|
||||
9de8baa40cc593d8ca5f976a3357772e804ae9e8 sourcemod-1.3.5
|
||||
8036343199caaf2812b21bb24f1fa84bf5a9e2ef sourcemod-1.3.6
|
||||
0f35d8b324ba8f6272dac3e473f056b451a13b54 sourcemod-1.3.7
|
||||
2726e2ec8c90bfc547753c5a2a160b726587ecde sourcemod-1.3.8
|
||||
2726e2ec8c90bfc547753c5a2a160b726587ecde sourcemod-1.3.8
|
||||
fa2f05c3ae003a01cc0d65df8998fcb1a936328e sourcemod-1.3.8
|
||||
fa2f05c3ae003a01cc0d65df8998fcb1a936328e sourcemod-1.3.8
|
||||
0000000000000000000000000000000000000000 sourcemod-1.3.8
|
||||
|
||||
+1
-1
@@ -84,7 +84,7 @@ class SM:
|
||||
self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse')
|
||||
self.compiler.AddToListVar('CFLAGS', '-msse')
|
||||
self.compiler.AddToListVar('CFLAGS', '-m32')
|
||||
self.compiler.AddToListVar('CFLAGS', '-static-libgcc')
|
||||
self.compiler.AddToListVar('POSTLINKFLAGS', '-static-libgcc')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
|
||||
|
||||
+25
-1
@@ -1,6 +1,30 @@
|
||||
SourceMod Changelog
|
||||
|
||||
----------------------------
|
||||
-----------------------------
|
||||
|
||||
SourceMod 1.3.8 [2011-06-23]
|
||||
|
||||
URL: http://wiki.alliedmods.net/SourceMod_1.3.8_Release_Notes
|
||||
|
||||
User Changes:
|
||||
|
||||
- Updated support for latest OrangeBox engine changes (CS:S, DoD:S, TF2, HL2DM, GMod).
|
||||
- Updated support for various games, including Garry's Mod, Zombie Panic, and Dino D-Day.
|
||||
- Added gamedata for Eternal Silence.
|
||||
- Fixed libgcc_s.so.1 load error present on some systems (bug 4876).
|
||||
- Handle leak notices now print to error log (in addition fatal log) (bug 4929).
|
||||
- Translator now properly falls back on bad server language (bug 4861).
|
||||
- Fixed invalid client errors from bad MaxClients value when SourceTV is late-loaded (bug 4881).
|
||||
- Fixed crash on plugin unload when two commands exist with same name, different casing (bug 4698).
|
||||
|
||||
Developer Changes:
|
||||
|
||||
- Updated TF2 condition defines (bug 4916).
|
||||
- Fixed var names and docs for TF2_MakeBleed native (bug 4928).
|
||||
- Removed compiler double include check (bug 4863).
|
||||
- Fixed plugin compile errors when using GetEntityClassname (bug 4798).
|
||||
|
||||
---------------------------
|
||||
|
||||
SourceMod 1.3.7 [2011-04-15]
|
||||
|
||||
|
||||
+36
-39
@@ -226,30 +226,38 @@ void ConCmdManager::SetCommandClient(int client)
|
||||
m_CmdClient = client + 1;
|
||||
}
|
||||
|
||||
ConCmdInfo *ConCmdManager::FindInTrie(const char *name)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&pInfo))
|
||||
return NULL;
|
||||
return pInfo;
|
||||
}
|
||||
|
||||
ConCmdList::iterator ConCmdManager::FindInList(const char *cmd)
|
||||
{
|
||||
List<ConCmdInfo *>::iterator iter = m_CmdList.begin();
|
||||
|
||||
while (iter != m_CmdList.end())
|
||||
{
|
||||
if (strcasecmp((*iter)->pCmd->GetName(), cmd) == 0)
|
||||
break;
|
||||
iter++;
|
||||
}
|
||||
|
||||
return iter;
|
||||
}
|
||||
|
||||
ResultType ConCmdManager::DispatchClientCommand(int client, const char *cmd, int args, ResultType type)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
|
||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
||||
if ((pInfo = FindInTrie(cmd)) == NULL)
|
||||
{
|
||||
List<ConCmdInfo *>::iterator iter;
|
||||
|
||||
pInfo = NULL;
|
||||
iter = m_CmdList.begin();
|
||||
while (iter != m_CmdList.end())
|
||||
{
|
||||
if (strcasecmp((*iter)->pCmd->GetName(), cmd) == 0)
|
||||
{
|
||||
pInfo = (*iter);
|
||||
break;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
|
||||
if (pInfo == NULL)
|
||||
{
|
||||
ConCmdList::iterator item = FindInList(cmd);
|
||||
if (item == m_CmdList.end())
|
||||
return type;
|
||||
}
|
||||
pInfo = *item;
|
||||
}
|
||||
|
||||
cell_t result = type;
|
||||
@@ -314,35 +322,20 @@ void ConCmdManager::InternalDispatch(const CCommand &command)
|
||||
*/
|
||||
const char *cmd = g_HL2.CurrentCommandName();
|
||||
|
||||
ConCmdInfo *pInfo;
|
||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
||||
ConCmdInfo *pInfo = FindInTrie(cmd);
|
||||
if (pInfo == NULL)
|
||||
{
|
||||
/* Unfortunately, we now have to do a slow lookup because Valve made client commands
|
||||
* case-insensitive. We can't even use our sortedness.
|
||||
*/
|
||||
if (client == 0 && !engine->IsDedicatedServer())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<ConCmdInfo *>::iterator iter;
|
||||
ConCmdList::iterator item = FindInList(cmd);
|
||||
if (item == m_CmdList.end())
|
||||
return;
|
||||
|
||||
pInfo = NULL;
|
||||
iter = m_CmdList.begin();
|
||||
while (iter != m_CmdList.end())
|
||||
{
|
||||
if (strcasecmp((*iter)->pCmd->GetName(), cmd) == 0)
|
||||
{
|
||||
pInfo = (*iter);
|
||||
break;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
|
||||
if (pInfo == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pInfo = *item;
|
||||
}
|
||||
|
||||
/* This is a hack to prevent say triggers from firing on messages that were
|
||||
@@ -916,6 +909,10 @@ ConCmdInfo *ConCmdManager::AddOrFindCommand(const char *name, const char *descri
|
||||
ConCmdInfo *pInfo;
|
||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&pInfo))
|
||||
{
|
||||
ConCmdList::iterator item = FindInList(name);
|
||||
if (item != m_CmdList.end())
|
||||
return *item;
|
||||
|
||||
pInfo = new ConCmdInfo();
|
||||
/* Find the commandopan */
|
||||
ConCommand *pCmd = FindCommand(name);
|
||||
|
||||
@@ -92,6 +92,8 @@ struct ConCmdInfo
|
||||
bool is_admin_set; /**< Whether or not admin info is set */
|
||||
};
|
||||
|
||||
typedef List<ConCmdInfo *> ConCmdList;
|
||||
|
||||
class ConCmdManager :
|
||||
public SMGlobalClass,
|
||||
public IRootConsoleCommand,
|
||||
@@ -139,6 +141,12 @@ private:
|
||||
void RemoveConCmds(List<CmdHook *> &cmdlist);
|
||||
void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
|
||||
bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
|
||||
|
||||
// Case insensitive
|
||||
ConCmdList::iterator FindInList(const char *name);
|
||||
|
||||
// Case sensitive
|
||||
ConCmdInfo *FindInTrie(const char *name);
|
||||
public:
|
||||
inline int GetCommandClient()
|
||||
{
|
||||
@@ -151,7 +159,7 @@ public:
|
||||
private:
|
||||
Trie *m_pCmds; /* command lookup */
|
||||
Trie *m_pCmdGrps; /* command group lookup */
|
||||
List<ConCmdInfo *> m_CmdList; /* command list */
|
||||
ConCmdList m_CmdList; /* command list */
|
||||
int m_CmdClient; /* current client */
|
||||
BaseStringTable m_Strings; /* string table */
|
||||
};
|
||||
|
||||
+7
-3
@@ -950,6 +950,10 @@ bool HandleSystem::InitAccessDefaults(TypeAccess *pTypeAccess, HandleAccess *pHa
|
||||
return true;
|
||||
}
|
||||
|
||||
#define HANDLE_LOG_VERY_BAD(message, ...) \
|
||||
g_Logger.LogFatal(message, ##__VA_ARGS__); \
|
||||
g_Logger.LogError(message, ##__VA_ARGS__);
|
||||
|
||||
bool HandleSystem::TryAndFreeSomeHandles()
|
||||
{
|
||||
IPluginIterator *pl_iter = g_PluginSys.GetPluginIterator();
|
||||
@@ -995,9 +999,9 @@ bool HandleSystem::TryAndFreeSomeHandles()
|
||||
return false;
|
||||
}
|
||||
|
||||
g_Logger.LogFatal("[SM] MEMORY LEAK DETECTED IN PLUGIN (file \"%s\")", highest_owner->GetFilename());
|
||||
g_Logger.LogFatal("[SM] Unloading plugin to free %d handles.", highest_handle_count);
|
||||
g_Logger.LogFatal("[SM] Contact the author(s) of this plugin to correct this error.", highest_handle_count);
|
||||
HANDLE_LOG_VERY_BAD("[SM] MEMORY LEAK DETECTED IN PLUGIN (file \"%s\")", highest_owner->GetFilename());
|
||||
HANDLE_LOG_VERY_BAD("[SM] Unloading plugin to free %d handles.", highest_handle_count);
|
||||
HANDLE_LOG_VERY_BAD("[SM] Contact the author(s) of this plugin to correct this error.", highest_handle_count);
|
||||
|
||||
highest_owner->GetBaseContext()->ThrowNativeErrorEx(SP_ERROR_MEMACCESS, "Memory leak");
|
||||
|
||||
|
||||
@@ -235,7 +235,10 @@ void PlayerManager::OnServerActivate(edict_t *pEdictList, int edictCount, int cl
|
||||
if (!m_FirstPass)
|
||||
{
|
||||
/* Initialize all players */
|
||||
m_maxClients = clientMax;
|
||||
|
||||
// clientMax will not necessarily be correct here (such as on late SourceTV enable)
|
||||
m_maxClients = gpGlobals->maxClients;
|
||||
|
||||
m_PlayerCount = 0;
|
||||
m_Players = new CPlayer[ABSOLUTE_PLAYER_LIMIT + 1];
|
||||
m_AuthQueue = new unsigned int[ABSOLUTE_PLAYER_LIMIT + 1];
|
||||
|
||||
+4
-2
@@ -887,8 +887,10 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file)
|
||||
strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
|
||||
m_ServerLang = SOURCEMOD_LANGUAGE_ENGLISH;
|
||||
}
|
||||
|
||||
m_ServerLang = reinterpret_cast<unsigned int>(serverLang);
|
||||
else
|
||||
{
|
||||
m_ServerLang = reinterpret_cast<unsigned int>(serverLang);
|
||||
}
|
||||
|
||||
if (!m_Languages.size())
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "time.h"
|
||||
#include "RegNatives.h"
|
||||
|
||||
// native TF2_MakeBleed(client, victim, Float:duration)
|
||||
// native TF2_MakeBleed(client, attacker, Float:duration)
|
||||
cell_t TF2_MakeBleed(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
static ICallWrapper *pWrapper = NULL;
|
||||
@@ -62,8 +62,8 @@ cell_t TF2_MakeBleed(IPluginContext *pContext, const cell_t *params)
|
||||
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
||||
}
|
||||
|
||||
CBaseEntity *pTarget;
|
||||
if (!(pTarget = UTIL_GetCBaseEntity(params[2], true)))
|
||||
CBaseEntity *pAttacker;
|
||||
if (!(pAttacker = UTIL_GetCBaseEntity(params[2], true)))
|
||||
{
|
||||
return pContext->ThrowNativeError("Client index %d is not valid", params[2]);
|
||||
}
|
||||
@@ -75,7 +75,7 @@ cell_t TF2_MakeBleed(IPluginContext *pContext, const cell_t *params)
|
||||
|
||||
*(void **)vptr = obj;
|
||||
vptr += sizeof(void *);
|
||||
*(CBaseEntity **)vptr = pTarget;
|
||||
*(CBaseEntity **)vptr = pAttacker;
|
||||
vptr += sizeof(CBaseEntity *);
|
||||
*(CBaseEntity **)vptr = NULL;
|
||||
vptr += sizeof(CBaseEntity *);
|
||||
|
||||
@@ -143,6 +143,8 @@
|
||||
"game" "RnLBeta"
|
||||
"game" "fas"
|
||||
"game" "fistful_of_frags"
|
||||
"game" "dinodday"
|
||||
"game" "esmod"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
@@ -171,6 +173,7 @@
|
||||
"game" "cstrike"
|
||||
"game" "RnLBeta"
|
||||
"game" "fistful_of_frags"
|
||||
"game" "dinodday"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
@@ -203,6 +206,7 @@
|
||||
"game" "fistful_of_frags"
|
||||
"game" "swarm"
|
||||
"game" "dinodday"
|
||||
"game" "esmod"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
"game" "hidden"
|
||||
"game" "zombie_master"
|
||||
"game" "NeotokyoSource"
|
||||
"game" "esmod"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
"game" "hidden"
|
||||
"game" "zombie_master"
|
||||
"game" "NeotokyoSource"
|
||||
"game" "esmod"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
"SetUserCvar"
|
||||
{
|
||||
"windows" "17"
|
||||
"linux" "56"
|
||||
"linux" "57"
|
||||
}
|
||||
/**
|
||||
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
* Do not edit this file. Any changes will be overwritten by the gamedata
|
||||
* updater or by upgrading your SourceMod install.
|
||||
*
|
||||
* To override data in this file, create a subdirectory named "custom" and
|
||||
* place your own gamedata file(s) inside of it. Such files will be parsed
|
||||
* after SM's own.
|
||||
*
|
||||
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod)
|
||||
*/
|
||||
|
||||
"Games"
|
||||
{
|
||||
/* Eternal Silence */
|
||||
"esmod"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
/* CBasePlayer */
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "333"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "231"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "229"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "193"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "194"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "100"
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "361"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "128"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "120"
|
||||
}
|
||||
"DispatchKeyValue"
|
||||
{
|
||||
"windows" "33"
|
||||
}
|
||||
"DispatchKeyValueFloat"
|
||||
{
|
||||
"windows" "32"
|
||||
}
|
||||
"DispatchKeyValueVector"
|
||||
{
|
||||
"windows" "31"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
"windows" "37"
|
||||
}
|
||||
"SetEntityModel"
|
||||
{
|
||||
"windows" "27"
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "222"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
"windows" "34"
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "304"
|
||||
}
|
||||
|
||||
|
||||
/* Offset into CreateGameRulesObject */
|
||||
"g_pGameRules"
|
||||
{
|
||||
"windows" "2"
|
||||
}
|
||||
|
||||
"FireOutputBackup"
|
||||
{
|
||||
"windows" "6"
|
||||
"linux" "6"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"CreateGameRulesObject"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\c2A\x2A\x6A\x01\xFF"
|
||||
}
|
||||
"FindEntityByClassname"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x2A\x2A\x2A\x85\xC9\x57\x74\x2A\x8B\x01\x8B\x2A\x2A\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\xEB\x2A\x8D\x2A\x2A\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\x2A\x2A\xEB\x2A\x39"
|
||||
}
|
||||
"DispatchSpawn"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x53\x55\x56\x8B\x2A\x2A\x2A\x85\xF6\x57\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x03\x8B"
|
||||
}
|
||||
"CreateEntityByName"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x56\x8B\x2A\x2A\x2A\x83\xFE\xFF\x57\x8B\x2A\x2A\x2A\x74\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x2A\x2A\x56\xFF\xD2"
|
||||
}
|
||||
"FireOutput"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x2A\x2A\x85\xF6\x57"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,31 +113,25 @@
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x57\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x64\x8B\xCB"
|
||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x31\xC0\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x00\x89"
|
||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||
}
|
||||
"CreateEntityByName"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x53\x8B\x5C\x2A\x2A\x56\x8B\x74\x2A\x2A\x57\x83"
|
||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x83\xFE\xFF\x0F\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\x8D"
|
||||
"windows" "\x53\x8B\x2A\x2A\x2A\x56\x8B\x2A\x2A\x2A\x57\x83\xFE\xFF\x74\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B"
|
||||
"linux" "@_Z18CreateEntityByNamePKci"
|
||||
}
|
||||
"FindEntityByClassname"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x18\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\x04\xEB\x2A\x39\x2A\x2A\x74\x2A\x53"
|
||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x85\xC0\x74\x2A\x8B\x08\x89\x04\x24\x89\x2A\x2A\xFF\x2A\x2A\x8B\x00\x25\xFF\x0F\x00\x00\xC1\xE0\x2A\x8D\x04\x06\x8B\x70\x2A\x8B\x55\x2A\x8D\x2A\x2A\x2A\x2A\x2A\x89"
|
||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||
}
|
||||
"FireOutput"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x57\x89"
|
||||
"linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\xC7"
|
||||
}
|
||||
|
||||
"EntityFactory"
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8D\x2A\x2A\x2A\x2A\x2A\x80\x2A\x2A\x2A\x2A\x2A\x2A\x74\x2A\x89\xF8\x83\xC4\x2A\x5B\x5E\x5F\x5D\xC3\x8D\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8D\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xC7"
|
||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "398"
|
||||
"linux" "398"
|
||||
"windows" "399"
|
||||
"linux" "399"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
|
||||
@@ -175,4 +175,8 @@
|
||||
{
|
||||
"game" "dinodday"
|
||||
}
|
||||
"game.esmod.txt"
|
||||
{
|
||||
"game" "esmod"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"RemoveDisguise"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x83\xEC\x2A\x53\x56\x8B\xF1\x8B\x8E\x2A\x2A\x2A\x2A\x57\x8B\xBE\x2A\x2A\x2A\x2A\xE8"
|
||||
"windows" "\x51\x56\x8B\xF1\x8B\x8E\x2A\x2A\x2A\x2A\x57\x8B\xBE\x2A\x2A\x2A\x2A\xE8"
|
||||
"linux" "@_ZN15CTFPlayerShared14RemoveDisguiseEv"
|
||||
}
|
||||
"Disguise"
|
||||
@@ -49,7 +49,7 @@
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "@_ZN14CTFCompoundBow26CalcIsAttackCriticalHelperEv"
|
||||
"windows" "\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x14\x6A\x0B"
|
||||
"windows" "\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8D\x88\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x84\xC0\x74\x2A\xB0"
|
||||
}
|
||||
"Regenerate"
|
||||
{
|
||||
@@ -60,14 +60,14 @@
|
||||
"AddCondition"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\xD9\x44\x2A\x2A\x56\x57\x8B\x7C\x2A\x2A\x8B\xF1\x8B\x86\x2A\x2A\x2A\x00\x50\x51\xD9\x2A\x2A\x57"
|
||||
"linux" "@_ZN15CTFPlayerShared7AddCondEif"
|
||||
"windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x83\xFF\x2A\x8B\xF1\x7C\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x8D\x6F\x2A\xEB\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x8B\xEF\x8B\x86\x2A\x2A\x2A\x2A\xD9"
|
||||
"linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondf"
|
||||
}
|
||||
"RemoveCondition"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x8B\x44\x2A\x2A\x56\x57\x8B\x7C\x2A\x2A\x8B\xF1\x50\x57\x8D\x8E\x2A\x2A\x2A\x2A\xE8"
|
||||
"linux" "@_ZN15CTFPlayerShared10RemoveCondEib"
|
||||
"windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x8B\xF1\x57\x8D\x8E\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x84\xC0\x74\x2A\x5F"
|
||||
"linux" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb"
|
||||
}
|
||||
"SetPowerplayEnabled"
|
||||
{
|
||||
|
||||
+15
-15
@@ -162,21 +162,6 @@ native SetEdictFlags(edict, flags);
|
||||
*/
|
||||
native bool:GetEdictClassname(edict, String:clsname[], maxlength);
|
||||
|
||||
/**
|
||||
* Retrieves the classname of an entity.
|
||||
* This is like GetEdictClassname(), except it works for ALL
|
||||
* entities, not just edicts.
|
||||
*
|
||||
* @param edict Index of the entity.
|
||||
* @param clsname Buffer to store the classname.
|
||||
* @param maxlength Maximum length of the buffer.
|
||||
* @return True on success, false if there is no classname set.
|
||||
*/
|
||||
stock bool:GetEntityClassname(entity, String:clsname[], maxlength)
|
||||
{
|
||||
return !!GetEntPropString(entity, Prop_Data, "m_iClassname", clsname, maxlength);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an entity's networkable serverclass name.
|
||||
* This is not the same as the classname and is used for networkable state changes.
|
||||
@@ -684,3 +669,18 @@ stock SetEntDataArray(entity, offset, const array[], arraySize, dataSize=4, bool
|
||||
SetEntData(entity, offset + i*dataSize, array[i], dataSize, changeState);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the classname of an entity.
|
||||
* This is like GetEdictClassname(), except it works for ALL
|
||||
* entities, not just edicts.
|
||||
*
|
||||
* @param edict Index of the entity.
|
||||
* @param clsname Buffer to store the classname.
|
||||
* @param maxlength Maximum length of the buffer.
|
||||
* @return True on success, false if there is no classname set.
|
||||
*/
|
||||
stock bool:GetEntityClassname(entity, String:clsname[], maxlength)
|
||||
{
|
||||
return !!GetEntPropString(entity, Prop_Data, "m_iClassname", clsname, maxlength);
|
||||
}
|
||||
|
||||
@@ -102,8 +102,11 @@ enum TFCond
|
||||
TFCond_Bleeding,
|
||||
TFCond_DefenseBuffed,
|
||||
TFCond_Milked,
|
||||
TFCond_MegaHeal,
|
||||
TFCond_RegenBuffed,
|
||||
TFCond_MarkedForDeath
|
||||
TFCond_MarkedForDeath,
|
||||
|
||||
TFCond_SpeedBuffAlly = 32
|
||||
};
|
||||
|
||||
enum TFHoliday
|
||||
@@ -227,11 +230,11 @@ native TF2_StunPlayer(client, Float:duration, Float:slowdown=0.0, stunflags, att
|
||||
* Induces the bleed effect on a client
|
||||
*
|
||||
* @param client Player's index.
|
||||
* @param victim Victim's index.
|
||||
* @param attacker Attacker's index.
|
||||
* @param float Duration of bleeding (in seconds).
|
||||
* @noreturn
|
||||
*/
|
||||
native TF2_MakeBleed(client, victim, Float:duration);
|
||||
native TF2_MakeBleed(client, attacker, Float:duration);
|
||||
|
||||
/**
|
||||
* Retrieves the entity index of the CPlayerResource entity
|
||||
|
||||
@@ -66,8 +66,9 @@
|
||||
#define TF_CONDFLAG_BLEEDING (1 << 25)
|
||||
#define TF_CONDFLAG_DEFENSEBUFFED (1 << 26)
|
||||
#define TF_CONDFLAG_MILKED (1 << 27)
|
||||
#define TF_CONDFLAG_REGENBUFFED (1 << 28)
|
||||
#define TF_CONDFLAG_MARKEDFORDEATH (1 << 29)
|
||||
#define TF_CONDFLAG_MEGAHEAL (1 << 28)
|
||||
#define TF_CONDFLAG_REGENBUFFED (1 << 29)
|
||||
#define TF_CONDFLAG_MARKEDFORDEATH (1 << 30)
|
||||
|
||||
#define TF_DEATHFLAG_KILLERDOMINATION (1 << 0)
|
||||
#define TF_DEATHFLAG_ASSISTERDOMINATION (1 << 1)
|
||||
@@ -121,7 +122,10 @@ enum {
|
||||
TF_CUSTOM_FISH_KILL,
|
||||
TF_CUSTOM_TRIGGER_HURT,
|
||||
TF_CUSTOM_DECAPITATION_BOSS,
|
||||
TF_CUSTOM_STICKBOMB_EXPLOSION
|
||||
TF_CUSTOM_STICKBOMB_EXPLOSION,
|
||||
TF_CUSTOM_AEGIS_ROUND,
|
||||
TF_CUSTOM_FLARE_EXPLOSION,
|
||||
TF_CUSTOM_BOOTS_STOMP,
|
||||
};
|
||||
|
||||
// Weapon codes as used in some events, such as player_death
|
||||
@@ -201,7 +205,10 @@ enum {
|
||||
TF_WEAPON_HANDGUN_SCOUT_PRIMARY,
|
||||
TF_WEAPON_BAT_FISH,
|
||||
TF_WEAPON_CROSSBOW,
|
||||
TF_WEAPON_STICKBOMB
|
||||
TF_WEAPON_STICKBOMB,
|
||||
TF_WEAPON_HANDGUN_SCOUT_SEC,
|
||||
TF_WEAPON_SODA_POPPER,
|
||||
TF_WEAPON_SNIPERRIFLE_DECAP,
|
||||
};
|
||||
|
||||
// TF2 Weapon Slots for GetPlayerWeaponSlot
|
||||
@@ -411,11 +418,46 @@ stock TF2_RemoveAllWeapons(client)
|
||||
* @param client Player's index.
|
||||
* @return Player's condition bits
|
||||
*/
|
||||
#pragma deprecated Use TF2_IsPlayerInCondition instead.
|
||||
stock TF2_GetPlayerConditionFlags(client)
|
||||
{
|
||||
return GetEntProp(client, Prop_Send, "m_nPlayerCond")|GetEntProp(client, Prop_Send, "_condition_bits");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether or not a condition is set on a player
|
||||
*
|
||||
* @param client Player's index.
|
||||
* @return True if set, false otherwise
|
||||
*/
|
||||
stock bool:TF2_IsPlayerInCondition(client, TFCond:cond)
|
||||
{
|
||||
// Conditions are stored across two netprops now, one for each 32-bit segment.
|
||||
if (_:cond < 32)
|
||||
{
|
||||
new bit = 1 << _:cond;
|
||||
if ((GetEntProp(client, Prop_Send, "m_nPlayerCond") & bit) == bit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((GetEntProp(client, Prop_Send, "_condition_bits") & bit) == bit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
new bit = (1 << (_:cond - 32));
|
||||
if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx") & bit) == bit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an entity's object type.
|
||||
*
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
|
||||
#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */
|
||||
#define SOURCEMOD_V_MINOR 3 /**< SourceMod Minor version */
|
||||
#define SOURCEMOD_V_RELEASE 7 /**< SourceMod Release version */
|
||||
#define SOURCEMOD_V_RELEASE 8 /**< SourceMod Release version */
|
||||
|
||||
#define SOURCEMOD_VERSION "1.3.7" /**< SourceMod version string (major.minor.release.build) */
|
||||
#define SOURCEMOD_VERSION "1.3.8" /**< SourceMod version string (major.minor.release.build) */
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.3.7
|
||||
1.3.8
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ h
|
||||
i
|
||||
D
|
||||
S
|
||||
!
|
||||
!!
|
||||
joys of buildbot, part 5: a watermelon's diatribes need not be cause for spilling the queen's tea
|
||||
crab
|
||||
joys of buildbot, part 6: a merry metal matchturtle mocks mostly and mainly in Madrid.
|
||||
|
||||
@@ -268,27 +268,9 @@ static void doinclude(int silent)
|
||||
if (c!='\0')
|
||||
check_empty(lptr+1); /* verify that the rest of the line is whitespace */
|
||||
|
||||
/* create a symbol from the name of the include file; this allows the system
|
||||
* to test for multiple inclusions
|
||||
*/
|
||||
strcpy(symname,"_inc_");
|
||||
if ((ptr=strrchr(name,DIRSEP_CHAR))!=NULL)
|
||||
strlcat(symname,ptr+1,sizeof symname);
|
||||
else
|
||||
strlcat(symname,name,sizeof symname);
|
||||
if (find_symbol(&glbtab,symname,fcurrent,-1,NULL)==NULL) {
|
||||
/* constant is not present, so this file has not been included yet */
|
||||
|
||||
/* Include files between "..." or without quotes are read from the current
|
||||
* directory, or from a list of "include directories". Include files
|
||||
* between <...> are only read from the list of include directories.
|
||||
*/
|
||||
result=plungefile(name,(c!='>'),TRUE);
|
||||
if (result)
|
||||
add_constant(symname,1,sGLOBAL,0);
|
||||
else if (!silent)
|
||||
error(120,name); /* cannot read from ... (fatal error) */
|
||||
} /* if */
|
||||
result=plungefile(name,(c!='>'),TRUE);
|
||||
if (!result && !silent)
|
||||
error(120,name); /* cannot read from ... (fatal error) */
|
||||
}
|
||||
|
||||
/* readline
|
||||
|
||||
Reference in New Issue
Block a user