Compare commits
55
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f008349cbc | ||
|
|
c978f8620e | ||
|
|
ec9a4ab9c5 | ||
|
|
de40e8990f | ||
|
|
ae07dc524d | ||
|
|
31426fb8d0 | ||
|
|
f538a51ef4 | ||
|
|
55ee8af1e6 | ||
|
|
85ed2e01a4 | ||
|
|
9eddf38b92 | ||
|
|
4ca976f883 | ||
|
|
ba9db46290 | ||
|
|
b58fe300ba | ||
|
|
4eb3754afc | ||
|
|
ae6ae0e3ea | ||
|
|
e903810d34 | ||
|
|
b73fd01490 | ||
|
|
af0d46fcc1 | ||
|
|
773216d517 | ||
|
|
ccfdcfb727 | ||
|
|
8bf7f1a00f | ||
|
|
5e99870df0 | ||
|
|
6f8d002404 | ||
|
|
3a94a3268a | ||
|
|
8355efaca4 | ||
|
|
2f388cfdb4 | ||
|
|
272473ed02 | ||
|
|
6e95680838 | ||
|
|
18e089e9d0 | ||
|
|
185e5fe6db | ||
|
|
2b84454e77 | ||
|
|
bb66d660b9 | ||
|
|
3867d70d53 | ||
|
|
144c1a3a13 | ||
|
|
c2197a4422 | ||
|
|
c3c51ff3a3 | ||
|
|
a2d3e1bee5 | ||
|
|
6fa750bffe | ||
|
|
83841cc218 | ||
|
|
5c7e6c79c8 | ||
|
|
b20ff4075a | ||
|
|
f860ef10e6 | ||
|
|
e357a5d650 | ||
|
|
c3bded70c5 | ||
|
|
c11f2569ce | ||
|
|
c56d550333 | ||
|
|
4e96ffb438 | ||
|
|
6b4b5eb0b1 | ||
|
|
74847c5b4f | ||
|
|
116fbe9a7a | ||
|
|
79f412c55c | ||
|
|
d839b83b6b | ||
|
|
9bcc3de922 | ||
|
|
30ebb670f4 | ||
|
|
94e471192d |
@@ -8,3 +8,5 @@ f74e1dea2ef2c5a12b5238badc0e877106804191 sourcemod-1.4.1
|
||||
0026e1394254c392244c7b140e3075974ab5a6db sourcemod-1.4.2
|
||||
608f4c94872e3624404a1d105284163bc57fadf7 sourcemod-1.4.3
|
||||
29186166cc99e73c61995a0bd0450fc6c36466bc sourcemod-1.4.4
|
||||
9560adae2a7263e6e076d5bc2e1c2838c27d686a sourcemod-1.4.5
|
||||
56a9ba4cd1e2ca8a583f7e150af058ce5d41ca33 sourcemod-1.4.6
|
||||
|
||||
+13
-2
@@ -268,7 +268,15 @@ class SM:
|
||||
else:
|
||||
staticLibs = os.path.join(sdkPath, 'lib', 'linux')
|
||||
workFolder = os.path.join(AMBuild.outputFolder, job.workFolder)
|
||||
if sdk in ['ep2v', 'l4d', 'l4d2']:
|
||||
if sdk == 'ep2v':
|
||||
for i in ['tier1_i486.a', 'mathlib_i486.a', 'libvstdlib_srv.so', 'libtier0_srv.so']:
|
||||
link = os.path.join(workFolder, i)
|
||||
target = os.path.join(staticLibs, i)
|
||||
try:
|
||||
os.lstat(link)
|
||||
except:
|
||||
job.AddCommand(SymlinkCommand(link, target))
|
||||
elif sdk in ['l4d', 'l4d2']:
|
||||
for i in ['tier1_i486.a', 'mathlib_i486.a', 'libvstdlib.so', 'libtier0.so']:
|
||||
link = os.path.join(workFolder, i)
|
||||
target = os.path.join(staticLibs, i)
|
||||
@@ -354,7 +362,10 @@ class SM:
|
||||
if not noLink:
|
||||
if AMBuild.target['platform'] == 'linux':
|
||||
compiler['POSTLINKFLAGS'][0:0] = ['-lm']
|
||||
if sdk in ['ep2v', 'l4d', 'l4d2']:
|
||||
if sdk == 'ep2v':
|
||||
compiler['POSTLINKFLAGS'][0:0] = ['libtier0_srv.so']
|
||||
compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib_srv.so']
|
||||
elif sdk in ['l4d', 'l4d2']:
|
||||
compiler['POSTLINKFLAGS'][0:0] = ['libtier0.so']
|
||||
compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib.so']
|
||||
else:
|
||||
|
||||
+37
-1
@@ -1,6 +1,42 @@
|
||||
SourceMod Changelog
|
||||
|
||||
-----------------------------
|
||||
|
||||
|
||||
SourceMod 1.4.7 [2013-02-06]
|
||||
|
||||
URL: http://wiki.alliedmods.net/SourceMod_1.4.7_Release_Notes
|
||||
|
||||
User Changes:
|
||||
|
||||
- Updated support for latest Source 2009 engine changes (CS:S, DoD:S, TF2, HL2DM).
|
||||
- Updated gamedata for Left 4 Dead 2, Nuclear Dawn, No More Room in Hell, Zombie Panic Source, CSPromod, GoldenEye Source, Synergy, The Hidden, and PVKII.
|
||||
- Added system to block malware or illegal plugins (bug 5289).
|
||||
- Fixed a potential crash when a bad entity index is passed to certain functions (bug 5539) (KyleS).
|
||||
- Added an error message for when auto plugin configs fail to be created due to write error (bug 5465) (Drifter).
|
||||
- Fixed an issue where a malformed plugin could cause crashes (bug 5478).
|
||||
|
||||
Developer Changes:
|
||||
|
||||
- Added new values to the TFCond TF2 conditions enum (bug 5537) (FlaminSarge).
|
||||
- Updated TFHoliday TF2 holidays enum (bug 5526) (Powerlord).
|
||||
- Fixed regression in SourceMod 1.3.0 causing GetEntPropEnt, GetEntDataEnt2, and GameRules_GetPropEnt to possibly return stale (incorrect) entity indexes in place of -1.
|
||||
- Added support for < 32-bit unsigned sign extension to GameRules_GetProp lookup (already in GetEntProp since SM 1.4.0).
|
||||
- Fixed < 32-bit unsigned sign extension in GetEntProp not being applied for array prop elements (bug 5591).
|
||||
- Fixed value size auto-detection in GetEntProp and GameRules_GetProp for ep2v's new SPROP_VARINT sendprops.
|
||||
- Fixed Sort_Random sort type not including first value in array sorting functions (bug 4292) (Peace-Maker).
|
||||
- Fixed GameRules_SetPropVector writing data to unexpected addresses instead of to the gamerules proxy entity (bug 5592) (ProdigySim).
|
||||
- Fixed VoteMenuToAll stock adding bots to list (bug 5253 (VoiDeD).
|
||||
|
||||
----------------------------------------------------------
|
||||
SourceMod 1.4.6 [2012-09-04]
|
||||
|
||||
URL: http://wiki.alliedmods.net/SourceMod_1.4.6_Release_Notes
|
||||
|
||||
User Changes:
|
||||
|
||||
- Fixed extraneous errors resulting from a bug in 1.4.5.
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
SourceMod 1.4.5 [2012-09-03]
|
||||
|
||||
|
||||
@@ -107,4 +107,14 @@
|
||||
* Currently this will log details about the gamedata updating process.
|
||||
*/
|
||||
"DebugSpew" "no"
|
||||
|
||||
/**
|
||||
* Enables or disables whether SourceMod blocks known or potentially malicious plugins from loading.
|
||||
* It is STRONGLY advised that this is left enabled, there have been cases in the past with plugins that
|
||||
* allow anyone to delete files on the server, gain full rcon control, etc.
|
||||
*
|
||||
* "yes" - Block malware or illegal plugins from loading (default)
|
||||
* "no" - Warn about malware or illegal plugins loading
|
||||
*/
|
||||
"BlockBadPlugins" "yes"
|
||||
}
|
||||
|
||||
@@ -452,6 +452,11 @@ bool SM_ExecuteConfig(CPlugin *pl, AutoConfig *cfg, bool can_create)
|
||||
can_create = false;
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_Logger.LogError("Failed to auto generate config for %s, make sure the directory has write permission.", pl->GetFilename());
|
||||
return can_create;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-4
@@ -40,6 +40,7 @@
|
||||
#include <Logger.h>
|
||||
#include "LibrarySys.h"
|
||||
#include "logic_bridge.h"
|
||||
#include <tier0/mem.h>
|
||||
|
||||
|
||||
typedef ICommandLine *(*FakeGetCommandLine)();
|
||||
@@ -51,7 +52,10 @@ typedef ICommandLine *(*FakeGetCommandLine)();
|
||||
#define TIER0_NAME "libtier0.dylib"
|
||||
#define VSTDLIB_NAME "libvstdlib.dylib"
|
||||
#elif defined __linux__
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE || SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||
#define TIER0_NAME "libtier0_srv.so"
|
||||
#define VSTDLIB_NAME "libvstdlib_srv.so"
|
||||
#elif SOURCE_ENGINE >= SE_LEFT4DEAD
|
||||
#define TIER0_NAME "libtier0.so"
|
||||
#define VSTDLIB_NAME "libvstdlib.so"
|
||||
#else
|
||||
@@ -352,11 +356,16 @@ typedescription_t *UTIL_FindInDataMap(datamap_t *pMap, const char *name, bool *i
|
||||
{
|
||||
if (isNested)
|
||||
{
|
||||
*isNested = true;
|
||||
return NULL;
|
||||
*isNested = (UTIL_FindInDataMap(pMap->dataDesc[i].td, name, NULL) != NULL);
|
||||
if (*isNested)
|
||||
{
|
||||
return NULL;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else { // Use the old behaviour, we dont want to spring this on extensions - even if they're doing bad things.
|
||||
typedescription_t *_td;
|
||||
if ((_td=UTIL_FindInDataMap(pMap->dataDesc[i].td, name, isNested)) != NULL)
|
||||
if ((_td=UTIL_FindInDataMap(pMap->dataDesc[i].td, name, NULL)) != NULL)
|
||||
{
|
||||
return _td;
|
||||
}
|
||||
@@ -987,6 +996,11 @@ cell_t CHalfLife2::EntityToBCompatRef(CBaseEntity *pEntity)
|
||||
IServerUnknown *pUnknown = (IServerUnknown *)pEntity;
|
||||
CBaseHandle hndl = pUnknown->GetRefEHandle();
|
||||
|
||||
if (hndl == INVALID_EHANDLE_INDEX)
|
||||
{
|
||||
return INVALID_EHANDLE_INDEX;
|
||||
}
|
||||
|
||||
if (hndl.GetEntryIndex() >= MAX_EDICTS)
|
||||
{
|
||||
return (hndl.ToInt() | (1<<31));
|
||||
|
||||
+68
-1
@@ -789,6 +789,8 @@ CPluginManager::CPluginManager()
|
||||
m_AllPluginsLoaded = false;
|
||||
m_MyIdent = NULL;
|
||||
m_LoadingLocked = false;
|
||||
|
||||
m_bBlockBadPlugins = true;
|
||||
}
|
||||
|
||||
CPluginManager::~CPluginManager()
|
||||
@@ -1030,6 +1032,41 @@ LoadRes CPluginManager::_LoadPlugin(CPlugin **_plugin, const char *path, bool de
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pPlugin->GetStatus() == Plugin_Created)
|
||||
{
|
||||
unsigned char *pCodeHash = pPlugin->m_pRuntime->GetCodeHash();
|
||||
|
||||
char codeHashBuf[40];
|
||||
UTIL_Format(codeHashBuf, 40, "plugin_");
|
||||
for (int i = 0; i < 16; i++)
|
||||
UTIL_Format(codeHashBuf + 7 + (i * 2), 3, "%02x", pCodeHash[i]);
|
||||
|
||||
const char *bulletinUrl = g_pGameConf->GetKeyValue(codeHashBuf);
|
||||
if (bulletinUrl != NULL)
|
||||
{
|
||||
if (m_bBlockBadPlugins)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
if (bulletinUrl[0] != '\0')
|
||||
{
|
||||
UTIL_Format(error, maxlength, "Known malware detected and blocked. See %s for more info", bulletinUrl);
|
||||
} else {
|
||||
UTIL_Format(error, maxlength, "Possible malware or illegal plugin detected and blocked");
|
||||
}
|
||||
}
|
||||
pPlugin->m_status = Plugin_BadLoad;
|
||||
} else {
|
||||
if (bulletinUrl[0] != '\0')
|
||||
{
|
||||
g_Logger.LogMessage("%s: Known malware detected. See %s for more info, blocking disabled in core.cfg", pPlugin->GetFilename(), bulletinUrl);
|
||||
} else {
|
||||
g_Logger.LogMessage("%s: Possible malware or illegal plugin detected, blocking disabled in core.cfg", pPlugin->GetFilename());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LoadRes loadFailure = LoadRes_Failure;
|
||||
/* Get the status */
|
||||
@@ -1129,7 +1166,7 @@ void CPluginManager::LoadAutoPlugin(const char *plugin)
|
||||
|
||||
if ((res=_LoadPlugin(&pl, plugin, false, PluginType_MapUpdated, error, sizeof(error))) == LoadRes_Failure)
|
||||
{
|
||||
g_Logger.LogError("[SM] Failed to load plugin \"%s\": %s", plugin, error);
|
||||
g_Logger.LogError("[SM] Failed to load plugin \"%s\": %s.", plugin, error);
|
||||
pl->SetErrorState(
|
||||
pl->GetStatus() <= Plugin_Created ? Plugin_BadLoad : pl->GetStatus(),
|
||||
"%s",
|
||||
@@ -1889,6 +1926,27 @@ void CPluginManager::OnSourceModShutdown()
|
||||
g_ShareSys.DestroyIdentity(m_MyIdent);
|
||||
}
|
||||
|
||||
ConfigResult CPluginManager::OnSourceModConfigChanged(const char *key,
|
||||
const char *value,
|
||||
ConfigSource source,
|
||||
char *error,
|
||||
size_t maxlength)
|
||||
{
|
||||
if (strcmp(key, "BlockBadPlugins") == 0) {
|
||||
if (strcasecmp(value, "yes") == 0)
|
||||
{
|
||||
m_bBlockBadPlugins = true;
|
||||
} else if (strcasecmp(value, "no") == 0) {
|
||||
m_bBlockBadPlugins = false;
|
||||
} else {
|
||||
UTIL_Format(error, maxlength, "Invalid value: must be \"yes\" or \"no\"");
|
||||
return ConfigResult_Reject;
|
||||
}
|
||||
return ConfigResult_Accept;
|
||||
}
|
||||
return ConfigResult_Ignore;
|
||||
}
|
||||
|
||||
void CPluginManager::OnHandleDestroy(HandleType_t type, void *object)
|
||||
{
|
||||
/* We don't care about the internal object, actually */
|
||||
@@ -2269,6 +2327,15 @@ void CPluginManager::OnRootConsoleCommand(const char *cmdname, const CCommand &c
|
||||
{
|
||||
g_RootMenu.ConsolePrint(" Timestamp: %s", pl->m_DateTime);
|
||||
}
|
||||
|
||||
unsigned char *pCodeHash = pl->m_pRuntime->GetCodeHash();
|
||||
unsigned char *pDataHash = pl->m_pRuntime->GetDataHash();
|
||||
|
||||
char combinedHash[33];
|
||||
for (int i = 0; i < 16; i++)
|
||||
UTIL_Format(combinedHash + (i * 2), 3, "%02x", pCodeHash[i] ^ pDataHash[i]);
|
||||
|
||||
g_RootMenu.ConsolePrint(" Hash: %s", combinedHash);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "convar_sm.h"
|
||||
#endif
|
||||
#include "ITranslator.h"
|
||||
#include "IGameConfigs.h"
|
||||
#include "NativeOwner.h"
|
||||
#include "ShareSys.h"
|
||||
|
||||
@@ -326,6 +327,7 @@ public: //IPluginManager
|
||||
public: //SMGlobalClass
|
||||
void OnSourceModAllInitialized();
|
||||
void OnSourceModShutdown();
|
||||
ConfigResult OnSourceModConfigChanged(const char *key, const char *value, ConfigSource source, char *error, size_t maxlength);
|
||||
void OnSourceModMaxPlayersChanged(int newvalue);
|
||||
public: //IHandleTypeDispatch
|
||||
void OnHandleDestroy(HandleType_t type, void *object);
|
||||
@@ -470,6 +472,9 @@ private:
|
||||
List<FakeNative *> m_Natives;
|
||||
|
||||
bool m_LoadingLocked;
|
||||
|
||||
// Config
|
||||
bool m_bBlockBadPlugins;
|
||||
};
|
||||
|
||||
extern CPluginManager g_PluginSys;
|
||||
|
||||
@@ -94,7 +94,7 @@ void sort_random(cell_t *array, cell_t size)
|
||||
|
||||
for (int i = size-1; i > 0; i--)
|
||||
{
|
||||
int n = (rand() % i) + 1;
|
||||
int n = rand() % (i + 1);
|
||||
|
||||
if (array[i] != array[n])
|
||||
{
|
||||
@@ -435,7 +435,7 @@ void sort_adt_random(CellArray *cArray)
|
||||
|
||||
for (int i = arraysize-1; i > 0; i--)
|
||||
{
|
||||
int n = (rand() % i) + 1;
|
||||
int n = rand() % (i + 1);
|
||||
|
||||
cArray->swap(i, n);
|
||||
}
|
||||
|
||||
+35
-12
@@ -620,9 +620,12 @@ static cell_t GetEntDataEnt2(IPluginContext *pContext, const cell_t *params)
|
||||
}
|
||||
|
||||
CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset);
|
||||
CBaseEntity *pHandleEntity = g_HL2.ReferenceToEntity(hndl.GetEntryIndex());
|
||||
|
||||
int ref = g_HL2.IndexToReference(hndl.GetEntryIndex());
|
||||
return g_HL2.ReferenceToBCompatRef(ref);
|
||||
if (!pHandleEntity || hndl != reinterpret_cast<IHandleEntity *>(pHandleEntity)->GetRefEHandle())
|
||||
return -1;
|
||||
|
||||
return g_HL2.EntityToBCompatRef(pHandleEntity);
|
||||
}
|
||||
|
||||
/* THIS GUY IS DEPRECATED. */
|
||||
@@ -994,6 +997,7 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params)
|
||||
|
||||
#define FIND_PROP_SEND(type, type_name) \
|
||||
sm_sendprop_info_t info;\
|
||||
SendProp *pProp; \
|
||||
IServerUnknown *pUnk = (IServerUnknown *)pEntity; \
|
||||
IServerNetworkable *pNet = pUnk->GetNetworkable(); \
|
||||
if (!pNet) \
|
||||
@@ -1010,9 +1014,10 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params)
|
||||
} \
|
||||
\
|
||||
offset = info.actual_offset; \
|
||||
bit_count = info.prop->m_nBits; \
|
||||
pProp = info.prop; \
|
||||
bit_count = pProp->m_nBits; \
|
||||
\
|
||||
switch (info.prop->GetType()) \
|
||||
switch (pProp->GetType()) \
|
||||
{ \
|
||||
case type: \
|
||||
{ \
|
||||
@@ -1026,7 +1031,6 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params)
|
||||
} \
|
||||
case DPT_DataTable: \
|
||||
{ \
|
||||
SendProp *pProp; \
|
||||
FIND_PROP_SEND_IN_SENDTABLE(info, pProp, element, type, type_name); \
|
||||
\
|
||||
offset += pProp->GetOffset(); \
|
||||
@@ -1037,13 +1041,13 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params)
|
||||
{ \
|
||||
return pContext->ThrowNativeError("SendProp %s type is not " type_name " (%d != %d)", \
|
||||
prop, \
|
||||
info.prop->GetType(), \
|
||||
pProp->GetType(), \
|
||||
type); \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define FIND_PROP_SEND_IN_SENDTABLE(info, pProp, element, type, type_name) \
|
||||
SendTable *pTable = info.prop->GetDataTable(); \
|
||||
SendTable *pTable = pProp->GetDataTable(); \
|
||||
if (!pTable) \
|
||||
{ \
|
||||
return pContext->ThrowNativeError("Error looking up DataTable for prop %s", \
|
||||
@@ -1064,8 +1068,8 @@ static cell_t SetEntDataString(IPluginContext *pContext, const cell_t *params)
|
||||
{ \
|
||||
return pContext->ThrowNativeError("SendProp %s type is not " type_name " ([%d,%d] != %d)", \
|
||||
prop, \
|
||||
info.prop->GetType(), \
|
||||
info.prop->m_nBits, \
|
||||
pProp->GetType(), \
|
||||
pProp->m_nBits, \
|
||||
type); \
|
||||
}
|
||||
|
||||
@@ -1201,7 +1205,15 @@ static cell_t GetEntProp(IPluginContext *pContext, const cell_t *params)
|
||||
case Prop_Send:
|
||||
{
|
||||
FIND_PROP_SEND(DPT_Int, "integer");
|
||||
is_unsigned = ((info.prop->GetFlags() & SPROP_UNSIGNED) == SPROP_UNSIGNED);
|
||||
is_unsigned = ((pProp->GetFlags() & SPROP_UNSIGNED) == SPROP_UNSIGNED);
|
||||
|
||||
// This isn't in CS:S yet, but will be, doesn't hurt to add now, and will save us a build later
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||
if (pProp->GetFlags() & SPROP_VARINT)
|
||||
{
|
||||
bit_count = sizeof(int) * 8;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -1292,6 +1304,14 @@ static cell_t SetEntProp(IPluginContext *pContext, const cell_t *params)
|
||||
case Prop_Send:
|
||||
{
|
||||
FIND_PROP_SEND(DPT_Int, "integer");
|
||||
|
||||
// This isn't in CS:S yet, but will be, doesn't hurt to add now, and will save us a build later
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||
if (pProp->GetFlags() & SPROP_VARINT)
|
||||
{
|
||||
bit_count = sizeof(int) * 8;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -1506,9 +1526,12 @@ static cell_t GetEntPropEnt(IPluginContext *pContext, const cell_t *params)
|
||||
}
|
||||
|
||||
CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset);
|
||||
CBaseEntity *pHandleEntity = g_HL2.ReferenceToEntity(hndl.GetEntryIndex());
|
||||
|
||||
int ref = g_HL2.IndexToReference(hndl.GetEntryIndex());
|
||||
return g_HL2.ReferenceToBCompatRef(ref);
|
||||
if (!pHandleEntity || hndl != reinterpret_cast<IHandleEntity *>(pHandleEntity)->GetRefEHandle())
|
||||
return -1;
|
||||
|
||||
return g_HL2.EntityToBCompatRef(pHandleEntity);
|
||||
}
|
||||
|
||||
static cell_t SetEntPropEnt(IPluginContext *pContext, const cell_t *params)
|
||||
|
||||
@@ -217,7 +217,7 @@ static cell_t CS_DropWeapon(IPluginContext *pContext, const cell_t *params)
|
||||
return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[2]);
|
||||
|
||||
CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pWeapon + spi.actual_offset);
|
||||
if (params[1] != hndl.GetEntryIndex())
|
||||
if (params[1] != hndl.GetEntryIndex() || hndl != ((IServerEntity *)pEntity)->GetRefEHandle())
|
||||
return pContext->ThrowNativeError("Weapon %d is not owned by client %d", params[2], params[1]);
|
||||
|
||||
if (params[4] == 1 && g_pCSWeaponDropDetoured)
|
||||
|
||||
@@ -89,15 +89,17 @@ enum PropFieldType
|
||||
|
||||
#define FIND_PROP_SEND(type, type_name) \
|
||||
sm_sendprop_info_t info;\
|
||||
SendProp *pProp; \
|
||||
if (!gamehelpers->FindSendPropInfo(g_szGameRulesProxy, prop, &info)) \
|
||||
{ \
|
||||
return pContext->ThrowNativeError("Property \"%s\" not found on the gamerules proxy", prop); \
|
||||
} \
|
||||
\
|
||||
offset = info.actual_offset; \
|
||||
bit_count = info.prop->m_nBits; \
|
||||
pProp = info.prop; \
|
||||
bit_count = pProp->m_nBits; \
|
||||
\
|
||||
switch (info.prop->GetType()) \
|
||||
switch (pProp->GetType()) \
|
||||
{ \
|
||||
case type: \
|
||||
{ \
|
||||
@@ -111,7 +113,6 @@ enum PropFieldType
|
||||
} \
|
||||
case DPT_DataTable: \
|
||||
{ \
|
||||
SendProp *pProp; \
|
||||
FIND_PROP_SEND_IN_SENDTABLE(info, pProp, element, type, type_name); \
|
||||
\
|
||||
offset += pProp->GetOffset(); \
|
||||
@@ -122,13 +123,13 @@ enum PropFieldType
|
||||
{ \
|
||||
return pContext->ThrowNativeError("SendProp %s type is not " type_name " (%d != %d)", \
|
||||
prop, \
|
||||
info.prop->GetType(), \
|
||||
pProp->GetType(), \
|
||||
type); \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define FIND_PROP_SEND_IN_SENDTABLE(info, pProp, element, type, type_name) \
|
||||
SendTable *pTable = info.prop->GetDataTable(); \
|
||||
SendTable *pTable = pProp->GetDataTable(); \
|
||||
if (!pTable) \
|
||||
{ \
|
||||
return pContext->ThrowNativeError("Error looking up DataTable for prop %s", \
|
||||
@@ -149,8 +150,8 @@ enum PropFieldType
|
||||
{ \
|
||||
return pContext->ThrowNativeError("SendProp %s type is not " type_name " ([%d,%d] != %d)", \
|
||||
prop, \
|
||||
info.prop->GetType(), \
|
||||
info.prop->m_nBits, \
|
||||
pProp->GetType(), \
|
||||
pProp->m_nBits, \
|
||||
type); \
|
||||
}
|
||||
|
||||
@@ -160,6 +161,7 @@ static cell_t GameRules_GetProp(IPluginContext *pContext, const cell_t *params)
|
||||
int element = params[3];
|
||||
int offset;
|
||||
int bit_count;
|
||||
bool is_unsigned;
|
||||
|
||||
if (!g_pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, ""))
|
||||
return pContext->ThrowNativeError("Gamerules lookup failed.");
|
||||
@@ -169,6 +171,15 @@ static cell_t GameRules_GetProp(IPluginContext *pContext, const cell_t *params)
|
||||
int elementCount = 1;
|
||||
|
||||
FIND_PROP_SEND(DPT_Int, "integer");
|
||||
is_unsigned = ((pProp->GetFlags() & SPROP_UNSIGNED) == SPROP_UNSIGNED);
|
||||
|
||||
// This isn't in CS:S yet, but will be, doesn't hurt to add now, and will save us a build later
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||
if (pProp->GetFlags() & SPROP_VARINT)
|
||||
{
|
||||
bit_count = sizeof(int) * 8;
|
||||
}
|
||||
#endif
|
||||
␍ if (bit_count < 1)
|
||||
{
|
||||
bit_count = params[2] * 8;
|
||||
@@ -182,11 +193,25 @@ static cell_t GameRules_GetProp(IPluginContext *pContext, const cell_t *params)
|
||||
}
|
||||
else if (bit_count >= 9)
|
||||
{
|
||||
return *(int16_t *)((intptr_t)pGameRules + offset);
|
||||
if (is_unsigned)
|
||||
{
|
||||
return *(uint16_t *)((intptr_t)pGameRules + offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
return *(int16_t *)((intptr_t)pGameRules + offset);
|
||||
}
|
||||
}
|
||||
else if (bit_count >= 2)
|
||||
{
|
||||
return *(int8_t *)((intptr_t)pGameRules + offset);
|
||||
if (is_unsigned)
|
||||
{
|
||||
return *(uint8_t *)((intptr_t)pGameRules + offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
return *(int8_t *)((intptr_t)pGameRules + offset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -218,6 +243,14 @@ static cell_t GameRules_SetProp(IPluginContext *pContext, const cell_t *params)
|
||||
|
||||
FIND_PROP_SEND(DPT_Int, "integer");
|
||||
|
||||
// This isn't in CS:S yet, but will be, doesn't hurt to add now, and will save us a build later
|
||||
#if SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||
if (pProp->GetFlags() & SPROP_VARINT)
|
||||
{
|
||||
bit_count = sizeof(int) * 8;
|
||||
}
|
||||
#endif
|
||||
|
||||
void *pGameRules = *g_pGameRules;
|
||||
|
||||
if (bit_count < 1)
|
||||
@@ -339,9 +372,14 @@ static cell_t GameRules_GetPropEnt(IPluginContext *pContext, const cell_t *param
|
||||
void *pGameRules = *g_pGameRules;
|
||||
|
||||
CBaseHandle &hndl = *(CBaseHandle *)((intptr_t)pGameRules + offset);
|
||||
CBaseEntity *pEntity = gamehelpers->ReferenceToEntity(hndl.GetEntryIndex());
|
||||
|
||||
int ref = gamehelpers->IndexToReference(hndl.GetEntryIndex());
|
||||
return gamehelpers->ReferenceToBCompatRef(ref);
|
||||
if (!pEntity || ((IServerEntity *)pEntity)->GetRefEHandle() != hndl)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return gamehelpers->EntityToBCompatRef(pEntity);
|
||||
}
|
||||
|
||||
static cell_t GameRules_SetPropEnt(IPluginContext *pContext, const cell_t *params)
|
||||
@@ -470,7 +508,7 @@ static cell_t GameRules_SetPropVector(IPluginContext *pContext, const cell_t *pa
|
||||
|
||||
if (sendChange)
|
||||
{
|
||||
v = (Vector *)((intptr_t)g_pGameRules + offset);
|
||||
v = (Vector *)((intptr_t)pProxy + offset);
|
||||
v->x = sp_ctof(vec[0]);
|
||||
v->y = sp_ctof(vec[1]);
|
||||
v->z = sp_ctof(vec[2]);
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* Do not edit this file. Any changes will be overwritten by the gamedata
|
||||
* updater or by upgrading your SourceMod install.
|
||||
*
|
||||
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod)
|
||||
*/
|
||||
|
||||
"Games"
|
||||
{
|
||||
"#default"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
"plugin_541de8d7f577398bad43b75f4ac80b84" "http://forums.alliedmods.net/showpost.php?p=1767388&postcount=7" /* LightRP (Sphex) - Version 1.2.5 */
|
||||
"plugin_e10aab3464312dc0e484bda26b490b3f" "http://forums.alliedmods.net/showpost.php?p=1767388&postcount=7" /* LightRP (Sphex) - Version 1.2.7 */
|
||||
"plugin_a7973ddc4e72aafd0312432568a1806b" "http://forums.alliedmods.net/showpost.php?p=1767388&postcount=7" /* LightRP (Sphex) - Version 1.2.8 */
|
||||
"plugin_39ddd719f74b62e27e8e480871b9d3b6" "http://forums.alliedmods.net/showpost.php?p=1803875&postcount=1" /* Malicious plugin being uploaded to CS:GO servers */
|
||||
"plugin_c82200dc10b39ad196fc805e4d4da807" "" /* [L4D] Survivor Upgrades Reloaded (Marcus101RR, Whosat & Jerrith) - Version 1.5.0 */
|
||||
"plugin_4225ffe2fd15d10a730466909a64bd01" "" /* [L4D2] Survivor Upgrades Reloaded (Marcus101RR, Whosat & Jerrith) - Version 1.5.0 */
|
||||
"plugin_862ae600f417a26e6b6d3ab5d702c5e7" "" /* [L4D] Survivor Upgrades Reloaded (Marcus101RR, Whosat & Jerrith) - Version 1.5.0 - Hotfix */
|
||||
"plugin_cdb8b711ff0166791e761d6324b30b4c" "" /* [L4D2] Survivor Upgrades Reloaded (Marcus101RR, Whosat & Jerrith) - Version 1.5.0 - Hotfix */
|
||||
"plugin_fd89ca333467cffe722072a52e7bc752" "" /* L4D SuperVersus (DDRKhat) - Version 1.6.5 - Marcus101RR version */
|
||||
"plugin_33c1c93eaff16f385ef245cb4af80f1a" "" /* Survivor Health & Armor System (Marcus101RR) - Version 1.4.8 */
|
||||
"plugin_895eb68cb2dd5235e29b93452e14e52b" "" /* [L4D(2)] Health & Armor System (Marcus101RR) - Version 1.5.0 */
|
||||
"plugin_56ce0378afbb2cadb06be89dcba76706" "" /* [L4D(2)] Human Director Reloaded (Marcus101RR & lucskywalker) - Version 0.7.0 */
|
||||
"plugin_f405db5491a465b1a30859ee7f7c5080" "" /* UCP Server (Endi) - Version 6.9 */
|
||||
"plugin_6fcb6721fb740b854b0a05bfc9a7984a" "" /* UCP Server (Endi) - Version 7.1 */
|
||||
"plugin_4d320d6c5aba5d31c644fe2847c0662f" "" /* UCP Server (Endi) - Version 7.2 */
|
||||
"plugin_92d7c31873390c254bbcd0c955939aa6" "" /* UCP Server (Endi) - Version 7.7 */
|
||||
"plugin_f99d77668e7aa0adb6a960322ab05568" "" /* UCP Server (Endi) - Version 7.8 */
|
||||
"plugin_78140f1a0f26cd3297767d0598eac4b1" "" /* [Any] PReplay (DarthNinja) - Version 1.0.0 */
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,9 @@
|
||||
"engine.eye.txt"
|
||||
{
|
||||
"engine" "eye"
|
||||
}
|
||||
|
||||
"blacklist.plugins.txt"
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
"#supported"
|
||||
{
|
||||
"game" "ageofchivalry"
|
||||
"game" "zps"
|
||||
"game" "empires"
|
||||
"game" "synergy"
|
||||
"game" "bg2"
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "hl2mp"
|
||||
"game" "cstrike"
|
||||
"game" "garrysmod"
|
||||
"game" "cstrike"
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
@@ -83,7 +83,7 @@
|
||||
"FindEntityByClassname"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x2A\x85\xC9\x57\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\x2A\x2A\x2A\x2A\x83\xC0\x2A\xC1\xE0\x04\x8B\x3C\x30\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5D\x2A\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x15\x2A\x2A\x2A\x2A\x83\xC4\x2A\xEB\x2A\x39"
|
||||
"windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x2A\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x40\x03\xC0\x8B\x3C\xC6\xEB\x2A\x8B"
|
||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||
"mac" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||
}
|
||||
@@ -144,6 +144,7 @@
|
||||
"game" "tf"
|
||||
"game" "hl2mp"
|
||||
"game" "garrysmod"
|
||||
"game" "cstrike"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
@@ -176,40 +177,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
"#default"
|
||||
{
|
||||
"#supported"
|
||||
{
|
||||
"game" "cstrike"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
{
|
||||
/* Signature for the beginning of IVEngineServer::CreateFakeClientEx.
|
||||
* (Must be unique!)
|
||||
*/
|
||||
"CreateFakeClient_Windows" "\x55\x8B\xEC\x8B\x2A\x2A\x8A\x2A\x2A\x51\xB9\x2A\x2A\x2A\x2A\xA2"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
{
|
||||
"sv"
|
||||
{
|
||||
"windows" "11"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"sv"
|
||||
{
|
||||
"library" "engine"
|
||||
"linux" "@sv"
|
||||
"mac" "@sv"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* EntityFactoryDictionary function */
|
||||
"#default"
|
||||
{
|
||||
@@ -218,6 +185,7 @@
|
||||
"game" "tf"
|
||||
"game" "dod"
|
||||
"game" "hl2mp"
|
||||
"game" "cstrike"
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
@@ -247,7 +215,7 @@
|
||||
"FireOutput"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x81\xEC\x2A\x2A\x2A\x2A\x53\x56\x8B\x71\x2A\x85\xF6"
|
||||
"windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\x2A\x2A\x57\x89"
|
||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
"mac" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
}
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"#supported"
|
||||
{
|
||||
"game" "left4dead2"
|
||||
"game" "nucleardawn"
|
||||
}
|
||||
"Signatures"
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"Games"
|
||||
{
|
||||
/* CSpromod 1.05 */
|
||||
/* CSpromod 1.09 */
|
||||
"cspromod"
|
||||
{
|
||||
"Offsets"
|
||||
@@ -8,47 +8,47 @@
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "353"
|
||||
"linux" "354"
|
||||
"linux" "355"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "239"
|
||||
"windows" "238"
|
||||
"linux" "240"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "237"
|
||||
"windows" "236"
|
||||
"linux" "238"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "194"
|
||||
"windows" "193"
|
||||
"linux" "195"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "198"
|
||||
"windows" "197"
|
||||
"linux" "199"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "101"
|
||||
"windows" "100"
|
||||
"linux" "102"
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "389"
|
||||
"linux" "389"
|
||||
"windows" "390"
|
||||
"linux" "391"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "131"
|
||||
"linux" "132"
|
||||
"windows" "132"
|
||||
"linux" "134"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "123"
|
||||
"linux" "124"
|
||||
"windows" "124"
|
||||
"linux" "126"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
@@ -57,7 +57,7 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "230"
|
||||
"windows" "229"
|
||||
"linux" "231"
|
||||
}
|
||||
"SetEntityModel"
|
||||
@@ -72,8 +72,8 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "373"
|
||||
"linux" "374"
|
||||
"windows" "374"
|
||||
"linux" "376"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,22 +28,22 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "396"
|
||||
"linux" "397"
|
||||
"mac" "397"
|
||||
"windows" "399"
|
||||
"linux" "400"
|
||||
"mac" "400"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "268"
|
||||
"linux" "269"
|
||||
"mac" "269"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "266"
|
||||
"linux" "267"
|
||||
"mac" "267"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "264"
|
||||
"linux" "265"
|
||||
"mac" "265"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "207"
|
||||
@@ -64,9 +64,9 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "437"
|
||||
"linux" "437"
|
||||
"mac" "437"
|
||||
"windows" "440"
|
||||
"linux" "440"
|
||||
"mac" "440"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -94,9 +94,9 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "257"
|
||||
"linux" "258"
|
||||
"mac" "258"
|
||||
"windows" "259"
|
||||
"linux" "260"
|
||||
"mac" "260"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -106,9 +106,9 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "414"
|
||||
"linux" "415"
|
||||
"mac" "415"
|
||||
"windows" "417"
|
||||
"linux" "418"
|
||||
"mac" "418"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,22 +18,22 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "395"
|
||||
"linux" "396"
|
||||
"mac" "396"
|
||||
"windows" "398"
|
||||
"linux" "399"
|
||||
"mac" "399"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "268"
|
||||
"linux" "269"
|
||||
"mac" "269"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "266"
|
||||
"linux" "267"
|
||||
"mac" "267"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "264"
|
||||
"linux" "265"
|
||||
"mac" "265"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "207"
|
||||
@@ -54,9 +54,9 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "433"
|
||||
"linux" "434"
|
||||
"mac" "434"
|
||||
"windows" "436"
|
||||
"linux" "437"
|
||||
"mac" "437"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -84,9 +84,9 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "257"
|
||||
"linux" "258"
|
||||
"mac" "258"
|
||||
"windows" "259"
|
||||
"linux" "260"
|
||||
"mac" "260"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -96,9 +96,9 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "413"
|
||||
"linux" "414"
|
||||
"mac" "414"
|
||||
"windows" "416"
|
||||
"linux" "417"
|
||||
"mac" "417"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,28 +6,28 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "352"
|
||||
"linux" "353"
|
||||
"windows" "354"
|
||||
"linux" "355"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "241"
|
||||
"linux" "242"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "239"
|
||||
"linux" "240"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "237"
|
||||
"linux" "238"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "194"
|
||||
"linux" "195"
|
||||
"windows" "196"
|
||||
"linux" "197"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "198"
|
||||
"linux" "199"
|
||||
"windows" "200"
|
||||
"linux" "201"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
@@ -36,8 +36,8 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "393"
|
||||
"linux" "393"
|
||||
"windows" "395"
|
||||
"linux" "395"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -61,8 +61,8 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "230"
|
||||
"linux" "231"
|
||||
"windows" "232"
|
||||
"linux" "233"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -71,8 +71,8 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "372"
|
||||
"linux" "373"
|
||||
"windows" "374"
|
||||
"linux" "375"
|
||||
}
|
||||
"s_pTempEntities"
|
||||
{
|
||||
|
||||
@@ -97,6 +97,11 @@
|
||||
"windows" "198"
|
||||
"linux" "199"
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "364"
|
||||
"linux" "365"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
|
||||
@@ -18,22 +18,22 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "395"
|
||||
"linux" "396"
|
||||
"mac" "396"
|
||||
"windows" "398"
|
||||
"linux" "399"
|
||||
"mac" "399"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "268"
|
||||
"linux" "269"
|
||||
"mac" "269"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "266"
|
||||
"linux" "267"
|
||||
"mac" "267"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "264"
|
||||
"linux" "265"
|
||||
"mac" "265"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "207"
|
||||
@@ -54,9 +54,9 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "434"
|
||||
"linux" "434"
|
||||
"mac" "434"
|
||||
"windows" "437"
|
||||
"linux" "437"
|
||||
"mac" "437"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -84,9 +84,9 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "257"
|
||||
"linux" "258"
|
||||
"mac" "258"
|
||||
"windows" "259"
|
||||
"linux" "260"
|
||||
"mac" "260"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -96,9 +96,9 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "413"
|
||||
"linux" "414"
|
||||
"mac" "414"
|
||||
"windows" "416"
|
||||
"linux" "417"
|
||||
"mac" "417"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,33 +7,33 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "506"
|
||||
"linux" "507"
|
||||
"mac" "507"
|
||||
"windows" "507"
|
||||
"linux" "508"
|
||||
"mac" "508"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "288"
|
||||
"linux" "289"
|
||||
"mac" "289"
|
||||
"windows" "289"
|
||||
"linux" "290"
|
||||
"mac" "290"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "286"
|
||||
"linux" "287"
|
||||
"mac" "287"
|
||||
"windows" "287"
|
||||
"linux" "288"
|
||||
"mac" "288"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "221"
|
||||
"linux" "222"
|
||||
"mac" "222"
|
||||
"windows" "222"
|
||||
"linux" "223"
|
||||
"mac" "223"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "224"
|
||||
"linux" "225"
|
||||
"mac" "225"
|
||||
"windows" "225"
|
||||
"linux" "226"
|
||||
"mac" "226"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
@@ -43,9 +43,9 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "474"
|
||||
"linux" "474"
|
||||
"mac" "474"
|
||||
"windows" "475"
|
||||
"linux" "475"
|
||||
"mac" "475"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -73,9 +73,9 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "279"
|
||||
"linux" "280"
|
||||
"mac" "280"
|
||||
"windows" "280"
|
||||
"linux" "281"
|
||||
"mac" "281"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -85,9 +85,9 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "452"
|
||||
"linux" "453"
|
||||
"mac" "453"
|
||||
"windows" "453"
|
||||
"linux" "454"
|
||||
"mac" "454"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,25 +11,25 @@
|
||||
|
||||
"Games"
|
||||
{
|
||||
/* No More Room in Hell 1.02 */
|
||||
/* No More Room in Hell 1.05 */
|
||||
"nmrih"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "361"
|
||||
"linux" "362"
|
||||
"windows" "362"
|
||||
"linux" "363"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "240"
|
||||
"linux" "241"
|
||||
"windows" "241"
|
||||
"linux" "242"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "238"
|
||||
"linux" "239"
|
||||
"windows" "239"
|
||||
"linux" "240"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
@@ -48,8 +48,8 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "402"
|
||||
"linux" "402"
|
||||
"windows" "403"
|
||||
"linux" "403"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -73,8 +73,8 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "231"
|
||||
"linux" "232"
|
||||
"windows" "232"
|
||||
"linux" "233"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -83,8 +83,8 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "381"
|
||||
"linux" "382"
|
||||
"windows" "382"
|
||||
"linux" "383"
|
||||
}
|
||||
|
||||
/* Offset into CBaseTempEntity constructor (vs2010 moved it!) */
|
||||
|
||||
@@ -95,5 +95,16 @@
|
||||
{
|
||||
"GameRulesProxy" "CNuclearDawnRulesProxy"
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"FireOutput"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x81\x2A\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x2A\x2A\x85"
|
||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
"mac" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,28 +19,28 @@
|
||||
/* CBasePlayer */
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "352"
|
||||
"linux" "353"
|
||||
"windows" "354"
|
||||
"linux" "355"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "241"
|
||||
"linux" "242"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "239"
|
||||
"linux" "240"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "237"
|
||||
"linux" "238"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "194"
|
||||
"linux" "195"
|
||||
"windows" "196"
|
||||
"linux" "197"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "198"
|
||||
"linux" "199"
|
||||
"windows" "200"
|
||||
"linux" "201"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
@@ -49,8 +49,8 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "393"
|
||||
"linux" "393"
|
||||
"windows" "395"
|
||||
"linux" "395"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -74,8 +74,8 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "230"
|
||||
"linux" "231"
|
||||
"windows" "232"
|
||||
"linux" "233"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -84,8 +84,8 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "372"
|
||||
"linux" "373"
|
||||
"windows" "374"
|
||||
"linux" "375"
|
||||
}
|
||||
"FireOutputBackup"
|
||||
{
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
/* CBasePlayer */
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "355"
|
||||
"linux" "356"
|
||||
"windows" "356"
|
||||
"linux" "357"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
@@ -49,8 +49,8 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "396"
|
||||
"linux" "396"
|
||||
"windows" "397"
|
||||
"linux" "397"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -84,18 +84,13 @@
|
||||
}
|
||||
"RemoveAllItems"
|
||||
{
|
||||
"windows" "303"
|
||||
"linux" "304"
|
||||
"windows" "304"
|
||||
"linux" "305"
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "375"
|
||||
"linux" "376"
|
||||
}
|
||||
"FireOutputBackup"
|
||||
{
|
||||
"windows" "6"
|
||||
"linux" "10"
|
||||
"windows" "376"
|
||||
"linux" "377"
|
||||
}
|
||||
}
|
||||
"Signatures"
|
||||
|
||||
@@ -18,22 +18,22 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "395"
|
||||
"linux" "396"
|
||||
"mac" "396"
|
||||
"windows" "398"
|
||||
"linux" "399"
|
||||
"mac" "399"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "268"
|
||||
"linux" "269"
|
||||
"mac" "269"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "266"
|
||||
"linux" "267"
|
||||
"mac" "267"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "264"
|
||||
"linux" "265"
|
||||
"mac" "265"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "207"
|
||||
@@ -54,9 +54,9 @@
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "436"
|
||||
"linux" "436"
|
||||
"mac" "436"
|
||||
"windows" "439"
|
||||
"linux" "439"
|
||||
"mac" "439"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
@@ -84,9 +84,9 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "257"
|
||||
"linux" "258"
|
||||
"mac" "258"
|
||||
"windows" "259"
|
||||
"linux" "260"
|
||||
"mac" "260"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -96,9 +96,9 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "413"
|
||||
"linux" "414"
|
||||
"mac" "414"
|
||||
"windows" "416"
|
||||
"linux" "417"
|
||||
"mac" "417"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,48 +18,48 @@
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "357"
|
||||
"linux" "358"
|
||||
"windows" "358"
|
||||
"linux" "359"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "246"
|
||||
"linux" "247"
|
||||
"windows" "247"
|
||||
"linux" "248"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "241"
|
||||
"linux" "242"
|
||||
"windows" "242"
|
||||
"linux" "243"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "198"
|
||||
"linux" "199"
|
||||
"windows" "199"
|
||||
"linux" "200"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "202"
|
||||
"linux" "203"
|
||||
"windows" "203"
|
||||
"linux" "204"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "103"
|
||||
"linux" "104"
|
||||
"windows" "104"
|
||||
"linux" "105"
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "402"
|
||||
"linux" "402"
|
||||
"windows" "405"
|
||||
"linux" "405"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "132"
|
||||
"linux" "133"
|
||||
"windows" "133"
|
||||
"linux" "134"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "124"
|
||||
"linux" "125"
|
||||
"windows" "125"
|
||||
"linux" "126"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
@@ -73,8 +73,8 @@
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "234"
|
||||
"linux" "235"
|
||||
"windows" "235"
|
||||
"linux" "236"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
@@ -83,8 +83,8 @@
|
||||
}
|
||||
"PlayerRunCmd"
|
||||
{
|
||||
"windows" "376"
|
||||
"linux" "377"
|
||||
"windows" "377"
|
||||
"linux" "378"
|
||||
}
|
||||
}
|
||||
"Signatures"
|
||||
@@ -92,15 +92,56 @@
|
||||
"FindEntityByClassname"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x2A\x2A\x2A\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xE0\x2A\x8B\x3C\x30\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8D\x2A\x2A\x2A\x2A\x2A\x2A\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39"
|
||||
"windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x2A\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\x2A\x2A\x2A\x2A\x40\xC1\xE0\x2A\x8B\x3C\x30\xEB\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5D\x2A\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x2A\x2A\x2A\x2A\x83\xC4\x2A\xEB\x2A\x39"
|
||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||
}
|
||||
"FireOutput"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x57\x89"
|
||||
"windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\x71\x2A\x57"
|
||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"zps"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
/* Offset into CBaseTempEntity constructor */
|
||||
"s_pTempEntities"
|
||||
{
|
||||
"windows" "19"
|
||||
}
|
||||
"GetTEName"
|
||||
{
|
||||
"windows" "4"
|
||||
"linux" "4"
|
||||
}
|
||||
"GetTENext"
|
||||
{
|
||||
"windows" "8"
|
||||
"linux" "8"
|
||||
}
|
||||
"TE_GetServerClass"
|
||||
{
|
||||
"windows" "0"
|
||||
"linux" "0"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"CBaseTempEntity"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x8B\xC1\x8B\x4D\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x89"
|
||||
}
|
||||
"s_pTempEntities"
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "@_ZN15CBaseTempEntity15s_pTempEntitiesE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"ClanTagOffset"
|
||||
{
|
||||
"windows" "24"
|
||||
"linux" "42"
|
||||
"linux" "29"
|
||||
"mac" "29"
|
||||
}
|
||||
}
|
||||
@@ -69,21 +69,21 @@
|
||||
"CSWeaponDrop"//Wildcard first 6 bytes for CS:S DM
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x89\x8D\x5C\x2A\x2A\x2A\xC6\x45\x2A\x2A\x8B\x8D\x5C\x2A\x2A\x2A\xE8"
|
||||
"windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x89\x8D\x2A\x2A\x2A\x2A\xC6\x2A\x2A\x00\x8B\x8D\x2A\x2A\x2A\x2A\xE8"
|
||||
"linux" "@_ZN9CCSPlayer12CSWeaponDropEP17CBaseCombatWeaponbb"
|
||||
"mac" "@_ZN9CCSPlayer12CSWeaponDropEP17CBaseCombatWeaponbb"
|
||||
}
|
||||
"TerminateRound"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x8B\x2A\x2A\x56\x57\x33\xFF\x83"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x24\x53\x8B\x5D\x0C\x56\x57\x33\xFF"
|
||||
"linux" "@_ZN12CCSGameRules14TerminateRoundEfi"
|
||||
"mac" "@_ZN12CCSGameRules14TerminateRoundEfi"
|
||||
}
|
||||
"GetTranslatedWeaponAlias"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x56\x57\x8B\x2A\x2A\x33\xF6\x8D\x2A\x00\x00\x00\x00\x8B\x04\xF5\x2A\x2A\x2A\x2A\x57\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x2A\x85\xC0\x74\x2A\x83\xC6\x01\x83\x2A\x1A"
|
||||
"windows" "\x55\x8B\xEC\x56\x57\x8B\x7D\x08\x33\xF6\x8D\x9B\x00\x00\x00\x00\x8B\x04\xF5\x2A\x2A\x2A\x2A\x57\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x85\xC0\x74\x2A\x46\x83\xFE\x1A\x72\x2A\x8B\xC7\x5F"
|
||||
"linux" "@_Z24GetTranslatedWeaponAliasPKc"
|
||||
"mac" "@_Z24GetTranslatedWeaponAliasPKc"
|
||||
}
|
||||
|
||||
+13
-13
@@ -18,14 +18,14 @@
|
||||
"Burn"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x2A\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x57\x8D"
|
||||
"windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x2A\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x57\x6A\x2A\x8D\x2A\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\xC1\x2A\x2A\x24\x01\x0F\x2A\x2A\x2A\x2A\x2A\x8B"
|
||||
"linux" "@_ZN15CTFPlayerShared4BurnEP9CTFPlayerP13CTFWeaponBase"
|
||||
"mac" "@_ZN15CTFPlayerShared4BurnEP9CTFPlayerP13CTFWeaponBase"
|
||||
}
|
||||
"RemoveDisguise"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x56\x8B\xF1\x57\x8D\x9E"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x57\x8B\xF1\x6A\x2A\x8D\x2A\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x84\xC0"
|
||||
"linux" "@_ZN15CTFPlayerShared14RemoveDisguiseEv"
|
||||
"mac" "@_ZN15CTFPlayerShared14RemoveDisguiseEv"
|
||||
}
|
||||
@@ -41,7 +41,7 @@
|
||||
"library" "server"
|
||||
"linux" "@_ZN13CTFWeaponBase26CalcIsAttackCriticalHelperEv"
|
||||
"mac" "@_ZN13CTFWeaponBase26CalcIsAttackCriticalHelperEv"
|
||||
"windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\x2A\x83\xC4\x2A\x55\x8B\x6B\x2A\x89\x6C\x24\x2A\x8B\xEC\x83\xEC\x2A\x56\x57\x6A\x00"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x57\x6A\x00\x68\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\x6A\x00\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x50\xE8\x2A\x2A\x2A\x2A\x8B\xF8\x83\xC4\x2A\x85\xFF\x74\x2A\x8B"
|
||||
}
|
||||
"CalcCriticalMelee"
|
||||
{
|
||||
@@ -67,21 +67,21 @@
|
||||
"AddCondition"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x57\x8B\x7D\x2A\x83\xFF\x2A\x8B\xF1\x7C\x2A\x8D\x47\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x89\x45\x2A\xEB\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x89\x7D\x2A\x8B\x8E\x2A\x2A\x2A\x2A\xD9"
|
||||
"linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondf"
|
||||
"mac" "@_ZN15CTFPlayerShared7AddCondE7ETFCondf"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x57\x8B\x7D\x2A\x8B\xF1\x83\xFF\x2A\x7C\x2A\x8D\x2A\x2A\x8D\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\xEB\x2A\x83\xFF\x2A\x7C"
|
||||
"linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity"
|
||||
"mac" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity"
|
||||
}
|
||||
"RemoveCondition"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x57\x8B\x7D\x2A\x83\xFF\x2A\x8B\xF1\x7C\x2A\x8D\x47\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x89\x45\x2A\xEB\x2A\x8D\x9E\x2A\x2A\x2A\x2A\x89\x7D\x2A\x8B\x4D"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x8B\x75\x2A\x57\x8B\xF9\x83"
|
||||
"linux" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb"
|
||||
"mac" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb"
|
||||
}
|
||||
"SetPowerplayEnabled"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x80\x7D\x2A\x2A\x56\x8B\xF1\x74\x2A\x57\x8D\x45"
|
||||
"windows" "\x55\x8B\xEC\x80\x2A\x2A\x2A\x56\x57\x8B\xF1\x74\x2A\x80\x2A\x2A\x2A\x2A\x2A\x2A\x74"
|
||||
"linux" "@_ZN9CTFPlayer19SetPowerplayEnabledEb"
|
||||
"mac" "@_ZN9CTFPlayer19SetPowerplayEnabledEb"
|
||||
}
|
||||
@@ -95,7 +95,7 @@
|
||||
"StunPlayer"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x51\xD9\x05\x2A\x2A\x2A\x2A\x56\x57\x83\xEC\x14"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x8B\xF1\x8B\x86\x2A\x2A\x2A\x2A\x40\x3D\x2A\x2A\x2A\x2A\x0F"
|
||||
"linux" "@_ZN15CTFPlayerShared10StunPlayerEffiP9CTFPlayer"
|
||||
"mac" "@_ZN15CTFPlayerShared10StunPlayerEffiP9CTFPlayer"
|
||||
}
|
||||
@@ -109,7 +109,7 @@
|
||||
"MakeBleed"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x2A\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x6A\x19"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x57\x8B\xF9\x8B\x8F\x2A\x2A\x2A\x2A\x8B\x01\x8B"
|
||||
"linux" "@_ZN15CTFPlayerShared9MakeBleedEP9CTFPlayerP13CTFWeaponBasefi"
|
||||
"mac" "@_ZN15CTFPlayerShared9MakeBleedEP9CTFPlayerP13CTFWeaponBasefi"
|
||||
}
|
||||
@@ -125,9 +125,9 @@
|
||||
{
|
||||
"ForceRespawn"
|
||||
{
|
||||
"windows" "321"
|
||||
"linux" "322"
|
||||
"mac" "322"
|
||||
"windows" "323"
|
||||
"linux" "324"
|
||||
"mac" "324"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -506,7 +506,7 @@ stock bool:VoteMenuToAll(Handle:menu, time, flags=0)
|
||||
|
||||
for (new i=1; i<=MaxClients; i++)
|
||||
{
|
||||
if (!IsClientInGame(i))
|
||||
if (!IsClientInGame(i) || IsFakeClient(i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
+14
-2
@@ -109,6 +109,7 @@ enum TFCond
|
||||
TFCond_NoHealingDamageBuff,
|
||||
TFCond_SpeedBuffAlly,
|
||||
TFCond_HalloweenCritCandy,
|
||||
TFCond_CritCanteen,
|
||||
|
||||
TFCond_CritHype = 36,
|
||||
TFCond_CritOnFirstBlood,
|
||||
@@ -117,8 +118,18 @@ enum TFCond
|
||||
TFCond_CritOnKill,
|
||||
TFCond_RestrictToMelee,
|
||||
|
||||
TFCond_CritMmmph = 44,
|
||||
TFCond_Reprogrammed = 43,
|
||||
TFCond_CritMmmph,
|
||||
TFCond_DefenseBuffMmmph,
|
||||
TFCond_FocusBuff,
|
||||
TFCond_DisguiseRemoved,
|
||||
TFCond_MarkedForDeathSilent,
|
||||
TFCond_DisguisedAsDispenser,
|
||||
TFCond_Sapped,
|
||||
TFCond_UberchargedHidden,
|
||||
TFCond_UberchargedCanteen,
|
||||
TFCond_HalloweenBombHead,
|
||||
TFCond_HalloweenThriller,
|
||||
};
|
||||
|
||||
enum TFHoliday
|
||||
@@ -126,10 +137,11 @@ enum TFHoliday
|
||||
TFHoliday_Birthday = 1,
|
||||
TFHoliday_Halloween,
|
||||
TFHoliday_Christmas,
|
||||
TFHoliday_ValentinesDay,
|
||||
TFHoliday_MeetThePyro,
|
||||
TFHoliday_MannVsMachine,
|
||||
TFHoliday_FullMoon,
|
||||
TFHoliday_HalloweenOrFullMoon,
|
||||
TFHoliday_HalloweenOrFullMoonOrValentines,
|
||||
};
|
||||
|
||||
enum TFObjectType
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
|
||||
#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */
|
||||
#define SOURCEMOD_V_MINOR 4 /**< SourceMod Minor version */
|
||||
#define SOURCEMOD_V_RELEASE 5 /**< SourceMod Release version */
|
||||
#define SOURCEMOD_V_RELEASE 7 /**< SourceMod Release version */
|
||||
|
||||
#define SOURCEMOD_VERSION "1.4.5" /**< SourceMod version string (major.minor.release.build) */
|
||||
#define SOURCEMOD_VERSION "1.4.7" /**< SourceMod version string (major.minor.release.build) */
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.4.5
|
||||
1.4.7
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/** SourcePawn Engine API Version */
|
||||
#define SOURCEPAWN_ENGINE_API_VERSION 4
|
||||
#define SOURCEPAWN_ENGINE2_API_VERSION 3
|
||||
#define SOURCEPAWN_ENGINE2_API_VERSION 4
|
||||
|
||||
#if !defined SOURCEMOD_BUILD
|
||||
#define SOURCEMOD_BUILD
|
||||
@@ -479,6 +479,20 @@ namespace SourcePawn
|
||||
* @return Memory usage, in bytes.
|
||||
*/
|
||||
virtual size_t GetMemUsage() =0;
|
||||
|
||||
/**
|
||||
* @brief Returns the MD5 hash of the plugin's P-Code.
|
||||
*
|
||||
* @return 16-byte buffer with MD5 hash of the plugin's P-Code.
|
||||
*/
|
||||
virtual unsigned char *GetCodeHash() =0;
|
||||
|
||||
/**
|
||||
* @brief Returns the MD5 hash of the plugin's Data.
|
||||
*
|
||||
* @return 16-byte buffer with MD5 hash of the plugin's Data.
|
||||
*/
|
||||
virtual unsigned char *GetDataHash() =0;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -36,6 +36,7 @@ binary.AddSourceFiles('sourcepawn/jit', [
|
||||
'zlib/trees.c',
|
||||
'zlib/uncompr.c',
|
||||
'zlib/zutil.c',
|
||||
'md5/md5.cpp',
|
||||
'../../knight/shared/KeCodeAllocator.cpp'
|
||||
])
|
||||
SM.AutoVersion('sourcepawn/jit', binary)
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "sp_vm_basecontext.h"
|
||||
#include "engine2.h"
|
||||
|
||||
#include "md5/md5.h"
|
||||
|
||||
using namespace SourcePawn;
|
||||
|
||||
BaseRuntime::BaseRuntime() : m_Debug(&m_plugin), m_pPlugin(&m_plugin), m_pCtx(NULL),
|
||||
@@ -18,6 +20,9 @@ m_PubFuncs(NULL), m_PubJitFuncs(NULL), m_pCo(NULL), m_CompSerial(0)
|
||||
m_FuncCache = NULL;
|
||||
m_MaxFuncs = 0;
|
||||
m_NumFuncs = 0;
|
||||
|
||||
memset(m_CodeHash, 0, sizeof(m_CodeHash));
|
||||
memset(m_DataHash, 0, sizeof(m_DataHash));
|
||||
}
|
||||
|
||||
BaseRuntime::~BaseRuntime()
|
||||
@@ -214,7 +219,11 @@ int BaseRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
|
||||
return SP_ERROR_FILE_FORMAT;
|
||||
}
|
||||
|
||||
if ((plugin->flags & SP_FLAG_DEBUG) && (!(plugin->debug.files) || !(plugin->debug.lines) || !(plugin->debug.symbols)))
|
||||
if ((plugin->flags & SP_FLAG_DEBUG) && (
|
||||
!(plugin->debug.files) ||
|
||||
!(plugin->debug.lines) ||
|
||||
!(plugin->debug.symbols) ||
|
||||
!(plugin->debug.stringbase) ))
|
||||
{
|
||||
return SP_ERROR_FILE_FORMAT;
|
||||
}
|
||||
@@ -227,6 +236,16 @@ int BaseRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
|
||||
memset(m_PubJitFuncs, 0, sizeof(JitFunction *) * m_pPlugin->num_publics);
|
||||
}
|
||||
|
||||
MD5 md5_pcode;
|
||||
md5_pcode.update(plugin->pcode, plugin->pcode_size);
|
||||
md5_pcode.finalize();
|
||||
md5_pcode.raw_digest(m_CodeHash);
|
||||
|
||||
MD5 md5_data;
|
||||
md5_data.update(plugin->data, plugin->data_size);
|
||||
md5_data.finalize();
|
||||
md5_data.raw_digest(m_DataHash);
|
||||
|
||||
m_pPlugin->profiler = g_engine2.GetProfiler();
|
||||
m_pCtx = new BaseContext(this);
|
||||
m_pCo = g_Jit.StartCompilation(this);
|
||||
@@ -483,6 +502,16 @@ size_t BaseRuntime::GetMemUsage()
|
||||
return mem;
|
||||
}
|
||||
|
||||
unsigned char *BaseRuntime::GetCodeHash()
|
||||
{
|
||||
return m_CodeHash;
|
||||
}
|
||||
|
||||
unsigned char *BaseRuntime::GetDataHash()
|
||||
{
|
||||
return m_DataHash;
|
||||
}
|
||||
|
||||
BaseContext *BaseRuntime::GetBaseContext()
|
||||
{
|
||||
return m_pCtx;
|
||||
|
||||
@@ -48,6 +48,8 @@ public:
|
||||
virtual void SetPauseState(bool paused);
|
||||
virtual bool IsPaused();
|
||||
virtual size_t GetMemUsage();
|
||||
virtual unsigned char *GetCodeHash();
|
||||
virtual unsigned char *GetDataHash();
|
||||
JitFunction *GetJittedFunction(uint32_t idx);
|
||||
uint32_t AddJittedFunction(JitFunction *fn);
|
||||
public:
|
||||
@@ -65,6 +67,9 @@ public:
|
||||
JitFunction **m_PubJitFuncs;
|
||||
ICompilation *m_pCo;
|
||||
unsigned int m_CompSerial;
|
||||
|
||||
unsigned char m_CodeHash[16];
|
||||
unsigned char m_DataHash[16];
|
||||
};
|
||||
|
||||
#endif //_INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
|
||||
|
||||
@@ -0,0 +1,476 @@
|
||||
// MD5.CC - source code for the C++/object oriented translation and
|
||||
// modification of MD5.
|
||||
|
||||
// Translation and modification (c) 1995 by Mordechai T. Abzug
|
||||
|
||||
// This translation/ modification is provided "as is," without express or
|
||||
// implied warranty of any kind.
|
||||
|
||||
// The translator/ modifier does not claim (1) that MD5 will do what you think
|
||||
// it does; (2) that this translation/ modification is accurate; or (3) that
|
||||
// this software is "merchantible." (Language for this disclaimer partially
|
||||
// copied from the disclaimer below).
|
||||
|
||||
/* based on:
|
||||
|
||||
MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
|
||||
MDDRIVER.C - test driver for MD2, MD4 and MD5
|
||||
|
||||
|
||||
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
|
||||
*/
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
// MD5 simple initialization method
|
||||
|
||||
MD5::MD5(){
|
||||
|
||||
init();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// MD5 block update operation. Continues an MD5 message-digest
|
||||
// operation, processing another message block, and updating the
|
||||
// context.
|
||||
|
||||
void MD5::update (uint1 *input, uint4 input_length) {
|
||||
|
||||
uint4 input_index, buffer_index;
|
||||
uint4 buffer_space; // how much space is left in buffer
|
||||
|
||||
if (finalized){ // so we can't update!
|
||||
/*cerr << "MD5::update: Can't update a finalized digest!" << endl;*/
|
||||
return;
|
||||
}
|
||||
|
||||
// Compute number of bytes mod 64
|
||||
buffer_index = (unsigned int)((count[0] >> 3) & 0x3F);
|
||||
|
||||
// Update number of bits
|
||||
if ( (count[0] += ((uint4) input_length << 3))<((uint4) input_length << 3) )
|
||||
count[1]++;
|
||||
|
||||
count[1] += ((uint4)input_length >> 29);
|
||||
|
||||
|
||||
buffer_space = 64 - buffer_index; // how much space is left in buffer
|
||||
|
||||
// Transform as many times as possible.
|
||||
if (input_length >= buffer_space) { // ie. we have enough to fill the buffer
|
||||
// fill the rest of the buffer and transform
|
||||
memcpy (buffer + buffer_index, input, buffer_space);
|
||||
transform (buffer);
|
||||
|
||||
// now, transform each 64-byte piece of the input, bypassing the buffer
|
||||
for (input_index = buffer_space; input_index + 63 < input_length;
|
||||
input_index += 64)
|
||||
transform (input+input_index);
|
||||
|
||||
buffer_index = 0; // so we can buffer remaining
|
||||
}
|
||||
else
|
||||
input_index=0; // so we can buffer the whole input
|
||||
|
||||
|
||||
// and here we do the buffering:
|
||||
memcpy(buffer+buffer_index, input+input_index, input_length-input_index);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MD5 update for files.
|
||||
// Like above, except that it works on files (and uses above as a primitive.)
|
||||
|
||||
void MD5::update(FILE *file){
|
||||
|
||||
unsigned char buffer[1024];
|
||||
int len;
|
||||
|
||||
while ((len=fread(buffer, 1, 1024, file)))
|
||||
update(buffer, len);
|
||||
|
||||
fclose (file);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// MD5 finalization. Ends an MD5 message-digest operation, writing the
|
||||
// the message digest and zeroizing the context.
|
||||
|
||||
|
||||
void MD5::finalize (){
|
||||
|
||||
unsigned char bits[8];
|
||||
unsigned int index, padLen;
|
||||
static uint1 PADDING[64]={
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
if (finalized){
|
||||
/* cerr << "MD5::finalize: Already finalized this digest!" << endl;*/
|
||||
return;
|
||||
}
|
||||
|
||||
// Save number of bits
|
||||
encode (bits, count, 8);
|
||||
|
||||
// Pad out to 56 mod 64.
|
||||
index = (uint4) ((count[0] >> 3) & 0x3f);
|
||||
padLen = (index < 56) ? (56 - index) : (120 - index);
|
||||
update (PADDING, padLen);
|
||||
|
||||
// Append length (before padding)
|
||||
update (bits, 8);
|
||||
|
||||
// Store state in digest
|
||||
encode (digest, state, 16);
|
||||
|
||||
// Zeroize sensitive information
|
||||
memset (buffer, 0, sizeof(*buffer));
|
||||
|
||||
finalized=1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
MD5::MD5(FILE *file){
|
||||
|
||||
init(); // must be called be all constructors
|
||||
update(file);
|
||||
finalize ();
|
||||
}
|
||||
|
||||
unsigned char *MD5::raw_digest(){
|
||||
|
||||
uint1 *s = new uint1[16];
|
||||
|
||||
if (!finalized){
|
||||
/* cerr << "MD5::raw_digest: Can't get digest if you haven't "<<
|
||||
"finalized the digest!" <<endl;*/
|
||||
return ( (unsigned char*) "");
|
||||
}
|
||||
|
||||
memcpy(s, digest, 16);
|
||||
return s;
|
||||
}
|
||||
|
||||
unsigned char *MD5::raw_digest(unsigned char buffer[16])
|
||||
{
|
||||
if (!finalized)
|
||||
{
|
||||
return ( (unsigned char*) "");
|
||||
}
|
||||
|
||||
memcpy(buffer, digest, 16);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *MD5::hex_digest(){
|
||||
|
||||
int i;
|
||||
char *s= new char[33];
|
||||
|
||||
assert(finalized);
|
||||
|
||||
for (i=0; i<16; i++)
|
||||
sprintf(s+i*2, "%02x", digest[i]);
|
||||
|
||||
s[32]='\0';
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
char *MD5::hex_digest(char buffer[33]){
|
||||
|
||||
int i;
|
||||
|
||||
assert(finalized);
|
||||
|
||||
for (i=0; i<16; i++)
|
||||
sprintf(buffer+i*2, "%02x", digest[i]);
|
||||
|
||||
buffer[32]='\0';
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
// PRIVATE METHODS:
|
||||
|
||||
|
||||
|
||||
void MD5::init(){
|
||||
finalized=0; // we just started!
|
||||
|
||||
// Nothing counted, so count=0
|
||||
count[0] = 0;
|
||||
count[1] = 0;
|
||||
|
||||
// Load magic initialization constants.
|
||||
state[0] = 0x67452301;
|
||||
state[1] = 0xefcdab89;
|
||||
state[2] = 0x98badcfe;
|
||||
state[3] = 0x10325476;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Constants for MD5Transform routine.
|
||||
// Although we could use C++ style constants, defines are actually better,
|
||||
// since they let us easily evade scope clashes.
|
||||
|
||||
#define S11 7
|
||||
#define S12 12
|
||||
#define S13 17
|
||||
#define S14 22
|
||||
#define S21 5
|
||||
#define S22 9
|
||||
#define S23 14
|
||||
#define S24 20
|
||||
#define S31 4
|
||||
#define S32 11
|
||||
#define S33 16
|
||||
#define S34 23
|
||||
#define S41 6
|
||||
#define S42 10
|
||||
#define S43 15
|
||||
#define S44 21
|
||||
|
||||
|
||||
|
||||
|
||||
// MD5 basic transformation. Transforms state based on block.
|
||||
void MD5::transform (uint1 block[64]){
|
||||
|
||||
uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
|
||||
|
||||
decode (x, block, 64);
|
||||
|
||||
assert(!finalized); // not just a user error, since the method is private
|
||||
|
||||
/* Round 1 */
|
||||
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
|
||||
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
|
||||
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
|
||||
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
|
||||
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
|
||||
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
|
||||
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
|
||||
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
|
||||
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
|
||||
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
|
||||
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
|
||||
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
|
||||
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
|
||||
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
|
||||
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
|
||||
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
|
||||
|
||||
/* Round 2 */
|
||||
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
|
||||
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
|
||||
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
|
||||
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
|
||||
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
|
||||
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
|
||||
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
|
||||
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
|
||||
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
|
||||
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
|
||||
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
|
||||
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
|
||||
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
|
||||
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
|
||||
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
|
||||
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
|
||||
|
||||
/* Round 3 */
|
||||
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
|
||||
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
|
||||
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
|
||||
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
|
||||
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
|
||||
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
|
||||
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
|
||||
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
|
||||
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
|
||||
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
|
||||
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
|
||||
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
|
||||
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
|
||||
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
|
||||
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
|
||||
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
|
||||
|
||||
/* Round 4 */
|
||||
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
|
||||
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
|
||||
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
|
||||
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
|
||||
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
|
||||
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
|
||||
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
|
||||
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
|
||||
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
|
||||
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
|
||||
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
|
||||
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
|
||||
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
|
||||
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
|
||||
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
|
||||
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
|
||||
|
||||
state[0] += a;
|
||||
state[1] += b;
|
||||
state[2] += c;
|
||||
state[3] += d;
|
||||
|
||||
// Zeroize sensitive information.
|
||||
memset ( (uint1 *) x, 0, sizeof(x));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Encodes input (UINT4) into output (unsigned char). Assumes len is
|
||||
// a multiple of 4.
|
||||
void MD5::encode (uint1 *output, uint4 *input, uint4 len) {
|
||||
|
||||
unsigned int i, j;
|
||||
|
||||
for (i = 0, j = 0; j < len; i++, j += 4) {
|
||||
output[j] = (uint1) (input[i] & 0xff);
|
||||
output[j+1] = (uint1) ((input[i] >> 8) & 0xff);
|
||||
output[j+2] = (uint1) ((input[i] >> 16) & 0xff);
|
||||
output[j+3] = (uint1) ((input[i] >> 24) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Decodes input (unsigned char) into output (UINT4). Assumes len is
|
||||
// a multiple of 4.
|
||||
void MD5::decode (uint4 *output, uint1 *input, uint4 len){
|
||||
|
||||
unsigned int i, j;
|
||||
|
||||
for (i = 0, j = 0; j < len; i++, j += 4)
|
||||
output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
|
||||
(((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Note: Replace "for loop" with standard memcpy if possible.
|
||||
void MD5::memcpy (uint1 *output, uint1 *input, uint4 len){
|
||||
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
output[i] = input[i];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Note: Replace "for loop" with standard memset if possible.
|
||||
void MD5::memset (uint1 *output, uint1 value, uint4 len){
|
||||
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
output[i] = value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ROTATE_LEFT rotates x left n bits.
|
||||
|
||||
inline unsigned int MD5::rotate_left (uint4 x, uint4 n){
|
||||
return (x << n) | (x >> (32-n)) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// F, G, H and I are basic MD5 functions.
|
||||
|
||||
inline unsigned int MD5::F (uint4 x, uint4 y, uint4 z){
|
||||
return (x & y) | (~x & z);
|
||||
}
|
||||
|
||||
inline unsigned int MD5::G (uint4 x, uint4 y, uint4 z){
|
||||
return (x & z) | (y & ~z);
|
||||
}
|
||||
|
||||
inline unsigned int MD5::H (uint4 x, uint4 y, uint4 z){
|
||||
return x ^ y ^ z;
|
||||
}
|
||||
|
||||
inline unsigned int MD5::I (uint4 x, uint4 y, uint4 z){
|
||||
return y ^ (x | ~z);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
|
||||
// Rotation is separate from addition to prevent recomputation.
|
||||
|
||||
|
||||
inline void MD5::FF(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac){
|
||||
a += F(b, c, d) + x + ac;
|
||||
a = rotate_left (a, s) +b;
|
||||
}
|
||||
|
||||
inline void MD5::GG(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac){
|
||||
a += G(b, c, d) + x + ac;
|
||||
a = rotate_left (a, s) +b;
|
||||
}
|
||||
|
||||
inline void MD5::HH(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac){
|
||||
a += H(b, c, d) + x + ac;
|
||||
a = rotate_left (a, s) +b;
|
||||
}
|
||||
|
||||
inline void MD5::II(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac){
|
||||
a += I(b, c, d) + x + ac;
|
||||
a = rotate_left (a, s) +b;
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
// MD5.CC - source code for the C++/object oriented translation and
|
||||
// modification of MD5.
|
||||
|
||||
// Translation and modification (c) 1995 by Mordechai T. Abzug
|
||||
|
||||
// This translation/ modification is provided "as is," without express or
|
||||
// implied warranty of any kind.
|
||||
|
||||
// The translator/ modifier does not claim (1) that MD5 will do what you think
|
||||
// it does; (2) that this translation/ modification is accurate; or (3) that
|
||||
// this software is "merchantible." (Language for this disclaimer partially
|
||||
// copied from the disclaimer below).
|
||||
|
||||
/* based on:
|
||||
|
||||
MD5.H - header file for MD5C.C
|
||||
MDDRIVER.C - test driver for MD2, MD4 and MD5
|
||||
|
||||
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
//#include <fstream.h>
|
||||
//#include <iostream.h>
|
||||
|
||||
class MD5 {
|
||||
|
||||
public:
|
||||
// methods for controlled operation:
|
||||
MD5 (); // simple initializer
|
||||
void update (unsigned char *input, unsigned int input_length);
|
||||
void update (FILE *file);
|
||||
void finalize ();
|
||||
|
||||
// constructors for special circumstances. All these constructors finalize
|
||||
// the MD5 context.
|
||||
MD5 (unsigned char *string); // digest string, finalize
|
||||
MD5 (FILE *file); // digest file, close, finalize
|
||||
|
||||
// methods to acquire finalized result
|
||||
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
||||
unsigned char *raw_digest(unsigned char buffer[16]);
|
||||
char * hex_digest (); // digest as a 33-byte ascii-hex string
|
||||
char * hex_digest (char buffer[33]); //same as above, passing buffer
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// first, some types:
|
||||
typedef unsigned int uint4; // assumes integer is 4 words long
|
||||
typedef unsigned short int uint2; // assumes short integer is 2 words long
|
||||
typedef unsigned char uint1; // assumes char is 1 word long
|
||||
|
||||
// next, the private data:
|
||||
uint4 state[4];
|
||||
uint4 count[2]; // number of *bits*, mod 2^64
|
||||
uint1 buffer[64]; // input buffer
|
||||
uint1 digest[16];
|
||||
uint1 finalized;
|
||||
|
||||
// last, the private methods, mostly static:
|
||||
void init (); // called by all constructors
|
||||
void transform (uint1 *buffer); // does the real update work. Note
|
||||
// that length is implied to be 64.
|
||||
|
||||
static void encode (uint1 *dest, uint4 *src, uint4 length);
|
||||
static void decode (uint4 *dest, uint1 *src, uint4 length);
|
||||
static void memcpy (uint1 *dest, uint1 *src, uint4 length);
|
||||
static void memset (uint1 *start, uint1 val, uint4 length);
|
||||
|
||||
static inline uint4 rotate_left (uint4 x, uint4 n);
|
||||
static inline uint4 F (uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 G (uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 H (uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 I (uint4 x, uint4 y, uint4 z);
|
||||
static inline void FF (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac);
|
||||
static inline void GG (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac);
|
||||
static inline void HH (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac);
|
||||
static inline void II (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
|
||||
uint4 s, uint4 ac);
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user