Compare commits
93
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 | ||
|
|
ee7413bbdd | ||
|
|
764d63a533 | ||
|
|
bcbff0b2e9 | ||
|
|
35b74715d8 | ||
|
|
e0639de6a0 | ||
|
|
f025fd8a05 | ||
|
|
625848b95d | ||
|
|
2de9d5f9cb | ||
|
|
ab15436a7f | ||
|
|
e507aa5025 | ||
|
|
8b205b0d5d | ||
|
|
e4e54510c8 | ||
|
|
d706023c74 | ||
|
|
8df27acc1f | ||
|
|
4c5c2eae24 | ||
|
|
bc4eecae8f | ||
|
|
218b9b1fab | ||
|
|
0750b93797 | ||
|
|
41b0e7fc53 | ||
|
|
801815b742 | ||
|
|
01a826268b | ||
|
|
55ec20b215 | ||
|
|
dc550c25e5 | ||
|
|
ad842e4665 | ||
|
|
f7398119f4 | ||
|
|
b21337c56d | ||
|
|
c1d040e153 | ||
|
|
4c3fb52c69 | ||
|
|
31c29fb33e | ||
|
|
87af9af0f6 | ||
|
|
ebb26e6144 | ||
|
|
50c15f4f78 | ||
|
|
e02bdca793 | ||
|
|
8bcbe128e7 | ||
|
|
68991bc733 | ||
|
|
d77d1de462 | ||
|
|
e1081c0a50 | ||
|
|
2b3f888712 | ||
|
|
b8e530ab7e | ||
|
|
274539cf49 | ||
|
|
6e92d0df4f | ||
|
|
1bb5f0e52b | ||
|
|
1af3446593 | ||
|
|
b70b8cf0cb | ||
|
|
8dca4bf093 | ||
|
|
a7d170bf13 | ||
|
|
f5865ee46f | ||
|
|
adac0f17c4 | ||
|
|
b8b9e4db90 | ||
|
|
5fdb4d05fa | ||
|
|
93768cfd4d | ||
|
|
8cdd3faa89 | ||
|
|
98dee0097a | ||
|
|
090cc9f818 | ||
|
|
9abbe96a7f | ||
|
|
3aeab98517 | ||
|
|
11daaac1b4 | ||
|
|
15c5ed1dd3 | ||
|
|
1bb9adc767 | ||
|
|
dd83c23cda | ||
|
|
e8a6040926 | ||
|
|
5ff8ec62e0 | ||
|
|
1f06a6951d | ||
|
|
d65f993c53 |
@@ -9,3 +9,10 @@ a3e8f7a7fdf7f012dd02ad491a2e1ccdad151687 sourcemod-1.3.2
|
|||||||
c5062ca8283033cf33f45da6f19e486ca10835ff sourcemod-1.3.3
|
c5062ca8283033cf33f45da6f19e486ca10835ff sourcemod-1.3.3
|
||||||
4d6afc42522c8f416dc45be7af7b145507b00630 sourcemod-1.3.4
|
4d6afc42522c8f416dc45be7af7b145507b00630 sourcemod-1.3.4
|
||||||
9de8baa40cc593d8ca5f976a3357772e804ae9e8 sourcemod-1.3.5
|
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', '-mfpmath=sse')
|
||||||
self.compiler.AddToListVar('CFLAGS', '-msse')
|
self.compiler.AddToListVar('CFLAGS', '-msse')
|
||||||
self.compiler.AddToListVar('CFLAGS', '-m32')
|
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-exceptions')
|
||||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
|
self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
|
||||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
|
self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
|
||||||
|
|||||||
+65
-2
@@ -1,5 +1,68 @@
|
|||||||
SourceMod Changelog
|
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]
|
||||||
|
|
||||||
|
URL: http://wiki.alliedmods.net/SourceMod_1.3.7_Release_Notes
|
||||||
|
|
||||||
|
User Changes:
|
||||||
|
|
||||||
|
- Updated support for latest OrangeBox engine changes (CS:S, DoD:S, TF2, HL2DM, GMod).
|
||||||
|
- Updated support for various games, including Zombie Panic, CS ProMod, Empires, and GoldenEye: Source.
|
||||||
|
- Added gamedata for Dino D-Day.
|
||||||
|
- Fix precedence of voice mute flag versus specific client overrides (bug 4826).
|
||||||
|
- Fix mistaken unhooking of voice hooks (bug 4804).
|
||||||
|
- Fixed graphical glitches with funcommands effects in L4D1 (bug 3486).
|
||||||
|
- Fixed bug in nominations that could cause "Unknown command" error (bug 4797).
|
||||||
|
- Removed tv_enable hook to fix rare max client count issue (bug 4791).
|
||||||
|
- Added missing unhooking of ClientConnect in PlayerManager (bug 4749).
|
||||||
|
- Fixed sm_rtv printing "unknown command" (bug 4730).
|
||||||
|
- Fixed voting crash when client console, chat, and SourceTV are enabled (bug 4676).
|
||||||
|
- Fixed CDetour crash in TF2 extension when last plugin using forward is unloaded (bug 4713).
|
||||||
|
|
||||||
|
Developer Changes:
|
||||||
|
|
||||||
|
- SetEntProp now marks edict state as changed (bug 4855).
|
||||||
|
- Added GetEntityClassname stock (bug 4798).
|
||||||
|
- Fix compiler hanging when #including a directory (bug 4822).
|
||||||
|
- Added GetEntityFlags and SetEntityFlags natives for better cross-engine compatibility. (bug 4809).
|
||||||
|
- Fixed ClientPrefs natives not being marked optional when REQUIRE_EXTENSIONS not defined (bug 4839).
|
||||||
|
- Changed some instances of LogMessage to LogAction (bug 4649).
|
||||||
|
- Added some new language natives (bug 4613).
|
||||||
|
- Fixed SetTeamScore not updating score on client (bug 2736).
|
||||||
|
- Raised MAXPLAYERS from 64 to 65 (bug 4490).
|
||||||
|
- Added and updated many TF2-specific defines in tf2.inc and tf2_stocks.inc.
|
||||||
|
- Fixed TF2_GetPlayerConditionFlags no longer necessarily returning all set flags (bug 4726).
|
||||||
|
- Fixed profiler flush not clearing, added 'report' and 'clear' (bug 4674).
|
||||||
|
- Fixed GetPlayerDecalFile crash on L4D and L4D2 (bug 4729).
|
||||||
|
- Fixed TF2_OnGetHoliday detour no longer firing under all circumstances (bug 4700).
|
||||||
|
- Added TF2_IsPlayerInDuel native to TF2 extension (bug 4695).
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
SourceMod 1.3.6 [2010-10-31]
|
SourceMod 1.3.6 [2010-10-31]
|
||||||
@@ -8,11 +71,11 @@ URL: http://wiki.alliedmods.net/SourceMod_1.3.6_Release_Notes
|
|||||||
|
|
||||||
User Changes:
|
User Changes:
|
||||||
|
|
||||||
- Updated support for latest Left 4 Dead 1 (bug 4682).
|
- Updated support for latest Left 4 Dead 1 (bug 4681).
|
||||||
|
|
||||||
Developer Changes:
|
Developer Changes:
|
||||||
|
|
||||||
- Updated TF2 custom kill defines (bug 4681).
|
- Updated TF2 custom kill defines (bug 4682).
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
|||||||
+36
-39
@@ -226,30 +226,38 @@ void ConCmdManager::SetCommandClient(int client)
|
|||||||
m_CmdClient = client + 1;
|
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)
|
ResultType ConCmdManager::DispatchClientCommand(int client, const char *cmd, int args, ResultType type)
|
||||||
{
|
{
|
||||||
ConCmdInfo *pInfo;
|
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;
|
return type;
|
||||||
}
|
pInfo = *item;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell_t result = type;
|
cell_t result = type;
|
||||||
@@ -314,35 +322,20 @@ void ConCmdManager::InternalDispatch(const CCommand &command)
|
|||||||
*/
|
*/
|
||||||
const char *cmd = g_HL2.CurrentCommandName();
|
const char *cmd = g_HL2.CurrentCommandName();
|
||||||
|
|
||||||
ConCmdInfo *pInfo;
|
ConCmdInfo *pInfo = FindInTrie(cmd);
|
||||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
if (pInfo == NULL)
|
||||||
{
|
{
|
||||||
/* Unfortunately, we now have to do a slow lookup because Valve made client commands
|
/* Unfortunately, we now have to do a slow lookup because Valve made client commands
|
||||||
* case-insensitive. We can't even use our sortedness.
|
* case-insensitive. We can't even use our sortedness.
|
||||||
*/
|
*/
|
||||||
if (client == 0 && !engine->IsDedicatedServer())
|
if (client == 0 && !engine->IsDedicatedServer())
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
List<ConCmdInfo *>::iterator iter;
|
ConCmdList::iterator item = FindInList(cmd);
|
||||||
|
if (item == m_CmdList.end())
|
||||||
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;
|
return;
|
||||||
}
|
|
||||||
|
pInfo = *item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a hack to prevent say triggers from firing on messages that were
|
/* 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;
|
ConCmdInfo *pInfo;
|
||||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&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();
|
pInfo = new ConCmdInfo();
|
||||||
/* Find the commandopan */
|
/* Find the commandopan */
|
||||||
ConCommand *pCmd = FindCommand(name);
|
ConCommand *pCmd = FindCommand(name);
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ struct ConCmdInfo
|
|||||||
bool is_admin_set; /**< Whether or not admin info is set */
|
bool is_admin_set; /**< Whether or not admin info is set */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef List<ConCmdInfo *> ConCmdList;
|
||||||
|
|
||||||
class ConCmdManager :
|
class ConCmdManager :
|
||||||
public SMGlobalClass,
|
public SMGlobalClass,
|
||||||
public IRootConsoleCommand,
|
public IRootConsoleCommand,
|
||||||
@@ -139,6 +141,12 @@ private:
|
|||||||
void RemoveConCmds(List<CmdHook *> &cmdlist);
|
void RemoveConCmds(List<CmdHook *> &cmdlist);
|
||||||
void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
|
void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
|
||||||
bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
|
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:
|
public:
|
||||||
inline int GetCommandClient()
|
inline int GetCommandClient()
|
||||||
{
|
{
|
||||||
@@ -151,7 +159,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
Trie *m_pCmds; /* command lookup */
|
Trie *m_pCmds; /* command lookup */
|
||||||
Trie *m_pCmdGrps; /* command group lookup */
|
Trie *m_pCmdGrps; /* command group lookup */
|
||||||
List<ConCmdInfo *> m_CmdList; /* command list */
|
ConCmdList m_CmdList; /* command list */
|
||||||
int m_CmdClient; /* current client */
|
int m_CmdClient; /* current client */
|
||||||
BaseStringTable m_Strings; /* string table */
|
BaseStringTable m_Strings; /* string table */
|
||||||
};
|
};
|
||||||
|
|||||||
+33
-12
@@ -132,40 +132,61 @@ void CHalfLife2::OnSourceModAllInitialized()
|
|||||||
void CHalfLife2::OnSourceModAllInitialized_Post()
|
void CHalfLife2::OnSourceModAllInitialized_Post()
|
||||||
{
|
{
|
||||||
char *addr = NULL;
|
char *addr = NULL;
|
||||||
#ifdef PLATFORM_WINDOWS
|
|
||||||
int offset;
|
|
||||||
|
|
||||||
/* gEntList and/or g_pEntityList */
|
/*
|
||||||
|
* gEntList and/or g_pEntityList
|
||||||
|
*
|
||||||
|
* First try to lookup pointer directly for platforms with symbols.
|
||||||
|
* If symbols aren't present (Windows or stripped Linux/Mac),
|
||||||
|
* attempt find via LevelShutdown + offset
|
||||||
|
*/
|
||||||
|
if (g_pGameConf->GetMemSig("gEntList", (void **)&addr))
|
||||||
|
{
|
||||||
|
#if !defined PLATFORM_WINDOWS
|
||||||
|
if (!addr)
|
||||||
|
{
|
||||||
|
// Key exists so notify if lookup fails, but try other method.
|
||||||
|
g_Logger.LogError("Failed lookup of gEntList directly - Reverting to lookup via LevelShutdown");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
g_EntList = reinterpret_cast<void *>(addr);
|
||||||
|
#if !defined PLATFORM_WINDOWS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!g_EntList)
|
||||||
|
{
|
||||||
if (!g_pGameConf->GetMemSig("LevelShutdown", (void **)&addr))
|
if (!g_pGameConf->GetMemSig("LevelShutdown", (void **)&addr))
|
||||||
{
|
{
|
||||||
g_Logger.LogError("Logical Entities not supported by this mod (LevelShutdown) - Reverting to networkable entities only");
|
g_Logger.LogError("Logical Entities not supported by this mod (LevelShutdown) - Reverting to networkable entities only");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!addr)
|
if (!addr)
|
||||||
{
|
{
|
||||||
g_Logger.LogError("Failed lookup of LevelShutdown - Reverting to networkable entities only");
|
g_Logger.LogError("Failed lookup of LevelShutdown - Reverting to networkable entities only");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int offset;
|
||||||
if (!g_pGameConf->GetOffset("gEntList", &offset))
|
if (!g_pGameConf->GetOffset("gEntList", &offset))
|
||||||
{
|
{
|
||||||
g_Logger.LogError("Logical Entities not supported by this mod (gEntList) - Reverting to networkable entities only");
|
g_Logger.LogError("Logical Entities not supported by this mod (gEntList) - Reverting to networkable entities only");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_EntList = *reinterpret_cast<void **>(addr + offset);
|
g_EntList = *reinterpret_cast<void **>(addr + offset);
|
||||||
#elif defined PLATFORM_LINUX
|
|
||||||
/* gEntList and/or g_pEntityList */
|
|
||||||
if (!g_pGameConf->GetMemSig("gEntList", (void **)&addr))
|
|
||||||
{
|
|
||||||
g_Logger.LogError("Logical Entities not supported by this mod (gEntList) - Reverting to networkable entities only");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (!addr)
|
|
||||||
|
if (!g_EntList)
|
||||||
{
|
{
|
||||||
g_Logger.LogError("Failed lookup of gEntList - Reverting to networkable entities only");
|
g_Logger.LogError("Failed lookup of gEntList - Reverting to networkable entities only");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_EntList = reinterpret_cast<void *>(addr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!g_pGameConf->GetOffset("EntInfo", &entInfoOffset))
|
if (!g_pGameConf->GetOffset("EntInfo", &entInfoOffset))
|
||||||
{
|
{
|
||||||
|
|||||||
+7
-3
@@ -950,6 +950,10 @@ bool HandleSystem::InitAccessDefaults(TypeAccess *pTypeAccess, HandleAccess *pHa
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define HANDLE_LOG_VERY_BAD(message, ...) \
|
||||||
|
g_Logger.LogFatal(message, ##__VA_ARGS__); \
|
||||||
|
g_Logger.LogError(message, ##__VA_ARGS__);
|
||||||
|
|
||||||
bool HandleSystem::TryAndFreeSomeHandles()
|
bool HandleSystem::TryAndFreeSomeHandles()
|
||||||
{
|
{
|
||||||
IPluginIterator *pl_iter = g_PluginSys.GetPluginIterator();
|
IPluginIterator *pl_iter = g_PluginSys.GetPluginIterator();
|
||||||
@@ -995,9 +999,9 @@ bool HandleSystem::TryAndFreeSomeHandles()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Logger.LogFatal("[SM] MEMORY LEAK DETECTED IN PLUGIN (file \"%s\")", highest_owner->GetFilename());
|
HANDLE_LOG_VERY_BAD("[SM] MEMORY LEAK DETECTED IN PLUGIN (file \"%s\")", highest_owner->GetFilename());
|
||||||
g_Logger.LogFatal("[SM] Unloading plugin to free %d handles.", highest_handle_count);
|
HANDLE_LOG_VERY_BAD("[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] Contact the author(s) of this plugin to correct this error.", highest_handle_count);
|
||||||
|
|
||||||
highest_owner->GetBaseContext()->ThrowNativeErrorEx(SP_ERROR_MEMACCESS, "Memory leak");
|
highest_owner->GetBaseContext()->ThrowNativeErrorEx(SP_ERROR_MEMACCESS, "Memory leak");
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -538,7 +538,7 @@ void VoteMenuHandler::OnMenuSelect(IBaseMenu *menu, int client, unsigned int ite
|
|||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(i);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(i);
|
||||||
assert(pPlayer);
|
assert(pPlayer);
|
||||||
|
|
||||||
if (pPlayer->IsInGame())
|
if (pPlayer->IsInGame() && !pPlayer->IsFakeClient())
|
||||||
{
|
{
|
||||||
if (m_Revoting[client])
|
if (m_Revoting[client])
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-24
@@ -55,7 +55,7 @@ bool g_OnMapStarted = false;
|
|||||||
IForward *PreAdminCheck = NULL;
|
IForward *PreAdminCheck = NULL;
|
||||||
IForward *PostAdminCheck = NULL;
|
IForward *PostAdminCheck = NULL;
|
||||||
IForward *PostAdminFilter = NULL;
|
IForward *PostAdminFilter = NULL;
|
||||||
IForward *OnClientConnected = NULL;
|
|
||||||
const unsigned int *g_NumPlayersToAuth = NULL;
|
const unsigned int *g_NumPlayersToAuth = NULL;
|
||||||
int lifestate_offset = -1;
|
int lifestate_offset = -1;
|
||||||
List<ICommandTargetProcessor *> target_processors;
|
List<ICommandTargetProcessor *> target_processors;
|
||||||
@@ -142,6 +142,7 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
ParamType p2[] = {Param_Cell};
|
ParamType p2[] = {Param_Cell};
|
||||||
|
|
||||||
m_clconnect = g_Forwards.CreateForward("OnClientConnect", ET_LowEvent, 3, p1);
|
m_clconnect = g_Forwards.CreateForward("OnClientConnect", ET_LowEvent, 3, p1);
|
||||||
|
m_clconnect_post = g_Forwards.CreateForward("OnClientConnected", ET_Ignore, 1, p2);
|
||||||
m_clputinserver = g_Forwards.CreateForward("OnClientPutInServer", ET_Ignore, 1, p2);
|
m_clputinserver = g_Forwards.CreateForward("OnClientPutInServer", ET_Ignore, 1, p2);
|
||||||
m_cldisconnect = g_Forwards.CreateForward("OnClientDisconnect", ET_Ignore, 1, p2);
|
m_cldisconnect = g_Forwards.CreateForward("OnClientDisconnect", ET_Ignore, 1, p2);
|
||||||
m_cldisconnect_post = g_Forwards.CreateForward("OnClientDisconnect_Post", ET_Ignore, 1, p2);
|
m_cldisconnect_post = g_Forwards.CreateForward("OnClientDisconnect_Post", ET_Ignore, 1, p2);
|
||||||
@@ -150,7 +151,6 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
m_clauth = g_Forwards.CreateForward("OnClientAuthorized", ET_Ignore, 2, NULL, Param_Cell, Param_String);
|
m_clauth = g_Forwards.CreateForward("OnClientAuthorized", ET_Ignore, 2, NULL, Param_Cell, Param_String);
|
||||||
m_onActivate = g_Forwards.CreateForward("OnServerLoad", ET_Ignore, 0, NULL);
|
m_onActivate = g_Forwards.CreateForward("OnServerLoad", ET_Ignore, 0, NULL);
|
||||||
m_onActivate2 = g_Forwards.CreateForward("OnMapStart", ET_Ignore, 0, NULL);
|
m_onActivate2 = g_Forwards.CreateForward("OnMapStart", ET_Ignore, 0, NULL);
|
||||||
OnClientConnected = g_Forwards.CreateForward("OnClientConnected", ET_Ignore, 1, p2);
|
|
||||||
|
|
||||||
PreAdminCheck = g_Forwards.CreateForward("OnClientPreAdminCheck", ET_Event, 1, p1);
|
PreAdminCheck = g_Forwards.CreateForward("OnClientPreAdminCheck", ET_Event, 1, p1);
|
||||||
PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1);
|
PostAdminCheck = g_Forwards.CreateForward("OnClientPostAdminCheck", ET_Ignore, 1, p1);
|
||||||
@@ -159,8 +159,6 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
m_bIsListenServer = !engine->IsDedicatedServer();
|
m_bIsListenServer = !engine->IsDedicatedServer();
|
||||||
m_ListenClient = 0;
|
m_ListenClient = 0;
|
||||||
|
|
||||||
g_ConVarManager.AddConVarChangeListener("tv_enable", this);
|
|
||||||
|
|
||||||
ConCommand *pCmd = FindCommand("maxplayers");
|
ConCommand *pCmd = FindCommand("maxplayers");
|
||||||
if (pCmd != NULL)
|
if (pCmd != NULL)
|
||||||
{
|
{
|
||||||
@@ -172,6 +170,7 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
void PlayerManager::OnSourceModShutdown()
|
void PlayerManager::OnSourceModShutdown()
|
||||||
{
|
{
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect, false);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect, false);
|
||||||
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, serverClients, this, &PlayerManager::OnClientConnect_Post, true);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &PlayerManager::OnClientPutInServer, true);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, serverClients, this, &PlayerManager::OnClientPutInServer, true);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect, false);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect, false);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect_Post, true);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, serverClients, this, &PlayerManager::OnClientDisconnect_Post, true);
|
||||||
@@ -181,6 +180,7 @@ void PlayerManager::OnSourceModShutdown()
|
|||||||
|
|
||||||
/* Release forwards */
|
/* Release forwards */
|
||||||
g_Forwards.ReleaseForward(m_clconnect);
|
g_Forwards.ReleaseForward(m_clconnect);
|
||||||
|
g_Forwards.ReleaseForward(m_clconnect_post);
|
||||||
g_Forwards.ReleaseForward(m_clputinserver);
|
g_Forwards.ReleaseForward(m_clputinserver);
|
||||||
g_Forwards.ReleaseForward(m_cldisconnect);
|
g_Forwards.ReleaseForward(m_cldisconnect);
|
||||||
g_Forwards.ReleaseForward(m_cldisconnect_post);
|
g_Forwards.ReleaseForward(m_cldisconnect_post);
|
||||||
@@ -189,7 +189,6 @@ void PlayerManager::OnSourceModShutdown()
|
|||||||
g_Forwards.ReleaseForward(m_clauth);
|
g_Forwards.ReleaseForward(m_clauth);
|
||||||
g_Forwards.ReleaseForward(m_onActivate);
|
g_Forwards.ReleaseForward(m_onActivate);
|
||||||
g_Forwards.ReleaseForward(m_onActivate2);
|
g_Forwards.ReleaseForward(m_onActivate2);
|
||||||
g_Forwards.ReleaseForward(OnClientConnected);
|
|
||||||
|
|
||||||
g_Forwards.ReleaseForward(PreAdminCheck);
|
g_Forwards.ReleaseForward(PreAdminCheck);
|
||||||
g_Forwards.ReleaseForward(PostAdminCheck);
|
g_Forwards.ReleaseForward(PostAdminCheck);
|
||||||
@@ -197,8 +196,6 @@ void PlayerManager::OnSourceModShutdown()
|
|||||||
|
|
||||||
delete [] m_Players;
|
delete [] m_Players;
|
||||||
|
|
||||||
g_ConVarManager.RemoveConVarChangeListener("tv_enable", this);
|
|
||||||
|
|
||||||
if (maxplayersCmd != NULL)
|
if (maxplayersCmd != NULL)
|
||||||
{
|
{
|
||||||
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, maxplayersCmd, CmdMaxplayersCallback, true);
|
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, maxplayersCmd, CmdMaxplayersCallback, true);
|
||||||
@@ -238,7 +235,10 @@ void PlayerManager::OnServerActivate(edict_t *pEdictList, int edictCount, int cl
|
|||||||
if (!m_FirstPass)
|
if (!m_FirstPass)
|
||||||
{
|
{
|
||||||
/* Initialize all players */
|
/* 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_PlayerCount = 0;
|
||||||
m_Players = new CPlayer[ABSOLUTE_PLAYER_LIMIT + 1];
|
m_Players = new CPlayer[ABSOLUTE_PLAYER_LIMIT + 1];
|
||||||
m_AuthQueue = new unsigned int[ABSOLUTE_PLAYER_LIMIT + 1];
|
m_AuthQueue = new unsigned int[ABSOLUTE_PLAYER_LIMIT + 1];
|
||||||
@@ -478,8 +478,8 @@ bool PlayerManager::OnClientConnect_Post(edict_t *pEntity, const char *pszName,
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell_t res;
|
cell_t res;
|
||||||
OnClientConnected->PushCell(client);
|
m_clconnect_post->PushCell(client);
|
||||||
OnClientConnected->Execute(&res, NULL);
|
m_clconnect_post->Execute(&res, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -522,8 +522,8 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell_t res;
|
cell_t res;
|
||||||
OnClientConnected->PushCell(client);
|
m_clconnect_post->PushCell(client);
|
||||||
OnClientConnected->Execute(&res, NULL);
|
m_clconnect_post->Execute(&res, NULL);
|
||||||
|
|
||||||
/* Now do authorization */
|
/* Now do authorization */
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
@@ -1343,18 +1343,6 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerManager::OnConVarChanged( ConVar *pConVar, const char *oldValue, float flOldValue )
|
|
||||||
{
|
|
||||||
if (pConVar->GetBool() && !atoi(oldValue))
|
|
||||||
{
|
|
||||||
MaxPlayersChanged(gpGlobals->maxClients + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MaxPlayersChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlayerManager::OnSourceModMaxPlayersChanged( int newvalue )
|
void PlayerManager::OnSourceModMaxPlayersChanged( int newvalue )
|
||||||
{
|
{
|
||||||
m_maxClients = newvalue;
|
m_maxClients = newvalue;
|
||||||
@@ -1781,6 +1769,11 @@ unsigned int CPlayer::GetLanguageId()
|
|||||||
return m_LangId;
|
return m_LangId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlayer::SetLanguageId(unsigned int id)
|
||||||
|
{
|
||||||
|
m_LangId = id;
|
||||||
|
}
|
||||||
|
|
||||||
int CPlayer::GetUserId()
|
int CPlayer::GetUserId()
|
||||||
{
|
{
|
||||||
if (m_UserId == -1)
|
if (m_UserId == -1)
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public:
|
|||||||
bool IsInKickQueue();
|
bool IsInKickQueue();
|
||||||
IPlayerInfo *GetPlayerInfo();
|
IPlayerInfo *GetPlayerInfo();
|
||||||
unsigned int GetLanguageId();
|
unsigned int GetLanguageId();
|
||||||
|
void SetLanguageId(unsigned int id);
|
||||||
int GetUserId();
|
int GetUserId();
|
||||||
bool RunAdminCacheChecks();
|
bool RunAdminCacheChecks();
|
||||||
void NotifyPostAdminChecks();
|
void NotifyPostAdminChecks();
|
||||||
@@ -123,8 +124,7 @@ private:
|
|||||||
|
|
||||||
class PlayerManager :
|
class PlayerManager :
|
||||||
public SMGlobalClass,
|
public SMGlobalClass,
|
||||||
public IPlayerManager,
|
public IPlayerManager
|
||||||
public IConVarChangeListener
|
|
||||||
{
|
{
|
||||||
friend class CPlayer;
|
friend class CPlayer;
|
||||||
public:
|
public:
|
||||||
@@ -169,8 +169,6 @@ public: //IPlayerManager
|
|||||||
void UnregisterCommandTargetProcessor(ICommandTargetProcessor *pHandler);
|
void UnregisterCommandTargetProcessor(ICommandTargetProcessor *pHandler);
|
||||||
void ProcessCommandTarget(cmd_target_info_t *info);
|
void ProcessCommandTarget(cmd_target_info_t *info);
|
||||||
int GetClientFromSerial(unsigned int serial);
|
int GetClientFromSerial(unsigned int serial);
|
||||||
public: // IConVarChangeListener
|
|
||||||
void OnConVarChanged(ConVar *pConVar, const char *oldValue, float flOldValue);
|
|
||||||
public:
|
public:
|
||||||
inline int MaxClients()
|
inline int MaxClients()
|
||||||
{
|
{
|
||||||
@@ -197,6 +195,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
List<IClientListener *> m_hooks;
|
List<IClientListener *> m_hooks;
|
||||||
IForward *m_clconnect;
|
IForward *m_clconnect;
|
||||||
|
IForward *m_clconnect_post;
|
||||||
IForward *m_cldisconnect;
|
IForward *m_cldisconnect;
|
||||||
IForward *m_cldisconnect_post;
|
IForward *m_cldisconnect_post;
|
||||||
IForward *m_clputinserver;
|
IForward *m_clputinserver;
|
||||||
|
|||||||
+3
-1
@@ -887,8 +887,10 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file)
|
|||||||
strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
|
strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
|
||||||
m_ServerLang = SOURCEMOD_LANGUAGE_ENGLISH;
|
m_ServerLang = SOURCEMOD_LANGUAGE_ENGLISH;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
m_ServerLang = reinterpret_cast<unsigned int>(serverLang);
|
m_ServerLang = reinterpret_cast<unsigned int>(serverLang);
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_Languages.size())
|
if (!m_Languages.size())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -342,14 +342,45 @@ void ProfileEngine::OnRootConsoleCommand2(const char *cmdname, const ICommandArg
|
|||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
Clear();
|
||||||
|
|
||||||
rootmenu->ConsolePrint("Profiler report generated as: %s\n", path);
|
rootmenu->ConsolePrint("Profiler report generated as: %s\n", path);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(command->Arg(2), "report") == 0)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char path[256];
|
||||||
|
|
||||||
|
g_pSM->BuildPath(Path_SM, path, sizeof(path), "logs/profile_%d.xml", (int)time(NULL));
|
||||||
|
|
||||||
|
if ((fp = fopen(path, "wt")) == NULL)
|
||||||
|
{
|
||||||
|
rootmenu->ConsolePrint("Failed, could not open file for writing: %s", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GenerateReport(fp);
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
rootmenu->ConsolePrint("Profiler report generated as: %s\n", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (strcmp(command->Arg(2), "clear") == 0)
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
|
|
||||||
|
rootmenu->ConsolePrint("Profiler statistics cleared.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootmenu->ConsolePrint("Profiler commands:");
|
rootmenu->ConsolePrint("Profiler commands:");
|
||||||
rootmenu->DrawGenericOption("flush", "Flushes statistics to disk and starts over");
|
rootmenu->DrawGenericOption("flush", "Flushes statistics to disk and starts over");
|
||||||
|
rootmenu->DrawGenericOption("report", "Flushes statistics to disk");
|
||||||
|
rootmenu->DrawGenericOption("clear", "Clears statistics");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProfileEngine::GenerateReport(FILE *fp)
|
bool ProfileEngine::GenerateReport(FILE *fp)
|
||||||
|
|||||||
@@ -37,6 +37,44 @@
|
|||||||
#include "GameConfigs.h"
|
#include "GameConfigs.h"
|
||||||
#include "sm_stringutil.h"
|
#include "sm_stringutil.h"
|
||||||
|
|
||||||
|
// These values need to mirror the values in entity_prop_stocks
|
||||||
|
#define ENTFLAG_ONGROUND (1 << 0)
|
||||||
|
#define ENTFLAG_DUCKING (1 << 1)
|
||||||
|
#define ENTFLAG_WATERJUMP (1 << 2)
|
||||||
|
#define ENTFLAG_ONTRAIN (1 << 3)
|
||||||
|
#define ENTFLAG_INRAIN (1 << 4)
|
||||||
|
#define ENTFLAG_FROZEN (1 << 5)
|
||||||
|
#define ENTFLAG_ATCONTROLS (1 << 6)
|
||||||
|
#define ENTFLAG_CLIENT (1 << 7)
|
||||||
|
#define ENTFLAG_FAKECLIENT (1 << 8)
|
||||||
|
#define ENTFLAG_INWATER (1 << 9)
|
||||||
|
#define ENTFLAG_FLY (1 << 10)
|
||||||
|
#define ENTFLAG_SWIM (1 << 11)
|
||||||
|
#define ENTFLAG_CONVEYOR (1 << 12)
|
||||||
|
#define ENTFLAG_NPC (1 << 13)
|
||||||
|
#define ENTFLAG_GODMODE (1 << 14)
|
||||||
|
#define ENTFLAG_NOTARGET (1 << 15)
|
||||||
|
#define ENTFLAG_AIMTARGET (1 << 16)
|
||||||
|
#define ENTFLAG_PARTIALGROUND (1 << 17)
|
||||||
|
#define ENTFLAG_STATICPROP (1 << 18)
|
||||||
|
#define ENTFLAG_GRAPHED (1 << 19)
|
||||||
|
#define ENTFLAG_GRENADE (1 << 20)
|
||||||
|
#define ENTFLAG_STEPMOVEMENT (1 << 21)
|
||||||
|
#define ENTFLAG_DONTTOUCH (1 << 22)
|
||||||
|
#define ENTFLAG_BASEVELOCITY (1 << 23)
|
||||||
|
#define ENTFLAG_WORLDBRUSH (1 << 24)
|
||||||
|
#define ENTFLAG_OBJECT (1 << 25)
|
||||||
|
#define ENTFLAG_KILLME (1 << 26)
|
||||||
|
#define ENTFLAG_ONFIRE (1 << 27)
|
||||||
|
#define ENTFLAG_DISSOLVING (1 << 28)
|
||||||
|
#define ENTFLAG_TRANSRAGDOLL (1 << 29)
|
||||||
|
#define ENTFLAG_UNBLOCKABLE_BY_PLAYER (1 << 30)
|
||||||
|
#define ENTFLAG_FREEZING (1 << 31)
|
||||||
|
#define ENTFLAG_EP2V_UNKNOWN1 (1 << 31)
|
||||||
|
|
||||||
|
// Not defined in the sdk as we have no clue what it is
|
||||||
|
#define FL_EP2V_UNKNOWN (1 << 2)
|
||||||
|
|
||||||
enum PropType
|
enum PropType
|
||||||
{
|
{
|
||||||
Prop_Send = 0,
|
Prop_Send = 0,
|
||||||
@@ -1142,6 +1180,11 @@ static cell_t SetEntProp(IPluginContext *pContext, const cell_t *params)
|
|||||||
*(bool *)((uint8_t *)pEntity + offset) = params[4] ? true : false;
|
*(bool *)((uint8_t *)pEntity + offset) = params[4] ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params[2] == Prop_Send && (pEdict != NULL))
|
||||||
|
{
|
||||||
|
g_HL2.SetEdictStateChanged(pEdict, offset);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1772,6 +1815,254 @@ static cell_t SetEntPropString(IPluginContext *pContext, const cell_t *params)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t SDKEntFlagToSMEntFlag(int flag)
|
||||||
|
{
|
||||||
|
switch (flag)
|
||||||
|
{
|
||||||
|
case FL_ONGROUND:
|
||||||
|
return ENTFLAG_ONGROUND;
|
||||||
|
case FL_DUCKING:
|
||||||
|
return ENTFLAG_DUCKING;
|
||||||
|
case FL_WATERJUMP:
|
||||||
|
return ENTFLAG_WATERJUMP;
|
||||||
|
case FL_ONTRAIN:
|
||||||
|
return ENTFLAG_ONTRAIN;
|
||||||
|
case FL_INRAIN:
|
||||||
|
return ENTFLAG_INRAIN;
|
||||||
|
case FL_FROZEN:
|
||||||
|
return ENTFLAG_FROZEN;
|
||||||
|
case FL_ATCONTROLS:
|
||||||
|
return ENTFLAG_ATCONTROLS;
|
||||||
|
case FL_CLIENT:
|
||||||
|
return ENTFLAG_CLIENT;
|
||||||
|
case FL_FAKECLIENT:
|
||||||
|
return ENTFLAG_FAKECLIENT;
|
||||||
|
case FL_INWATER:
|
||||||
|
return ENTFLAG_INWATER;
|
||||||
|
case FL_FLY:
|
||||||
|
return ENTFLAG_FLY;
|
||||||
|
case FL_SWIM:
|
||||||
|
return ENTFLAG_SWIM;
|
||||||
|
case FL_CONVEYOR:
|
||||||
|
return ENTFLAG_CONVEYOR;
|
||||||
|
case FL_NPC:
|
||||||
|
return ENTFLAG_NPC;
|
||||||
|
case FL_GODMODE:
|
||||||
|
return ENTFLAG_GODMODE;
|
||||||
|
case FL_NOTARGET:
|
||||||
|
return ENTFLAG_NOTARGET;
|
||||||
|
case FL_AIMTARGET:
|
||||||
|
return ENTFLAG_AIMTARGET;
|
||||||
|
case FL_PARTIALGROUND:
|
||||||
|
return ENTFLAG_PARTIALGROUND;
|
||||||
|
case FL_STATICPROP:
|
||||||
|
return ENTFLAG_STATICPROP;
|
||||||
|
case FL_GRAPHED:
|
||||||
|
return ENTFLAG_GRAPHED;
|
||||||
|
case FL_GRENADE:
|
||||||
|
return ENTFLAG_GRENADE;
|
||||||
|
case FL_STEPMOVEMENT:
|
||||||
|
return ENTFLAG_STEPMOVEMENT;
|
||||||
|
case FL_DONTTOUCH:
|
||||||
|
return ENTFLAG_DONTTOUCH;
|
||||||
|
case FL_BASEVELOCITY:
|
||||||
|
return ENTFLAG_BASEVELOCITY;
|
||||||
|
case FL_WORLDBRUSH:
|
||||||
|
return ENTFLAG_WORLDBRUSH;
|
||||||
|
case FL_OBJECT:
|
||||||
|
return ENTFLAG_OBJECT;
|
||||||
|
case FL_KILLME:
|
||||||
|
return ENTFLAG_KILLME;
|
||||||
|
case FL_ONFIRE:
|
||||||
|
return ENTFLAG_ONFIRE;
|
||||||
|
case FL_DISSOLVING:
|
||||||
|
return ENTFLAG_DISSOLVING;
|
||||||
|
case FL_TRANSRAGDOLL:
|
||||||
|
return ENTFLAG_TRANSRAGDOLL;
|
||||||
|
case FL_UNBLOCKABLE_BY_PLAYER:
|
||||||
|
return ENTFLAG_UNBLOCKABLE_BY_PLAYER;
|
||||||
|
#if SOURCE_ENGINE == SE_ALIENSWARM
|
||||||
|
case FL_FREEZING:
|
||||||
|
return ENTFLAG_FREEZING;
|
||||||
|
#elif SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||||
|
case FL_EP2V_UNKNOWN:
|
||||||
|
return ENTFLAG_EP2V_UNKNOWN1;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t SMEntFlagToSDKEntFlag(int32_t flag)
|
||||||
|
{
|
||||||
|
switch (flag)
|
||||||
|
{
|
||||||
|
case ENTFLAG_ONGROUND:
|
||||||
|
return FL_ONGROUND;
|
||||||
|
case ENTFLAG_DUCKING:
|
||||||
|
return FL_DUCKING;
|
||||||
|
case ENTFLAG_WATERJUMP:
|
||||||
|
return FL_WATERJUMP;
|
||||||
|
case ENTFLAG_ONTRAIN:
|
||||||
|
return FL_ONTRAIN;
|
||||||
|
case ENTFLAG_INRAIN:
|
||||||
|
return FL_INRAIN;
|
||||||
|
case ENTFLAG_FROZEN:
|
||||||
|
return FL_FROZEN;
|
||||||
|
case ENTFLAG_ATCONTROLS:
|
||||||
|
return FL_ATCONTROLS;
|
||||||
|
case ENTFLAG_CLIENT:
|
||||||
|
return FL_CLIENT;
|
||||||
|
case ENTFLAG_FAKECLIENT:
|
||||||
|
return FL_FAKECLIENT;
|
||||||
|
case ENTFLAG_INWATER:
|
||||||
|
return FL_INWATER;
|
||||||
|
case ENTFLAG_FLY:
|
||||||
|
return FL_FLY;
|
||||||
|
case ENTFLAG_SWIM:
|
||||||
|
return FL_SWIM;
|
||||||
|
case ENTFLAG_CONVEYOR:
|
||||||
|
return FL_CONVEYOR;
|
||||||
|
case ENTFLAG_NPC:
|
||||||
|
return FL_NPC;
|
||||||
|
case ENTFLAG_GODMODE:
|
||||||
|
return FL_GODMODE;
|
||||||
|
case ENTFLAG_NOTARGET:
|
||||||
|
return FL_NOTARGET;
|
||||||
|
case ENTFLAG_AIMTARGET:
|
||||||
|
return FL_AIMTARGET;
|
||||||
|
case ENTFLAG_PARTIALGROUND:
|
||||||
|
return FL_PARTIALGROUND;
|
||||||
|
case ENTFLAG_STATICPROP:
|
||||||
|
return FL_STATICPROP;
|
||||||
|
case ENTFLAG_GRAPHED:
|
||||||
|
return FL_GRAPHED;
|
||||||
|
case ENTFLAG_GRENADE:
|
||||||
|
return FL_GRENADE;
|
||||||
|
case ENTFLAG_STEPMOVEMENT:
|
||||||
|
return FL_STEPMOVEMENT;
|
||||||
|
case ENTFLAG_DONTTOUCH:
|
||||||
|
return FL_DONTTOUCH;
|
||||||
|
case ENTFLAG_BASEVELOCITY:
|
||||||
|
return FL_BASEVELOCITY;
|
||||||
|
case ENTFLAG_WORLDBRUSH:
|
||||||
|
return FL_WORLDBRUSH;
|
||||||
|
case ENTFLAG_OBJECT:
|
||||||
|
return FL_OBJECT;
|
||||||
|
case ENTFLAG_KILLME:
|
||||||
|
return FL_KILLME;
|
||||||
|
case ENTFLAG_ONFIRE:
|
||||||
|
return FL_ONFIRE;
|
||||||
|
case ENTFLAG_DISSOLVING:
|
||||||
|
return FL_DISSOLVING;
|
||||||
|
case ENTFLAG_TRANSRAGDOLL:
|
||||||
|
return FL_TRANSRAGDOLL;
|
||||||
|
case ENTFLAG_UNBLOCKABLE_BY_PLAYER:
|
||||||
|
return FL_UNBLOCKABLE_BY_PLAYER;
|
||||||
|
#if SOURCE_ENGINE == SE_ALIENSWARM
|
||||||
|
case ENTFLAG_FREEZING:
|
||||||
|
return FL_FREEZING;
|
||||||
|
#elif SOURCE_ENGINE == SE_ORANGEBOXVALVE
|
||||||
|
case ENTFLAG_EP2V_UNKNOWN1:
|
||||||
|
return FL_EP2V_UNKNOWN;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t GetEntityFlags(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
CBaseEntity *pEntity = g_HL2.ReferenceToEntity(params[1]);
|
||||||
|
if (!pEntity)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity %d (%d) is invalid", g_HL2.ReferenceToIndex(params[1]), params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *prop = g_pGameConf->GetKeyValue("m_fFlags");
|
||||||
|
if (!prop)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Could not find m_fFlags prop in gamedata");
|
||||||
|
}
|
||||||
|
|
||||||
|
typedescription_t *td;
|
||||||
|
datamap_t *pMap;
|
||||||
|
|
||||||
|
if ((pMap = CBaseEntity_GetDataDescMap(pEntity)) == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Could not retrieve datamap");
|
||||||
|
}
|
||||||
|
if ((td = g_HL2.FindInDataMap(pMap, prop)) == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Property \"%s\" not found (entity %d)",
|
||||||
|
prop,
|
||||||
|
params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = GetTypeDescOffs(td);
|
||||||
|
|
||||||
|
int32_t actual_flags = *(int32_t *)((uint8_t *)pEntity + offset);
|
||||||
|
int32_t sm_flags = 0;
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
int32_t flag = (1<<i);
|
||||||
|
if ((actual_flags & flag) == flag)
|
||||||
|
{
|
||||||
|
sm_flags |= SDKEntFlagToSMEntFlag(flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sm_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t SetEntityFlags(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
CBaseEntity *pEntity = g_HL2.ReferenceToEntity(params[1]);
|
||||||
|
if (!pEntity)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity %d (%d) is invalid", g_HL2.ReferenceToIndex(params[1]), params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *prop = g_pGameConf->GetKeyValue("m_fFlags");
|
||||||
|
if (!prop)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Could not find m_fFlags prop in gamedata");
|
||||||
|
}
|
||||||
|
|
||||||
|
typedescription_t *td;
|
||||||
|
datamap_t *pMap;
|
||||||
|
|
||||||
|
if ((pMap = CBaseEntity_GetDataDescMap(pEntity)) == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Could not retrieve datamap");
|
||||||
|
}
|
||||||
|
if ((td = g_HL2.FindInDataMap(pMap, prop)) == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Property \"%s\" not found (entity %d)",
|
||||||
|
prop,
|
||||||
|
params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = GetTypeDescOffs(td);
|
||||||
|
|
||||||
|
int32_t sm_flags = params[2];
|
||||||
|
int32_t actual_flags = 0;
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
int32_t flag = (1<<i);
|
||||||
|
if ((sm_flags & flag) == flag)
|
||||||
|
{
|
||||||
|
actual_flags |= SMEntFlagToSDKEntFlag(flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*(int32_t *)((uint8_t *)pEntity + offset) = actual_flags;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
REGISTER_NATIVES(entityNatives)
|
REGISTER_NATIVES(entityNatives)
|
||||||
{
|
{
|
||||||
{"ChangeEdictState", ChangeEdictState},
|
{"ChangeEdictState", ChangeEdictState},
|
||||||
@@ -1793,6 +2084,7 @@ REGISTER_NATIVES(entityNatives)
|
|||||||
{"GetEntPropString", GetEntPropString},
|
{"GetEntPropString", GetEntPropString},
|
||||||
{"GetEntPropVector", GetEntPropVector},
|
{"GetEntPropVector", GetEntPropVector},
|
||||||
{"GetEntityCount", GetEntityCount},
|
{"GetEntityCount", GetEntityCount},
|
||||||
|
{"GetEntityFlags", GetEntityFlags},
|
||||||
{"GetEntityNetClass", GetEntityNetClass},
|
{"GetEntityNetClass", GetEntityNetClass},
|
||||||
{"GetMaxEntities", GetMaxEntities},
|
{"GetMaxEntities", GetMaxEntities},
|
||||||
{"IsEntNetworkable", IsEntNetworkable},
|
{"IsEntNetworkable", IsEntNetworkable},
|
||||||
@@ -1806,6 +2098,7 @@ REGISTER_NATIVES(entityNatives)
|
|||||||
{"SetEntDataFloat", SetEntDataFloat},
|
{"SetEntDataFloat", SetEntDataFloat},
|
||||||
{"SetEntDataVector", SetEntDataVector},
|
{"SetEntDataVector", SetEntDataVector},
|
||||||
{"SetEntDataString", SetEntDataString},
|
{"SetEntDataString", SetEntDataString},
|
||||||
|
{"SetEntityFlags", SetEntityFlags},
|
||||||
{"SetEntProp", SetEntProp},
|
{"SetEntProp", SetEntProp},
|
||||||
{"SetEntPropEnt", SetEntPropEnt},
|
{"SetEntPropEnt", SetEntPropEnt},
|
||||||
{"SetEntPropFloat", SetEntPropFloat},
|
{"SetEntPropFloat", SetEntPropFloat},
|
||||||
|
|||||||
@@ -104,6 +104,46 @@ static cell_t sm_GetLanguageInfo(IPluginContext *pContext, const cell_t *params)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell_t sm_SetClientLanguage(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
CPlayer *player = g_Players.GetPlayerByIndex(params[1]);
|
||||||
|
|
||||||
|
if (!player || !player->IsInGame())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid client index %d", params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
player->SetLanguageId(params[2]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t sm_GetLanguageByCode(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
char *code;
|
||||||
|
unsigned int langid;
|
||||||
|
|
||||||
|
pContext->LocalToString(params[1], &code);
|
||||||
|
|
||||||
|
if (g_Translator.GetLanguageByCode(code, &langid))
|
||||||
|
return langid;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t sm_GetLanguageByName(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
unsigned int langid;
|
||||||
|
|
||||||
|
pContext->LocalToString(params[1], &name);
|
||||||
|
|
||||||
|
if (g_Translator.GetLanguageByName(name, &langid))
|
||||||
|
return langid;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
REGISTER_NATIVES(langNatives)
|
REGISTER_NATIVES(langNatives)
|
||||||
{
|
{
|
||||||
{"LoadTranslations", sm_LoadTranslations},
|
{"LoadTranslations", sm_LoadTranslations},
|
||||||
@@ -112,5 +152,8 @@ REGISTER_NATIVES(langNatives)
|
|||||||
{"GetServerLanguage", sm_GetServerLanguage},
|
{"GetServerLanguage", sm_GetServerLanguage},
|
||||||
{"GetLanguageCount", sm_GetLanguageCount},
|
{"GetLanguageCount", sm_GetLanguageCount},
|
||||||
{"GetLanguageInfo", sm_GetLanguageInfo},
|
{"GetLanguageInfo", sm_GetLanguageInfo},
|
||||||
|
{"SetClientLanguage", sm_SetClientLanguage},
|
||||||
|
{"GetLanguageByCode", sm_GetLanguageByCode},
|
||||||
|
{"GetLanguageByName", sm_GetLanguageByName},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
||||||
#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
||||||
|
|
||||||
#define MAXCLIENTS 64
|
#define MAXCLIENTS 65
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|||||||
@@ -171,7 +171,12 @@ static cell_t SetTeamScore(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int offset = g_pGameHelpers->FindInSendTable(g_Teams[teamindex].ClassName, "m_iScore")->GetOffset();
|
static int offset = g_pGameHelpers->FindInSendTable(g_Teams[teamindex].ClassName, "m_iScore")->GetOffset();
|
||||||
*(int *)((unsigned char *)g_Teams[teamindex].pEnt + offset) = params[2];
|
|
||||||
|
CBaseEntity *pTeam = g_Teams[teamindex].pEnt;
|
||||||
|
*(int *)((unsigned char *)pTeam + offset) = params[2];
|
||||||
|
|
||||||
|
edict_t *pEdict = gameents->BaseEntityToEdict(pTeam);
|
||||||
|
gamehelpers->SetEdictStateChanged(pEdict, offset);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,26 +285,33 @@ void TempEntityManager::Initialize()
|
|||||||
int offset;
|
int offset;
|
||||||
m_Loaded = false;
|
m_Loaded = false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First try to lookup s_pTempEntities directly for platforms with symbols.
|
||||||
|
* If symbols aren't present (Windows or stripped Linux/Mac),
|
||||||
|
* attempt find via CBaseTempEntity ctor + offset
|
||||||
|
*/
|
||||||
|
|
||||||
/* Read our sigs and offsets from the config file */
|
/* Read our sigs and offsets from the config file */
|
||||||
#if defined PLATFORM_WINDOWS
|
if (g_pGameConf->GetMemSig("s_pTempEntities", &addr) && addr)
|
||||||
if (!g_pGameConf->GetMemSig("CBaseTempEntity", &addr) || !addr)
|
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
|
/* Store the head of the TE linked list */
|
||||||
|
m_ListHead = *(void **)addr;
|
||||||
}
|
}
|
||||||
|
else if (g_pGameConf->GetMemSig("CBaseTempEntity", &addr) && addr)
|
||||||
|
{
|
||||||
if (!g_pGameConf->GetOffset("s_pTempEntities", &offset))
|
if (!g_pGameConf->GetOffset("s_pTempEntities", &offset))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Store the head of the TE linked list */
|
/* Store the head of the TE linked list */
|
||||||
m_ListHead = **(void ***)((unsigned char *)addr + offset);
|
m_ListHead = **(void ***)((unsigned char *)addr + offset);
|
||||||
#else
|
}
|
||||||
if (!g_pGameConf->GetMemSig("s_pTempEntities", &addr) || !addr)
|
else
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Store the head of the TE linked list */
|
|
||||||
m_ListHead = *(void **)addr;
|
|
||||||
#endif
|
|
||||||
if (!g_pGameConf->GetOffset("GetTEName", &m_NameOffs))
|
if (!g_pGameConf->GetOffset("GetTEName", &m_NameOffs))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -39,29 +39,28 @@ void InitializeValveGlobals()
|
|||||||
{
|
{
|
||||||
g_EntList = gamehelpers->GetGlobalEntityList();
|
g_EntList = gamehelpers->GetGlobalEntityList();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* g_pGameRules
|
||||||
|
*
|
||||||
|
* First try to lookup pointer directly for platforms with symbols.
|
||||||
|
* If symbols aren't present (Windows or stripped Linux/Mac),
|
||||||
|
* attempt find via CreateGameRulesObject + offset
|
||||||
|
*/
|
||||||
|
|
||||||
char *addr;
|
char *addr;
|
||||||
|
if (g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) && addr)
|
||||||
#ifdef PLATFORM_WINDOWS
|
|
||||||
/* g_pGameRules */
|
|
||||||
if (!g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) || !addr)
|
|
||||||
{
|
{
|
||||||
return;
|
g_pGameRules = reinterpret_cast<void **>(addr);
|
||||||
}
|
}
|
||||||
|
else if (g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) && addr)
|
||||||
|
{
|
||||||
int offset;
|
int offset;
|
||||||
if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
|
if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
|
g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
|
||||||
#elif defined PLATFORM_LINUX
|
|
||||||
/* g_pGameRules */
|
|
||||||
if (!g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) || !addr)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
g_pGameRules = reinterpret_cast<void **>(addr);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t UTIL_StringToSignature(const char *str, char buffer[], size_t maxlength)
|
size_t UTIL_StringToSignature(const char *str, char buffer[], size_t maxlength)
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ enum ListenOverride
|
|||||||
|
|
||||||
size_t g_VoiceFlags[65];
|
size_t g_VoiceFlags[65];
|
||||||
size_t g_VoiceHookCount = 0;
|
size_t g_VoiceHookCount = 0;
|
||||||
int g_ClientOverrides[65];
|
|
||||||
ListenOverride g_VoiceMap[65][65];
|
ListenOverride g_VoiceMap[65][65];
|
||||||
bool g_ClientMutes[65][65];
|
bool g_ClientMutes[65][65];
|
||||||
|
|
||||||
@@ -65,10 +64,10 @@ SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *,
|
|||||||
SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *);
|
SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool DecHookCount(int amount = 1);
|
bool DecHookCount()
|
||||||
bool DecHookCount(int amount)
|
|
||||||
{
|
{
|
||||||
g_VoiceHookCount -= amount;
|
g_VoiceHookCount--;
|
||||||
|
|
||||||
if (g_VoiceHookCount == 0)
|
if (g_VoiceHookCount == 0)
|
||||||
{
|
{
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IVoiceServer, SetClientListening, voiceserver, &g_SdkTools, &SDKTools::OnSetClientListening, false);
|
SH_REMOVE_HOOK_MEMFUNC(IVoiceServer, SetClientListening, voiceserver, &g_SdkTools, &SDKTools::OnSetClientListening, false);
|
||||||
@@ -89,7 +88,6 @@ void IncHookCount()
|
|||||||
void SDKTools::VoiceInit()
|
void SDKTools::VoiceInit()
|
||||||
{
|
{
|
||||||
memset(g_VoiceMap, 0, sizeof(g_VoiceMap));
|
memset(g_VoiceMap, 0, sizeof(g_VoiceMap));
|
||||||
memset(g_ClientOverrides, 0, sizeof(g_ClientOverrides));
|
|
||||||
memset(g_ClientMutes, 0, sizeof(g_ClientMutes));
|
memset(g_ClientMutes, 0, sizeof(g_ClientMutes));
|
||||||
|
|
||||||
SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &SDKTools::OnClientCommand, true);
|
SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, serverClients, this, &SDKTools::OnClientCommand, true);
|
||||||
@@ -130,6 +128,11 @@ bool SDKTools::OnSetClientListening(int iReceiver, int iSender, bool bListen)
|
|||||||
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_VoiceFlags[iSender] & SPEAK_MUTED)
|
||||||
|
{
|
||||||
|
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
||||||
|
}
|
||||||
|
|
||||||
if (g_VoiceMap[iReceiver][iSender] == Listen_No)
|
if (g_VoiceMap[iReceiver][iSender] == Listen_No)
|
||||||
{
|
{
|
||||||
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
||||||
@@ -139,11 +142,6 @@ bool SDKTools::OnSetClientListening(int iReceiver, int iSender, bool bListen)
|
|||||||
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, true));
|
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_VoiceFlags[iSender] & SPEAK_MUTED)
|
|
||||||
{
|
|
||||||
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((g_VoiceFlags[iSender] & SPEAK_ALL) || (g_VoiceFlags[iReceiver] & SPEAK_LISTENALL))
|
if ((g_VoiceFlags[iSender] & SPEAK_ALL) || (g_VoiceFlags[iReceiver] & SPEAK_LISTENALL))
|
||||||
{
|
{
|
||||||
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, true));
|
RETURN_META_VALUE_NEWPARAMS(MRES_IGNORED, bListen, &IVoiceServer::SetClientListening, (iReceiver, iSender, true));
|
||||||
@@ -193,6 +191,7 @@ void SDKTools::OnClientDisconnecting(int client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_ClientMutes[i][client] = false;
|
g_ClientMutes[i][client] = false;
|
||||||
|
g_ClientMutes[client][i] = false;
|
||||||
|
|
||||||
if (g_VoiceMap[i][client] != Listen_Default)
|
if (g_VoiceMap[i][client] != Listen_Default)
|
||||||
{
|
{
|
||||||
@@ -202,22 +201,19 @@ void SDKTools::OnClientDisconnecting(int client)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (g_VoiceMap[client][i] != Listen_Default)
|
||||||
|
|
||||||
/* Reset this client's mutes */
|
|
||||||
memset(&g_ClientMutes[client], 0, sizeof(bool) * 65);
|
|
||||||
|
|
||||||
/* Reset other clients who send to this client */
|
|
||||||
if (g_ClientOverrides[client] > 0)
|
|
||||||
{
|
{
|
||||||
DecHookCount(g_ClientOverrides[client]);
|
g_VoiceMap[client][i] = Listen_Default;
|
||||||
g_ClientOverrides[client] = 0;
|
if (DecHookCount())
|
||||||
memset(&g_VoiceMap[client], false, sizeof(ListenOverride) * 65);
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_VoiceFlags[client])
|
if (g_VoiceFlags[client])
|
||||||
{
|
{
|
||||||
g_VoiceFlags[client] = 0;
|
g_VoiceFlags[client] = SPEAK_NORMAL;
|
||||||
DecHookCount();
|
DecHookCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,13 +290,11 @@ static cell_t SetClientListening(IPluginContext *pContext, const cell_t *params)
|
|||||||
if (g_VoiceMap[r][s] == Listen_Default && params[3] != Listen_Default)
|
if (g_VoiceMap[r][s] == Listen_Default && params[3] != Listen_Default)
|
||||||
{
|
{
|
||||||
g_VoiceMap[r][s] = (ListenOverride) params[3];
|
g_VoiceMap[r][s] = (ListenOverride) params[3];
|
||||||
g_ClientOverrides[r]++;
|
|
||||||
IncHookCount();
|
IncHookCount();
|
||||||
}
|
}
|
||||||
else if (g_VoiceMap[r][s] != Listen_Default && params[3] == Listen_Default)
|
else if (g_VoiceMap[r][s] != Listen_Default && params[3] == Listen_Default)
|
||||||
{
|
{
|
||||||
g_VoiceMap[r][s] = (ListenOverride) params[3];
|
g_VoiceMap[r][s] = (ListenOverride) params[3];
|
||||||
g_ClientOverrides[r]--;
|
|
||||||
DecHookCount();
|
DecHookCount();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ DETOUR_DECL_MEMBER0(CalcIsAttackCriticalHelperBow, bool)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitialiseCritDetours()
|
bool InitialiseCritDetours()
|
||||||
{
|
{
|
||||||
calcIsAttackCriticalDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelper, "CalcCritical");
|
calcIsAttackCriticalDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelper, "CalcCritical");
|
||||||
calcIsAttackCriticalMeleeDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelperMelee, "CalcCriticalMelee");
|
calcIsAttackCriticalMeleeDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelperMelee, "CalcCriticalMelee");
|
||||||
@@ -214,17 +214,33 @@ void InitialiseCritDetours()
|
|||||||
HookCreated = true;
|
HookCreated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!HookCreated)
|
if (HookCreated)
|
||||||
{
|
{
|
||||||
g_pSM->LogError(myself, "No critical hit forwards could be initialized - Disabled critical hit hooks");
|
return true;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_pSM->LogError(myself, "No critical hit forwards could be initialized - Disabled critical hit hooks");
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveCritDetours()
|
void RemoveCritDetours()
|
||||||
|
{
|
||||||
|
if (calcIsAttackCriticalDetour != NULL)
|
||||||
{
|
{
|
||||||
calcIsAttackCriticalDetour->Destroy();
|
calcIsAttackCriticalDetour->Destroy();
|
||||||
calcIsAttackCriticalMeleeDetour->Destroy();
|
calcIsAttackCriticalDetour = NULL;
|
||||||
calcIsAttackCriticalBowDetour->Destroy();
|
}
|
||||||
|
|
||||||
|
if (calcIsAttackCriticalMeleeDetour != NULL)
|
||||||
|
{
|
||||||
|
calcIsAttackCriticalMeleeDetour->Destroy();
|
||||||
|
calcIsAttackCriticalMeleeDetour = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (calcIsAttackCriticalBowDetour != NULL)
|
||||||
|
{
|
||||||
|
calcIsAttackCriticalBowDetour->Destroy();
|
||||||
|
calcIsAttackCriticalBowDetour = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
#include <jit/x86/x86_macros.h>
|
#include <jit/x86/x86_macros.h>
|
||||||
#include "CDetour/detours.h"
|
#include "CDetour/detours.h"
|
||||||
|
|
||||||
void InitialiseCritDetours();
|
bool InitialiseCritDetours();
|
||||||
void RemoveCritDetours();
|
void RemoveCritDetours();
|
||||||
|
|
||||||
extern IForward *g_critForward;
|
extern IForward *g_critForward;
|
||||||
|
|||||||
@@ -303,13 +303,11 @@ void TF2Tools::OnPluginLoaded(IPlugin *plugin)
|
|||||||
{
|
{
|
||||||
if (!m_CritDetoursEnabled && g_critForward->GetFunctionCount())
|
if (!m_CritDetoursEnabled && g_critForward->GetFunctionCount())
|
||||||
{
|
{
|
||||||
InitialiseCritDetours();
|
m_CritDetoursEnabled = InitialiseCritDetours();
|
||||||
m_CritDetoursEnabled = true;
|
|
||||||
}
|
}
|
||||||
if (!m_GetHolidayDetourEnabled && g_getHolidayForward->GetFunctionCount())
|
if (!m_GetHolidayDetourEnabled && g_getHolidayForward->GetFunctionCount())
|
||||||
{
|
{
|
||||||
InitialiseGetHolidayDetour();
|
m_GetHolidayDetourEnabled = InitialiseGetHolidayDetour();
|
||||||
m_GetHolidayDetourEnabled = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ CDetour *getHolidayDetour = NULL;
|
|||||||
|
|
||||||
IForward *g_getHolidayForward = NULL;
|
IForward *g_getHolidayForward = NULL;
|
||||||
|
|
||||||
DETOUR_DECL_MEMBER0(GetHoliday, int)
|
DETOUR_DECL_STATIC0(GetHoliday, int)
|
||||||
{
|
{
|
||||||
int actualres = DETOUR_MEMBER_CALL(GetHoliday)();
|
int actualres = DETOUR_STATIC_CALL(GetHoliday)();
|
||||||
if (!g_getHolidayForward)
|
if (!g_getHolidayForward)
|
||||||
{
|
{
|
||||||
g_pSM->LogMessage(myself, "Invalid Forward");
|
g_pSM->LogMessage(myself, "Invalid Forward");
|
||||||
@@ -27,17 +27,18 @@ DETOUR_DECL_MEMBER0(GetHoliday, int)
|
|||||||
return actualres;
|
return actualres;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitialiseGetHolidayDetour()
|
bool InitialiseGetHolidayDetour()
|
||||||
{
|
{
|
||||||
getHolidayDetour = DETOUR_CREATE_MEMBER(GetHoliday, "GetHoliday");
|
getHolidayDetour = DETOUR_CREATE_STATIC(GetHoliday, "GetHoliday");
|
||||||
|
|
||||||
if (!getHolidayDetour)
|
if (getHolidayDetour != NULL)
|
||||||
{
|
{
|
||||||
g_pSM->LogError(myself, "GetHoliday detour failed");
|
getHolidayDetour->EnableDetour();
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
getHolidayDetour->EnableDetour();
|
g_pSM->LogError(myself, "GetHoliday detour failed");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveGetHolidayDetour()
|
void RemoveGetHolidayDetour()
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
#include <jit/x86/x86_macros.h>
|
#include <jit/x86/x86_macros.h>
|
||||||
#include "CDetour/detours.h"
|
#include "CDetour/detours.h"
|
||||||
|
|
||||||
void InitialiseGetHolidayDetour();
|
bool InitialiseGetHolidayDetour();
|
||||||
void RemoveGetHolidayDetour();
|
void RemoveGetHolidayDetour();
|
||||||
|
|
||||||
extern IForward *g_getHolidayForward;
|
extern IForward *g_getHolidayForward;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "RegNatives.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)
|
cell_t TF2_MakeBleed(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
static ICallWrapper *pWrapper = NULL;
|
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]);
|
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
CBaseEntity *pTarget;
|
CBaseEntity *pAttacker;
|
||||||
if (!(pTarget = UTIL_GetCBaseEntity(params[2], true)))
|
if (!(pAttacker = UTIL_GetCBaseEntity(params[2], true)))
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is not valid", params[2]);
|
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;
|
*(void **)vptr = obj;
|
||||||
vptr += sizeof(void *);
|
vptr += sizeof(void *);
|
||||||
*(CBaseEntity **)vptr = pTarget;
|
*(CBaseEntity **)vptr = pAttacker;
|
||||||
vptr += sizeof(CBaseEntity *);
|
vptr += sizeof(CBaseEntity *);
|
||||||
*(CBaseEntity **)vptr = NULL;
|
*(CBaseEntity **)vptr = NULL;
|
||||||
vptr += sizeof(CBaseEntity *);
|
vptr += sizeof(CBaseEntity *);
|
||||||
@@ -147,7 +147,7 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
|||||||
if (!pWrapper)
|
if (!pWrapper)
|
||||||
{
|
{
|
||||||
REGISTER_NATIVE_ADDR("Disguise",
|
REGISTER_NATIVE_ADDR("Disguise",
|
||||||
PassInfo pass[3]; \
|
PassInfo pass[4]; \
|
||||||
pass[0].flags = PASSFLAG_BYVAL; \
|
pass[0].flags = PASSFLAG_BYVAL; \
|
||||||
pass[0].size = sizeof(int); \
|
pass[0].size = sizeof(int); \
|
||||||
pass[0].type = PassType_Basic; \
|
pass[0].type = PassType_Basic; \
|
||||||
@@ -157,7 +157,10 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
|||||||
pass[2].flags = PASSFLAG_BYVAL; \
|
pass[2].flags = PASSFLAG_BYVAL; \
|
||||||
pass[2].size = sizeof(CBaseEntity *); \
|
pass[2].size = sizeof(CBaseEntity *); \
|
||||||
pass[2].type = PassType_Basic; \
|
pass[2].type = PassType_Basic; \
|
||||||
pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 3))
|
pass[3].flags = PASSFLAG_BYVAL; \
|
||||||
|
pass[3].size = sizeof(bool); \
|
||||||
|
pass[3].type = PassType_Basic; \
|
||||||
|
pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
CBaseEntity *pEntity;
|
CBaseEntity *pEntity;
|
||||||
@@ -175,7 +178,7 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
|||||||
return pContext->ThrowNativeError("Target client index %d is not valid", params[1]);
|
return pContext->ThrowNativeError("Target client index %d is not valid", params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char vstk[sizeof(void *) + 2*sizeof(int)];
|
unsigned char vstk[sizeof(void *) + 2*sizeof(int) + sizeof(bool)];
|
||||||
unsigned char *vptr = vstk;
|
unsigned char *vptr = vstk;
|
||||||
|
|
||||||
|
|
||||||
@@ -186,6 +189,8 @@ cell_t TF2_Disguise(IPluginContext *pContext, const cell_t *params)
|
|||||||
*(int *)vptr = params[3];
|
*(int *)vptr = params[3];
|
||||||
vptr += sizeof(int);
|
vptr += sizeof(int);
|
||||||
*(CBaseEntity **)vptr = pTarget;
|
*(CBaseEntity **)vptr = pTarget;
|
||||||
|
vptr += sizeof(CBaseEntity *);
|
||||||
|
*(bool *)vptr = true;
|
||||||
|
|
||||||
pWrapper->Execute(vstk, NULL);
|
pWrapper->Execute(vstk, NULL);
|
||||||
|
|
||||||
@@ -475,6 +480,42 @@ cell_t TF2_GetClass(IPluginContext *pContext, const cell_t *params)
|
|||||||
return (cell_t)ClassnameToType(str);
|
return (cell_t)ClassnameToType(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// native TF2_IsPlayerInDuel(client)
|
||||||
|
cell_t TF2_IsPlayerInDuel(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
static ICallWrapper *pWrapper = NULL;
|
||||||
|
|
||||||
|
// DuelMiniGame_IsPlayerInDuel(CTFPlayer *)
|
||||||
|
if (!pWrapper)
|
||||||
|
{
|
||||||
|
REGISTER_NATIVE_ADDR("IsPlayerInDuel",
|
||||||
|
PassInfo pass[1]; \
|
||||||
|
pass[0].flags = PASSFLAG_BYVAL; \
|
||||||
|
pass[0].size = sizeof(CBaseEntity *); \
|
||||||
|
pass[0].type = PassType_Basic; \
|
||||||
|
PassInfo ret; \
|
||||||
|
ret.flags = PASSFLAG_BYVAL; \
|
||||||
|
ret.size = sizeof(bool); \
|
||||||
|
ret.type = PassType_Basic; \
|
||||||
|
pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &ret, pass, 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
CBaseEntity *pPlayer;
|
||||||
|
if (!(pPlayer = UTIL_GetCBaseEntity(params[1], true)))
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char vstk[sizeof(CBaseEntity *)];
|
||||||
|
unsigned char *vptr = vstk;
|
||||||
|
*(CBaseEntity **)vptr = pPlayer;
|
||||||
|
|
||||||
|
bool retValue;
|
||||||
|
pWrapper->Execute(vstk, &retValue);
|
||||||
|
|
||||||
|
return (retValue) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
sp_nativeinfo_t g_TFNatives[] =
|
sp_nativeinfo_t g_TFNatives[] =
|
||||||
{
|
{
|
||||||
{"TF2_IgnitePlayer", TF2_Burn},
|
{"TF2_IgnitePlayer", TF2_Burn},
|
||||||
@@ -490,5 +531,6 @@ sp_nativeinfo_t g_TFNatives[] =
|
|||||||
{"TF2_SetPlayerPowerPlay", TF2_SetPowerplayEnabled},
|
{"TF2_SetPlayerPowerPlay", TF2_SetPowerplayEnabled},
|
||||||
{"TF2_StunPlayer", TF2_StunPlayer},
|
{"TF2_StunPlayer", TF2_StunPlayer},
|
||||||
{"TF2_MakeBleed", TF2_MakeBleed},
|
{"TF2_MakeBleed", TF2_MakeBleed},
|
||||||
|
{"TF2_IsPlayerInDuel", TF2_IsPlayerInDuel},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -143,6 +143,8 @@
|
|||||||
"game" "RnLBeta"
|
"game" "RnLBeta"
|
||||||
"game" "fas"
|
"game" "fas"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "dinodday"
|
||||||
|
"game" "esmod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Keys"
|
"Keys"
|
||||||
@@ -171,6 +173,7 @@
|
|||||||
"game" "cstrike"
|
"game" "cstrike"
|
||||||
"game" "RnLBeta"
|
"game" "RnLBeta"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Keys"
|
"Keys"
|
||||||
@@ -202,6 +205,8 @@
|
|||||||
"game" "fas"
|
"game" "fas"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
|
"game" "esmod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Keys"
|
"Keys"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
"game" "hidden"
|
"game" "hidden"
|
||||||
"game" "zombie_master"
|
"game" "zombie_master"
|
||||||
"game" "NeotokyoSource"
|
"game" "NeotokyoSource"
|
||||||
"game" "cspromod"
|
"game" "esmod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
"game" "synergy"
|
"game" "synergy"
|
||||||
"game" "fas"
|
"game" "fas"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
"game" "hidden"
|
"game" "hidden"
|
||||||
"game" "zombie_master"
|
"game" "zombie_master"
|
||||||
"game" "NeotokyoSource"
|
"game" "NeotokyoSource"
|
||||||
"game" "cspromod"
|
"game" "esmod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"game" "gesource"
|
"game" "gesource"
|
||||||
"game" "fas"
|
"game" "fas"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
@@ -72,9 +73,9 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "ageofchivalry"
|
"game" "ageofchivalry"
|
||||||
"game" "zps"
|
|
||||||
"game" "pvkii"
|
"game" "pvkii"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
@@ -100,9 +101,9 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "ageofchivalry"
|
"game" "ageofchivalry"
|
||||||
"game" "zps"
|
|
||||||
"game" "pvkii"
|
"game" "pvkii"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
@@ -133,6 +134,7 @@
|
|||||||
"game" "obsidian"
|
"game" "obsidian"
|
||||||
"game" "fas"
|
"game" "fas"
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
@@ -223,6 +225,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "ageofchivalry"
|
"game" "ageofchivalry"
|
||||||
|
"game" "cspromod"
|
||||||
}
|
}
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -250,7 +250,7 @@
|
|||||||
"SetUserCvar"
|
"SetUserCvar"
|
||||||
{
|
{
|
||||||
"windows" "17"
|
"windows" "17"
|
||||||
"linux" "56"
|
"linux" "57"
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
|
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
@@ -79,6 +81,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
@@ -98,6 +101,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
@@ -172,6 +176,7 @@
|
|||||||
"#supported"
|
"#supported"
|
||||||
{
|
{
|
||||||
"game" "swarm"
|
"game" "swarm"
|
||||||
|
"game" "dinodday"
|
||||||
}
|
}
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
@@ -220,60 +225,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Alien Swarm */
|
|
||||||
"swarm"
|
|
||||||
{
|
|
||||||
"Offsets"
|
|
||||||
{
|
|
||||||
"Ignite"
|
|
||||||
{
|
|
||||||
"windows" "219"
|
|
||||||
}
|
|
||||||
"Extinguish"
|
|
||||||
{
|
|
||||||
"windows" "222"
|
|
||||||
}
|
|
||||||
"Teleport"
|
|
||||||
{
|
|
||||||
"windows" "111"
|
|
||||||
}
|
|
||||||
"GetVelocity"
|
|
||||||
{
|
|
||||||
"windows" "144"
|
|
||||||
}
|
|
||||||
"EyeAngles"
|
|
||||||
{
|
|
||||||
"windows" "135"
|
|
||||||
}
|
|
||||||
"AcceptInput"
|
|
||||||
{
|
|
||||||
"windows" "39"
|
|
||||||
}
|
|
||||||
"DispatchKeyValue"
|
|
||||||
{
|
|
||||||
"windows" "34"
|
|
||||||
}
|
|
||||||
"DispatchKeyValueFloat"
|
|
||||||
{
|
|
||||||
"windows" "33"
|
|
||||||
}
|
|
||||||
"DispatchKeyValueVector"
|
|
||||||
{
|
|
||||||
"windows" "31"
|
|
||||||
}
|
|
||||||
"SetEntityModel"
|
|
||||||
{
|
|
||||||
"windows" "26"
|
|
||||||
}
|
|
||||||
"Activate"
|
|
||||||
{
|
|
||||||
"windows" "36"
|
|
||||||
}
|
|
||||||
"PlayerRunCmd"
|
|
||||||
{
|
|
||||||
"windows" "442"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
"Games"
|
||||||
|
{
|
||||||
|
/* Alien Swarm */
|
||||||
|
"swarm"
|
||||||
|
{
|
||||||
|
"Offsets"
|
||||||
|
{
|
||||||
|
"Ignite"
|
||||||
|
{
|
||||||
|
"windows" "219"
|
||||||
|
}
|
||||||
|
"Extinguish"
|
||||||
|
{
|
||||||
|
"windows" "222"
|
||||||
|
}
|
||||||
|
"Teleport"
|
||||||
|
{
|
||||||
|
"windows" "111"
|
||||||
|
}
|
||||||
|
"GetVelocity"
|
||||||
|
{
|
||||||
|
"windows" "144"
|
||||||
|
}
|
||||||
|
"EyeAngles"
|
||||||
|
{
|
||||||
|
"windows" "135"
|
||||||
|
}
|
||||||
|
"AcceptInput"
|
||||||
|
{
|
||||||
|
"windows" "39"
|
||||||
|
}
|
||||||
|
"DispatchKeyValue"
|
||||||
|
{
|
||||||
|
"windows" "34"
|
||||||
|
}
|
||||||
|
"DispatchKeyValueFloat"
|
||||||
|
{
|
||||||
|
"windows" "33"
|
||||||
|
}
|
||||||
|
"DispatchKeyValueVector"
|
||||||
|
{
|
||||||
|
"windows" "31"
|
||||||
|
}
|
||||||
|
"SetEntityModel"
|
||||||
|
{
|
||||||
|
"windows" "26"
|
||||||
|
}
|
||||||
|
"Activate"
|
||||||
|
{
|
||||||
|
"windows" "36"
|
||||||
|
}
|
||||||
|
"PlayerRunCmd"
|
||||||
|
{
|
||||||
|
"windows" "442"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,140 +1,94 @@
|
|||||||
"Games"
|
"Games"
|
||||||
{
|
{
|
||||||
/* CSpromod 1.04 */
|
/* CSpromod 1.05 */
|
||||||
"cspromod"
|
"cspromod"
|
||||||
{
|
{
|
||||||
"Offsets"
|
"Offsets"
|
||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "330"
|
"windows" "353"
|
||||||
"linux" "331"
|
"linux" "354"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "226"
|
"windows" "239"
|
||||||
"linux" "227"
|
"linux" "240"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "224"
|
"windows" "237"
|
||||||
"linux" "225"
|
"linux" "238"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "188"
|
"windows" "194"
|
||||||
"linux" "189"
|
"linux" "195"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "189"
|
"windows" "198"
|
||||||
"linux" "190"
|
"linux" "199"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "98"
|
"windows" "101"
|
||||||
"linux" "99"
|
"linux" "102"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "358"
|
"windows" "389"
|
||||||
"linux" "359"
|
"linux" "389"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "126"
|
"windows" "131"
|
||||||
"linux" "127"
|
"linux" "132"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "118"
|
"windows" "123"
|
||||||
"linux" "119"
|
"linux" "124"
|
||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "35"
|
"windows" "34"
|
||||||
"linux" "36"
|
"linux" "35"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "29"
|
||||||
"linux" "30"
|
"linux" "28"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "30"
|
"windows" "28"
|
||||||
"linux" "31"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "27"
|
||||||
"linux" "32"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
"windows" "25"
|
"windows" "23"
|
||||||
"linux" "26"
|
"linux" "24"
|
||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "217"
|
"windows" "230"
|
||||||
"linux" "218"
|
"linux" "231"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "32"
|
"windows" "31"
|
||||||
"linux" "33"
|
"linux" "32"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "348"
|
"windows" "373"
|
||||||
"linux" "349"
|
"linux" "374"
|
||||||
}
|
|
||||||
"FireOutputBackup"
|
|
||||||
{
|
|
||||||
"windows" "6"
|
|
||||||
"linux" "6"
|
|
||||||
}
|
|
||||||
"g_pGameRules"
|
|
||||||
{
|
|
||||||
"windows" "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"Signatures"
|
|
||||||
{
|
|
||||||
"FireOutput"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x85\xF6"
|
|
||||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
|
||||||
}
|
|
||||||
"DispatchSpawn"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
|
||||||
"windows" "\x53\x55\x56\x8B\x74\x2A\x2A\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x2A\x2A\x8B\xCB\xFF"
|
|
||||||
}
|
|
||||||
"CreateEntityByName"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"linux" "@_Z18CreateEntityByNamePKci"
|
|
||||||
"windows" "\x56\x8B\x74\x2A\x2A\x83\xFE\xFF\x57\x8B\x7C\x2A\x2A\x74\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x2A\x2A\x56\xFF\xD2"
|
|
||||||
}
|
|
||||||
"FindEntityByClassname"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x85\xC9\x57\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\xFF\x2A\x2A\x2A\x83\xC0\x2A\xC1\xE0\x2A\x8B\x3C\x30\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x2A\x2A\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x2A\x8D\x2A\x2A\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x11\x39"
|
|
||||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
|
||||||
}
|
|
||||||
"CreateGameRulesObject"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2"
|
|
||||||
}
|
|
||||||
"g_pGameRules"
|
|
||||||
{
|
|
||||||
"library" "server"
|
|
||||||
"linux" "@g_pGameRules"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,68 +26,68 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "387"
|
"windows" "390"
|
||||||
"linux" "388"
|
"linux" "391"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "259"
|
"windows" "262"
|
||||||
"linux" "260"
|
"linux" "263"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "257"
|
"windows" "260"
|
||||||
"linux" "258"
|
"linux" "261"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "202"
|
"windows" "204"
|
||||||
"linux" "203"
|
"linux" "205"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "206"
|
"windows" "208"
|
||||||
"linux" "207"
|
"linux" "209"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "105"
|
"windows" "106"
|
||||||
"linux" "106"
|
"linux" "107"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "428"
|
"windows" "431"
|
||||||
"linux" "428"
|
"linux" "431"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "137"
|
"windows" "138"
|
||||||
"linux" "138"
|
"linux" "139"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "128"
|
"windows" "129"
|
||||||
"linux" "129"
|
"linux" "130"
|
||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "34"
|
"windows" "35"
|
||||||
"linux" "35"
|
"linux" "36"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "30"
|
||||||
"linux" "28"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "28"
|
"windows" "29"
|
||||||
"linux" "29"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "27"
|
"windows" "28"
|
||||||
"linux" "30"
|
"linux" "31"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
@@ -96,18 +96,18 @@
|
|||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "250"
|
"windows" "253"
|
||||||
"linux" "251"
|
"linux" "254"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "32"
|
||||||
"linux" "32"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "405"
|
"windows" "408"
|
||||||
"linux" "406"
|
"linux" "409"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
"Games"
|
||||||
|
{
|
||||||
|
/* Dino D-Day */
|
||||||
|
"dinodday"
|
||||||
|
{
|
||||||
|
"Offsets"
|
||||||
|
{
|
||||||
|
"GiveNamedItem"
|
||||||
|
{
|
||||||
|
"windows" "422"
|
||||||
|
}
|
||||||
|
"RemovePlayerItem"
|
||||||
|
{
|
||||||
|
"windows" "286"
|
||||||
|
}
|
||||||
|
"Weapon_GetSlot"
|
||||||
|
{
|
||||||
|
"windows" "275"
|
||||||
|
}
|
||||||
|
"Ignite"
|
||||||
|
{
|
||||||
|
"windows" "219"
|
||||||
|
}
|
||||||
|
"Extinguish"
|
||||||
|
{
|
||||||
|
"windows" "222"
|
||||||
|
}
|
||||||
|
"Teleport"
|
||||||
|
{
|
||||||
|
"windows" "111"
|
||||||
|
}
|
||||||
|
"CommitSuicide"
|
||||||
|
{
|
||||||
|
"windows" "466"
|
||||||
|
}
|
||||||
|
"GetVelocity"
|
||||||
|
{
|
||||||
|
"windows" "144"
|
||||||
|
}
|
||||||
|
"EyeAngles"
|
||||||
|
{
|
||||||
|
"windows" "135"
|
||||||
|
}
|
||||||
|
"AcceptInput"
|
||||||
|
{
|
||||||
|
"windows" "39"
|
||||||
|
}
|
||||||
|
"DispatchKeyValue"
|
||||||
|
{
|
||||||
|
"windows" "34"
|
||||||
|
}
|
||||||
|
"DispatchKeyValueFloat"
|
||||||
|
{
|
||||||
|
"windows" "33"
|
||||||
|
}
|
||||||
|
"DispatchKeyValueVector"
|
||||||
|
{
|
||||||
|
"windows" "31"
|
||||||
|
}
|
||||||
|
"SetEntityModel"
|
||||||
|
{
|
||||||
|
"windows" "26"
|
||||||
|
}
|
||||||
|
"WeaponEquip"
|
||||||
|
{
|
||||||
|
"windows" "278"
|
||||||
|
}
|
||||||
|
"Activate"
|
||||||
|
{
|
||||||
|
"windows" "36"
|
||||||
|
}
|
||||||
|
"PlayerRunCmd"
|
||||||
|
{
|
||||||
|
"windows" "442"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,68 +18,68 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "386"
|
"windows" "389"
|
||||||
"linux" "387"
|
"linux" "390"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "259"
|
"windows" "262"
|
||||||
"linux" "260"
|
"linux" "263"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "257"
|
"windows" "260"
|
||||||
"linux" "258"
|
"linux" "261"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "202"
|
"windows" "204"
|
||||||
"linux" "203"
|
"linux" "205"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "206"
|
"windows" "208"
|
||||||
"linux" "207"
|
"linux" "209"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "105"
|
"windows" "106"
|
||||||
"linux" "106"
|
"linux" "107"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "424"
|
"windows" "427"
|
||||||
"linux" "425"
|
"linux" "428"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "137"
|
"windows" "138"
|
||||||
"linux" "138"
|
"linux" "139"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "128"
|
"windows" "129"
|
||||||
"linux" "129"
|
"linux" "130"
|
||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "34"
|
"windows" "35"
|
||||||
"linux" "35"
|
"linux" "36"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "30"
|
||||||
"linux" "28"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "28"
|
"windows" "29"
|
||||||
"linux" "29"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "27"
|
"windows" "28"
|
||||||
"linux" "30"
|
"linux" "31"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
@@ -88,18 +88,18 @@
|
|||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "250"
|
"windows" "253"
|
||||||
"linux" "251"
|
"linux" "254"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "32"
|
||||||
"linux" "32"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "404"
|
"windows" "407"
|
||||||
"linux" "405"
|
"linux" "408"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
"Games"
|
"Games"
|
||||||
{
|
{
|
||||||
/* Empires 2.25b */
|
/* Empires 2.31a */
|
||||||
"empires"
|
"empires"
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -19,28 +19,28 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "353"
|
"windows" "357"
|
||||||
"linux" "354"
|
"linux" "358"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "240"
|
"windows" "244"
|
||||||
"linux" "241"
|
"linux" "245"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "238"
|
"windows" "242"
|
||||||
"linux" "239"
|
"linux" "243"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "195"
|
"windows" "199"
|
||||||
"linux" "196"
|
"linux" "200"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "199"
|
"windows" "203"
|
||||||
"linux" "200"
|
"linux" "204"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
@@ -49,18 +49,18 @@
|
|||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "392"
|
"windows" "396"
|
||||||
"linux" "392"
|
"linux" "396"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "132"
|
"windows" "136"
|
||||||
"linux" "133"
|
"linux" "137"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "124"
|
"windows" "128"
|
||||||
"linux" "125"
|
"linux" "129"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
@@ -94,44 +94,55 @@
|
|||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "231"
|
"windows" "235"
|
||||||
"linux" "232"
|
"linux" "236"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "372"
|
"windows" "376"
|
||||||
"linux" "373"
|
"linux" "377"
|
||||||
}
|
}
|
||||||
"FireOutputBackup"
|
"FireOutputBackup"
|
||||||
{
|
{
|
||||||
"windows" "6"
|
"windows" "9"
|
||||||
"linux" "10"
|
"linux" "6"
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset into CBaseTempEntity constructor */
|
||||||
|
"s_pTempEntities"
|
||||||
|
{
|
||||||
|
"windows" "19"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
|
"CBaseTempEntity"
|
||||||
|
{
|
||||||
|
"library" "server"
|
||||||
|
"windows" "\x55\x8B\xEC\x8B\xC1\x8B\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x8B\x15\x2A\x2A\x2A\x2A\x89"
|
||||||
|
}
|
||||||
"DispatchSpawn"
|
"DispatchSpawn"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"windows" "\x55\x8B\xEC\x51\x53\x56\x8B\x75\x2A\x57\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x8B"
|
||||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||||
}
|
}
|
||||||
"CreateEntityByName"
|
"CreateEntityByName"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x56\x8B\x74\x24\x0C\x57\x8B\x7C\x24\x0C\x83\xFE\xFF\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2"
|
"windows" "\x55\x8B\xEC\x56\x8B\x2A\x2A\x57\x8B\x2A\x2A\x83\x2A\x2A\x74\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x2A\x56\xFF\xD2"
|
||||||
"linux" "@_Z18CreateEntityByNamePKci"
|
"linux" "@_Z18CreateEntityByNamePKci"
|
||||||
}
|
}
|
||||||
"FindEntityByClassname"
|
"FindEntityByClassname"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x2A\x2A\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\x2A\x2A\x2A\x2A\x40\x03\xC0\x8B\x3C\xC6\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\x2A\x2A\x2A\x2A\x2A\x83\xC4\x2A\xEB\x11\x39"
|
||||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||||
}
|
}
|
||||||
"FireOutput"
|
"FireOutput"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x55\x8B\xEC\x83\x2A\x2A\x81\xEC\x2A\x2A\x2A\x2A\x53\x56\x8B\x71\x2A\x57\x89"
|
"windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\x71\x2A\x57\x89\x2A\x2A\xC7"
|
||||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,68 +18,68 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "428"
|
"windows" "431"
|
||||||
"linux" "429"
|
"linux" "432"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "301"
|
"windows" "304"
|
||||||
"linux" "302"
|
"linux" "305"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "299"
|
"windows" "302"
|
||||||
"linux" "300"
|
"linux" "303"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "238"
|
"windows" "240"
|
||||||
"linux" "239"
|
"linux" "241"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "242"
|
"windows" "244"
|
||||||
"linux" "243"
|
"linux" "245"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "106"
|
"windows" "107"
|
||||||
"linux" "107"
|
"linux" "108"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "466"
|
"windows" "470"
|
||||||
"linux" "466"
|
"linux" "470"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "138"
|
"windows" "139"
|
||||||
"linux" "139"
|
"linux" "140"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "129"
|
"windows" "130"
|
||||||
"linux" "130"
|
"linux" "131"
|
||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "34"
|
"windows" "35"
|
||||||
"linux" "35"
|
"linux" "36"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "30"
|
||||||
"linux" "28"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "28"
|
"windows" "29"
|
||||||
"linux" "29"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "27"
|
"windows" "28"
|
||||||
"linux" "30"
|
"linux" "31"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
@@ -88,18 +88,18 @@
|
|||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "292"
|
"windows" "295"
|
||||||
"linux" "293"
|
"linux" "296"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "32"
|
||||||
"linux" "32"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "446"
|
"windows" "449"
|
||||||
"linux" "447"
|
"linux" "450"
|
||||||
}
|
}
|
||||||
"FireOutputBackup"
|
"FireOutputBackup"
|
||||||
{
|
{
|
||||||
@@ -113,31 +113,25 @@
|
|||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"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\x31\xC0\x8B\x75\x2A\x85\xF6\x0F"
|
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||||
}
|
}
|
||||||
"CreateEntityByName"
|
"CreateEntityByName"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x56\x8B\x74\x24\x0C\x57\x8B\x7C\x24\x0C\x83\xFE\xFF\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2"
|
"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" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2A\xE8\x2A\x2A\x2A\x2A\x81\xC3\x2A\x2A\x2A\x2A\x8B\x75\x2A\x83\xFE\xFF\x74\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x00\x8B"
|
"linux" "@_Z18CreateEntityByNamePKci"
|
||||||
}
|
}
|
||||||
"FindEntityByClassname"
|
"FindEntityByClassname"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"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\x55\x2A\x85\xD2\x74\x75"
|
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||||
}
|
}
|
||||||
"FireOutput"
|
"FireOutput"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x57\x89"
|
"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\x45\x2A\x8B\x78\x2A\x85\xFF\x0F"
|
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||||
}
|
|
||||||
|
|
||||||
"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\x8D\x83\x2A\x2A\x2A\x2A\x83"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "351"
|
"windows" "352"
|
||||||
"linux" "352"
|
"linux" "353"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
@@ -36,8 +36,8 @@
|
|||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "392"
|
"windows" "393"
|
||||||
"linux" "392"
|
"linux" "393"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
@@ -86,39 +86,48 @@
|
|||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "371"
|
"windows" "372"
|
||||||
"linux" "372"
|
"linux" "373"
|
||||||
}
|
}
|
||||||
"FireOutputBackup"
|
"FireOutputBackup"
|
||||||
{
|
{
|
||||||
"windows" "6"
|
"windows" "9"
|
||||||
"linux" "10"
|
"linux" "10"
|
||||||
}
|
}
|
||||||
|
"s_pTempEntities"
|
||||||
|
{
|
||||||
|
"windows" "19"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
|
"CBaseTempEntity"
|
||||||
|
{
|
||||||
|
"library" "server"
|
||||||
|
"windows" "\x55\x8B\xEC\x8B\xC1\x8B\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x8B\x15\x2A\x2A\x2A\x2A\x89"
|
||||||
|
}
|
||||||
"FindEntityByClassname"
|
"FindEntityByClassname"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x2A\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\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x2A\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\xA4\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\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\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"
|
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||||
}
|
}
|
||||||
"CreateEntityByName"
|
"CreateEntityByName"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"linux" "@_Z18CreateEntityByNamePKci"
|
"linux" "@_Z18CreateEntityByNamePKci"
|
||||||
"windows" "\x56\x8B\x74\x24\x2A\x57\x8B\x7C\x24\x2A\x83\xFE\xFF\x74\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x2A\x56\xFF\xD2"
|
"windows" "\x55\x8B\xEC\x56\x8B\x2A\x2A\x57\x8B\x2A\x2A\x83\x2A\x2A\x74\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x2A\x56\xFF\xD2"
|
||||||
}
|
}
|
||||||
"DispatchSpawn"
|
"DispatchSpawn"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||||
"windows" "\x53\x55\x56\x8B\x74\x2A\x2A\x57\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x2A\x8B\xCB"
|
"windows" "\x55\x8B\xEC\x51\x53\x56\x8B\x75\x2A\x57\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x8B"
|
||||||
}
|
}
|
||||||
"FireOutput"
|
"FireOutput"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x81\xEC\x1C\x01\x00\x00\x53\x55\x56\x8B\x71\x14\x57\x89"
|
"windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\x71\x2A\x57\x89\x2A\x2A\xC7"
|
||||||
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,68 +18,68 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "386"
|
"windows" "389"
|
||||||
"linux" "387"
|
"linux" "390"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "259"
|
"windows" "262"
|
||||||
"linux" "260"
|
"linux" "263"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "257"
|
"windows" "260"
|
||||||
"linux" "258"
|
"linux" "261"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "202"
|
"windows" "204"
|
||||||
"linux" "203"
|
"linux" "205"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "206"
|
"windows" "208"
|
||||||
"linux" "207"
|
"linux" "209"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "105"
|
"windows" "106"
|
||||||
"linux" "106"
|
"linux" "107"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "425"
|
"windows" "428"
|
||||||
"linux" "425"
|
"linux" "428"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "137"
|
"windows" "138"
|
||||||
"linux" "138"
|
"linux" "139"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "128"
|
"windows" "129"
|
||||||
"linux" "129"
|
"linux" "130"
|
||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "34"
|
"windows" "35"
|
||||||
"linux" "35"
|
"linux" "36"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "30"
|
||||||
"linux" "28"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "28"
|
"windows" "29"
|
||||||
"linux" "29"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "27"
|
"windows" "28"
|
||||||
"linux" "30"
|
"linux" "31"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
@@ -88,18 +88,18 @@
|
|||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "250"
|
"windows" "253"
|
||||||
"linux" "251"
|
"linux" "254"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "32"
|
||||||
"linux" "32"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "404"
|
"windows" "407"
|
||||||
"linux" "405"
|
"linux" "408"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,63 +18,63 @@
|
|||||||
{
|
{
|
||||||
"GiveNamedItem"
|
"GiveNamedItem"
|
||||||
{
|
{
|
||||||
"windows" "386"
|
"windows" "389"
|
||||||
"linux" "387"
|
"linux" "390"
|
||||||
}
|
}
|
||||||
"RemovePlayerItem"
|
"RemovePlayerItem"
|
||||||
{
|
{
|
||||||
"windows" "259"
|
"windows" "262"
|
||||||
"linux" "259"
|
"linux" "263"
|
||||||
}
|
}
|
||||||
"Weapon_GetSlot"
|
"Weapon_GetSlot"
|
||||||
{
|
{
|
||||||
"windows" "257"
|
"windows" "260"
|
||||||
"linux" "258"
|
"linux" "261"
|
||||||
}
|
}
|
||||||
"Ignite"
|
"Ignite"
|
||||||
{
|
{
|
||||||
"windows" "202"
|
"windows" "204"
|
||||||
"linux" "203"
|
"linux" "205"
|
||||||
}
|
}
|
||||||
"Extinguish"
|
"Extinguish"
|
||||||
{
|
{
|
||||||
"windows" "206"
|
"windows" "208"
|
||||||
"linux" "207"
|
"linux" "209"
|
||||||
}
|
}
|
||||||
"Teleport"
|
"Teleport"
|
||||||
{
|
{
|
||||||
"windows" "105"
|
"windows" "106"
|
||||||
"linux" "106"
|
"linux" "107"
|
||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "427"
|
"windows" "430"
|
||||||
"linux" "427"
|
"linux" "430"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
"windows" "137"
|
"windows" "138"
|
||||||
"linux" "138"
|
"linux" "139"
|
||||||
}
|
}
|
||||||
"EyeAngles"
|
"EyeAngles"
|
||||||
{
|
{
|
||||||
"windows" "128"
|
"windows" "129"
|
||||||
"linux" "129"
|
"linux" "130"
|
||||||
}
|
}
|
||||||
"DispatchKeyValue"
|
"DispatchKeyValue"
|
||||||
{
|
{
|
||||||
"windows" "29"
|
"windows" "30"
|
||||||
"linux" "28"
|
"linux" "29"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueFloat"
|
"DispatchKeyValueFloat"
|
||||||
{
|
{
|
||||||
"windows" "28"
|
"windows" "29"
|
||||||
"linux" "29"
|
"linux" "30"
|
||||||
}
|
}
|
||||||
"DispatchKeyValueVector"
|
"DispatchKeyValueVector"
|
||||||
{
|
{
|
||||||
"windows" "27"
|
"windows" "28"
|
||||||
"linux" "30"
|
"linux" "31"
|
||||||
}
|
}
|
||||||
"SetEntityModel"
|
"SetEntityModel"
|
||||||
{
|
{
|
||||||
@@ -83,23 +83,23 @@
|
|||||||
}
|
}
|
||||||
"AcceptInput"
|
"AcceptInput"
|
||||||
{
|
{
|
||||||
"windows" "34"
|
"windows" "35"
|
||||||
"linux" "35"
|
"linux" "36"
|
||||||
}
|
}
|
||||||
"WeaponEquip"
|
"WeaponEquip"
|
||||||
{
|
{
|
||||||
"windows" "250"
|
"windows" "253"
|
||||||
"linux" "251"
|
"linux" "254"
|
||||||
}
|
}
|
||||||
"Activate"
|
"Activate"
|
||||||
{
|
{
|
||||||
"windows" "31"
|
"windows" "32"
|
||||||
"linux" "32"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
"PlayerRunCmd"
|
"PlayerRunCmd"
|
||||||
{
|
{
|
||||||
"windows" "404"
|
"windows" "407"
|
||||||
"linux" "405"
|
"linux" "408"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,8 @@
|
|||||||
}
|
}
|
||||||
"CommitSuicide"
|
"CommitSuicide"
|
||||||
{
|
{
|
||||||
"windows" "397"
|
"windows" "399"
|
||||||
"linux" "397"
|
"linux" "399"
|
||||||
}
|
}
|
||||||
"GetVelocity"
|
"GetVelocity"
|
||||||
{
|
{
|
||||||
@@ -96,13 +96,23 @@
|
|||||||
"windows" "32"
|
"windows" "32"
|
||||||
"linux" "33"
|
"linux" "33"
|
||||||
}
|
}
|
||||||
|
"PlayerRunCmd"
|
||||||
|
{
|
||||||
|
"windows" "375"
|
||||||
|
"linux" "376"
|
||||||
|
}
|
||||||
|
"FireOutputBackup"
|
||||||
|
{
|
||||||
|
"windows" "6"
|
||||||
|
"linux" "10"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
"FindEntityByClassname"
|
"FindEntityByClassname"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x2A\x2A\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xC1\xE0\x04\x8B\x2A\x2A\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\xA4\x24\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39"
|
"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"
|
||||||
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
|
||||||
}
|
}
|
||||||
"CreateEntityByName"
|
"CreateEntityByName"
|
||||||
@@ -117,6 +127,12 @@
|
|||||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||||
"windows" "\x53\x55\x56\x8B\x74\x2A\x2A\x57\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x2A\x8B\xCB"
|
"windows" "\x53\x55\x56\x8B\x74\x2A\x2A\x57\x85\xF6\x0F\x2A\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x2A\x8B\xCB"
|
||||||
}
|
}
|
||||||
|
"FireOutput"
|
||||||
|
{
|
||||||
|
"library" "server"
|
||||||
|
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x57\x89"
|
||||||
|
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,4 +167,16 @@
|
|||||||
{
|
{
|
||||||
"game" "fistful_of_frags"
|
"game" "fistful_of_frags"
|
||||||
}
|
}
|
||||||
|
"game.alienswarm.txt"
|
||||||
|
{
|
||||||
|
"game" "swarm"
|
||||||
|
}
|
||||||
|
"game.dinodday.txt"
|
||||||
|
{
|
||||||
|
"game" "dinodday"
|
||||||
|
}
|
||||||
|
"game.esmod.txt"
|
||||||
|
{
|
||||||
|
"game" "esmod"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-11
@@ -24,14 +24,14 @@
|
|||||||
"RemoveDisguise"
|
"RemoveDisguise"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"linux" "@_ZN15CTFPlayerShared14RemoveDisguiseEv"
|
||||||
}
|
}
|
||||||
"Disguise"
|
"Disguise"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x51\x53\x56\x8B\xF1\x8B\x8E\x2A\x2A\x00\x00\xE8\x2A\x2A\x2A\x2A\x8B\xD8\x8B\x86\x2A\x2A\x00\x00\x8B\x80"
|
"windows" "\x51\x53\x56\x8B\xF1\x8B\x8E\x2A\x2A\x00\x00\xE8\x2A\x2A\x2A\x2A\x8B\xD8\x8B\x86\x2A\x2A\x00\x00\x8B\x80"
|
||||||
"linux" "@_ZN15CTFPlayerShared8DisguiseEiiP9CTFPlayer"
|
"linux" "@_ZN15CTFPlayerShared8DisguiseEiiP9CTFPlayerb"
|
||||||
}
|
}
|
||||||
"CalcCritical"
|
"CalcCritical"
|
||||||
{
|
{
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"linux" "@_ZN14CTFCompoundBow26CalcIsAttackCriticalHelperEv"
|
"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"
|
"Regenerate"
|
||||||
{
|
{
|
||||||
@@ -60,14 +60,14 @@
|
|||||||
"AddCondition"
|
"AddCondition"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"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"
|
"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" "@_ZN15CTFPlayerShared7AddCondEif"
|
"linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondf"
|
||||||
}
|
}
|
||||||
"RemoveCondition"
|
"RemoveCondition"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x8B\x44\x2A\x2A\x56\x57\x8B\x7C\x2A\x2A\x8B\xF1\x50\x57\x8D\x8E\x2A\x2A\x2A\x2A\xE8"
|
"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" "@_ZN15CTFPlayerShared10RemoveCondEib"
|
"linux" "@_ZN15CTFPlayerShared10RemoveCondE7ETFCondb"
|
||||||
}
|
}
|
||||||
"SetPowerplayEnabled"
|
"SetPowerplayEnabled"
|
||||||
{
|
{
|
||||||
@@ -84,8 +84,8 @@
|
|||||||
"GetHoliday"
|
"GetHoliday"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x83\x2A\x2A\x2A\x56\x8B\xF1\x89\x2A\x2A\x2A\x74\x2A\xB8"
|
"windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x57\x6A\x00\xE8\x2A\x2A\x2A\x2A\x89"
|
||||||
"linux" "@_ZN12CTFGameRules10GetHolidayEv"
|
"linux" "@_Z15UTIL_GetHolidayv"
|
||||||
}
|
}
|
||||||
"MakeBleed"
|
"MakeBleed"
|
||||||
{
|
{
|
||||||
@@ -93,13 +93,20 @@
|
|||||||
"windows" "\x51\x56\x8B\xF1\x8B\x8E\x2A\x2A\x2A\x2A\x8B\x01\x8B\x90\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x6A\x19\x8D"
|
"windows" "\x51\x56\x8B\xF1\x8B\x8E\x2A\x2A\x2A\x2A\x8B\x01\x8B\x90\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x0F\x2A\x2A\x2A\x2A\x2A\x6A\x19\x8D"
|
||||||
"linux" "@_ZN15CTFPlayerShared9MakeBleedEP9CTFPlayerP13CTFWeaponBasef"
|
"linux" "@_ZN15CTFPlayerShared9MakeBleedEP9CTFPlayerP13CTFWeaponBasef"
|
||||||
}
|
}
|
||||||
|
"IsPlayerInDuel"
|
||||||
|
{
|
||||||
|
"library" "server"
|
||||||
|
"windows" "\x83\xEC\x08\x2A\x2A\x2A\x2A\x33\xC0\x89\x04\x24\x89\x44\x24\x04\x8D\x04\x24\x50\x2A\x2A\x2A\x2A\x2A\x84\xC0\x2A\x2A\x83\xC4\x08\xC3"
|
||||||
|
"linux" "@_Z21DuelMiniGame_IsInDuelP9CTFPlayer"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"Offsets"
|
"Offsets"
|
||||||
{
|
{
|
||||||
"ForceRespawn"
|
"ForceRespawn"
|
||||||
{
|
{
|
||||||
"windows" "314"
|
"windows" "317"
|
||||||
"linux" "315"
|
"linux" "318"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ public OnMapStart()
|
|||||||
PrecacheSound(SOUND_BOOM, true);
|
PrecacheSound(SOUND_BOOM, true);
|
||||||
PrecacheSound(SOUND_FREEZE, true);
|
PrecacheSound(SOUND_FREEZE, true);
|
||||||
|
|
||||||
if (GuessSDKVersion() == SOURCE_SDK_LEFT4DEAD2)
|
new sdkversion = GuessSDKVersion();
|
||||||
|
if (sdkversion == SOURCE_SDK_LEFT4DEAD || sdkversion == SOURCE_SDK_LEFT4DEAD2)
|
||||||
{
|
{
|
||||||
g_BeamSprite = PrecacheModel("materials/sprites/laserbeam.vmt");
|
g_BeamSprite = PrecacheModel("materials/sprites/laserbeam.vmt");
|
||||||
g_HaloSprite = PrecacheModel("materials/sprites/glow01.vmt");
|
g_HaloSprite = PrecacheModel("materials/sprites/glow01.vmt");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
|
* SourceMod (C)2004-2011 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This file is part of the SourceMod/SourcePawn SDK.
|
* This file is part of the SourceMod/SourcePawn SDK.
|
||||||
@@ -241,7 +241,7 @@ native GetClientCookieTime(client, Handle:cookie);
|
|||||||
/**
|
/**
|
||||||
* Do not edit below this line!
|
* Do not edit below this line!
|
||||||
*/
|
*/
|
||||||
public Extension:__ext_clientprefs =
|
public Extension:__ext_cprefs =
|
||||||
{
|
{
|
||||||
name = "Client Preferences",
|
name = "Client Preferences",
|
||||||
file = "clientprefs.ext",
|
file = "clientprefs.ext",
|
||||||
@@ -252,3 +252,21 @@ public Extension:__ext_clientprefs =
|
|||||||
required = 0,
|
required = 0,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if !defined REQUIRE_EXTENSIONS
|
||||||
|
public __ext_cprefs_SetNTVOptional()
|
||||||
|
{
|
||||||
|
MarkNativeAsOptional("RegClientCookie");
|
||||||
|
MarkNativeAsOptional("FindClientCookie");
|
||||||
|
MarkNativeAsOptional("SetClientCookie");
|
||||||
|
MarkNativeAsOptional("GetClientCookie");
|
||||||
|
MarkNativeAsOptional("AreClientCookiesCached");
|
||||||
|
MarkNativeAsOptional("SetCookiePrefabMenu");
|
||||||
|
MarkNativeAsOptional("SetCookieMenuItem");
|
||||||
|
MarkNativeAsOptional("ShowCookieMenu");
|
||||||
|
MarkNativeAsOptional("GetCookieIterator");
|
||||||
|
MarkNativeAsOptional("ReadCookieIterator");
|
||||||
|
MarkNativeAsOptional("GetCookieAccess");
|
||||||
|
MarkNativeAsOptional("GetClientCookieTime");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ enum NetFlow
|
|||||||
* not be used in OnPluginStart().
|
* not be used in OnPluginStart().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAXPLAYERS 64 /**< Maximum number of players SourceMod supports */
|
#define MAXPLAYERS 65 /**< Maximum number of players SourceMod supports */
|
||||||
#define MAX_NAME_LENGTH 32 /**< Maximum buffer required to store a client name */
|
#define MAX_NAME_LENGTH 32 /**< Maximum buffer required to store a client name */
|
||||||
|
|
||||||
public const MaxClients; /**< Maximum number of players the server supports (dynamic) */
|
public const MaxClients; /**< Maximum number of players the server supports (dynamic) */
|
||||||
|
|||||||
@@ -669,3 +669,18 @@ stock SetEntDataArray(entity, offset, const array[], arraySize, dataSize=4, bool
|
|||||||
SetEntData(entity, offset + i*dataSize, array[i], dataSize, changeState);
|
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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -123,7 +123,8 @@ enum RenderFx
|
|||||||
#define IN_GRENADE1 (1 << 23) // grenade 1
|
#define IN_GRENADE1 (1 << 23) // grenade 1
|
||||||
#define IN_GRENADE2 (1 << 24) // grenade 2
|
#define IN_GRENADE2 (1 << 24) // grenade 2
|
||||||
|
|
||||||
// CBaseEntity::m_fFlags
|
// Note: these are only for use with GetEntityFlags and SetEntityFlags
|
||||||
|
// and may not match the game's actual, internal m_fFlags values.
|
||||||
// PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION
|
// PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION
|
||||||
#define FL_ONGROUND (1 << 0) // At rest / on the ground
|
#define FL_ONGROUND (1 << 0) // At rest / on the ground
|
||||||
#define FL_DUCKING (1 << 1) // Player flag -- Player is fully crouched
|
#define FL_DUCKING (1 << 1) // Player flag -- Player is fully crouched
|
||||||
@@ -159,36 +160,36 @@ enum RenderFx
|
|||||||
#define FL_DISSOLVING (1 << 28) // We're dissolving!
|
#define FL_DISSOLVING (1 << 28) // We're dissolving!
|
||||||
#define FL_TRANSRAGDOLL (1 << 29) // In the process of turning into a client side ragdoll.
|
#define FL_TRANSRAGDOLL (1 << 29) // In the process of turning into a client side ragdoll.
|
||||||
#define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) // pusher that can't be blocked by the player
|
#define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) // pusher that can't be blocked by the player
|
||||||
// END m_fFlags #defines
|
#define FL_FREEZING (1 << 31) // We're becoming frozen!
|
||||||
|
#define FL_EP2V_UNKNOWN1 (1 << 31) // Unknown
|
||||||
|
// END entity flag #defines
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an entity's flags.
|
* Get an entity's flags.
|
||||||
*
|
*
|
||||||
|
* @note The game's actual flags are internally translated by SM
|
||||||
|
* to match the entity flags defined above as the actual values
|
||||||
|
* can differ per engine.
|
||||||
|
*
|
||||||
* @param entity Entity index.
|
* @param entity Entity index.
|
||||||
* @return Entity's flags, see m_fFlag defines above
|
* @return Entity's flags, see entity flag defines above.
|
||||||
* @error Invalid entity index, or lack of mod compliance.
|
* @error Invalid entity index, or lack of mod compliance.
|
||||||
*/
|
*/
|
||||||
stock GetEntityFlags(entity)
|
native GetEntityFlags(entity);
|
||||||
{
|
|
||||||
static bool:gotconfig = false;
|
|
||||||
static String:datamap[32];
|
|
||||||
|
|
||||||
if (!gotconfig)
|
/**
|
||||||
{
|
* Sets an entity's flags.
|
||||||
new Handle:gc = LoadGameConfigFile("core.games");
|
*
|
||||||
new bool:exists = GameConfGetKeyValue(gc, "m_fFlags", datamap, sizeof(datamap));
|
* @note The entity flags as defined above are internally translated by SM
|
||||||
CloseHandle(gc);
|
* to match the current game's expected value for the flags as
|
||||||
|
* the actual values can differ per engine.
|
||||||
if (!exists)
|
*
|
||||||
{
|
* @param entity Entity index.
|
||||||
strcopy(datamap, sizeof(datamap), "m_fFlags");
|
* @param flags Entity flags, see entity flag defines above.
|
||||||
}
|
* @noreturn
|
||||||
|
* @error Invalid entity index, or lack of mod compliance.
|
||||||
gotconfig = true;
|
*/
|
||||||
}
|
native SetEntityFlags(entity, flags);
|
||||||
|
|
||||||
return GetEntProp(entity, Prop_Data, datamap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -94,3 +94,28 @@ native GetLanguageCount();
|
|||||||
*/
|
*/
|
||||||
native GetLanguageInfo(language, String:code[]="", codeLen=0, String:name[]="", nameLen=0);
|
native GetLanguageInfo(language, String:code[]="", codeLen=0, String:name[]="", nameLen=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the language number of a client.
|
||||||
|
*
|
||||||
|
* @param client Client index.
|
||||||
|
* @param language Language number.
|
||||||
|
* @noreturn
|
||||||
|
* @error Invalid client index or client not in game.
|
||||||
|
*/
|
||||||
|
native SetClientLanguage(client, language);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the language number from a language code.
|
||||||
|
*
|
||||||
|
* @param code Language code (2-3 characters usually).
|
||||||
|
* @return Language number. -1 if not found.
|
||||||
|
*/
|
||||||
|
native GetLanguageByCode(const String:code[]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the language number from a language name.
|
||||||
|
*
|
||||||
|
* @param name Language name (case insensitive).
|
||||||
|
* @return Language number. -1 if not found.
|
||||||
|
*/
|
||||||
|
native GetLanguageByName(const String:name[]);
|
||||||
|
|||||||
+21
-6
@@ -82,7 +82,8 @@ enum TFCond
|
|||||||
TFCond_TeleportedGlow,
|
TFCond_TeleportedGlow,
|
||||||
TFCond_Taunting,
|
TFCond_Taunting,
|
||||||
TFCond_UberchargeFading,
|
TFCond_UberchargeFading,
|
||||||
TFCond_Unknown1,
|
TFCond_Unknown1, //9
|
||||||
|
TFCond_CloakFlicker = 9,
|
||||||
TFCond_Teleporting,
|
TFCond_Teleporting,
|
||||||
TFCond_Kritzkrieged,
|
TFCond_Kritzkrieged,
|
||||||
TFCond_Unknown2,
|
TFCond_Unknown2,
|
||||||
@@ -93,14 +94,19 @@ enum TFCond
|
|||||||
TFCond_Charging,
|
TFCond_Charging,
|
||||||
TFCond_DemoBuff,
|
TFCond_DemoBuff,
|
||||||
TFCond_CritCola,
|
TFCond_CritCola,
|
||||||
|
TFCond_InHealRadius,
|
||||||
TFCond_Healing,
|
TFCond_Healing,
|
||||||
|
TFCond_OnFire,
|
||||||
TFCond_OnFire = 22,
|
|
||||||
TFCond_Overhealed,
|
TFCond_Overhealed,
|
||||||
TFCond_Jarated,
|
TFCond_Jarated,
|
||||||
TFCond_Bleeding,
|
TFCond_Bleeding,
|
||||||
TFCond_DefenseBuffed,
|
TFCond_DefenseBuffed,
|
||||||
TFCond_Milked
|
TFCond_Milked,
|
||||||
|
TFCond_MegaHeal,
|
||||||
|
TFCond_RegenBuffed,
|
||||||
|
TFCond_MarkedForDeath,
|
||||||
|
|
||||||
|
TFCond_SpeedBuffAlly = 32
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TFHoliday
|
enum TFHoliday
|
||||||
@@ -224,11 +230,11 @@ native TF2_StunPlayer(client, Float:duration, Float:slowdown=0.0, stunflags, att
|
|||||||
* Induces the bleed effect on a client
|
* Induces the bleed effect on a client
|
||||||
*
|
*
|
||||||
* @param client Player's index.
|
* @param client Player's index.
|
||||||
* @param victim Victim's index.
|
* @param attacker Attacker's index.
|
||||||
* @param float Duration of bleeding (in seconds).
|
* @param float Duration of bleeding (in seconds).
|
||||||
* @noreturn
|
* @noreturn
|
||||||
*/
|
*/
|
||||||
native TF2_MakeBleed(client, victim, Float:duration);
|
native TF2_MakeBleed(client, attacker, Float:duration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the entity index of the CPlayerResource entity
|
* Retrieves the entity index of the CPlayerResource entity
|
||||||
@@ -272,6 +278,14 @@ forward Action:TF2_CalcIsAttackCritical(client, weapon, String:weaponname[], &bo
|
|||||||
*/
|
*/
|
||||||
forward Action:TF2_OnGetHoliday(&TFHoliday:holiday);
|
forward Action:TF2_OnGetHoliday(&TFHoliday:holiday);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not a client (Player) is in a duel.
|
||||||
|
*
|
||||||
|
* @param client Client Index.
|
||||||
|
* @return Boolean of whether or not the client/player is dueling.
|
||||||
|
*/
|
||||||
|
native bool:TF2_IsPlayerInDuel(client);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do not edit below this line!
|
* Do not edit below this line!
|
||||||
*/
|
*/
|
||||||
@@ -302,5 +316,6 @@ public __ext_tf2_SetNTVOptional()
|
|||||||
MarkNativeAsOptional("TF2_MakeBleed");
|
MarkNativeAsOptional("TF2_MakeBleed");
|
||||||
MarkNativeAsOptional("TF2_GetResourceEntity");
|
MarkNativeAsOptional("TF2_GetResourceEntity");
|
||||||
MarkNativeAsOptional("TF2_GetClass");
|
MarkNativeAsOptional("TF2_GetClass");
|
||||||
|
MarkNativeAsOptional("TF2_IsPlayerInDuel");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
#define TF_CONDFLAG_TELEPORTGLOW (1 << 6)
|
#define TF_CONDFLAG_TELEPORTGLOW (1 << 6)
|
||||||
#define TF_CONDFLAG_TAUNTING (1 << 7)
|
#define TF_CONDFLAG_TAUNTING (1 << 7)
|
||||||
#define TF_CONDFLAG_UBERCHARGEFADE (1 << 8)
|
#define TF_CONDFLAG_UBERCHARGEFADE (1 << 8)
|
||||||
|
#define TF_CONDFLAG_CLOAKFLICKER (1 << 9)
|
||||||
#define TF_CONDFLAG_TELEPORTING (1 << 10)
|
#define TF_CONDFLAG_TELEPORTING (1 << 10)
|
||||||
#define TF_CONDFLAG_KRITZKRIEGED (1 << 11)
|
#define TF_CONDFLAG_KRITZKRIEGED (1 << 11)
|
||||||
#define TF_CONDFLAG_DEADRINGERED (1 << 13)
|
#define TF_CONDFLAG_DEADRINGERED (1 << 13)
|
||||||
@@ -57,13 +58,17 @@
|
|||||||
#define TF_CONDFLAG_CHARGING (1 << 17)
|
#define TF_CONDFLAG_CHARGING (1 << 17)
|
||||||
#define TF_CONDFLAG_DEMOBUFF (1 << 18)
|
#define TF_CONDFLAG_DEMOBUFF (1 << 18)
|
||||||
#define TF_CONDFLAG_CRITCOLA (1 << 19)
|
#define TF_CONDFLAG_CRITCOLA (1 << 19)
|
||||||
#define TF_CONDFLAG_HEALING (1 << 20)
|
#define TF_CONDFLAG_INHEALRADIUS (1 << 20)
|
||||||
|
#define TF_CONDFLAG_HEALING (1 << 21)
|
||||||
#define TF_CONDFLAG_ONFIRE (1 << 22)
|
#define TF_CONDFLAG_ONFIRE (1 << 22)
|
||||||
#define TF_CONDFLAG_OVERHEALED (1 << 23)
|
#define TF_CONDFLAG_OVERHEALED (1 << 23)
|
||||||
#define TF_CONDFLAG_JARATED (1 << 24)
|
#define TF_CONDFLAG_JARATED (1 << 24)
|
||||||
#define TF_CONDFLAG_BLEEDING (1 << 25)
|
#define TF_CONDFLAG_BLEEDING (1 << 25)
|
||||||
#define TF_CONDFLAG_DEFENSEBUFFED (1 << 26)
|
#define TF_CONDFLAG_DEFENSEBUFFED (1 << 26)
|
||||||
#define TF_CONDFLAG_MILKED (1 << 27)
|
#define TF_CONDFLAG_MILKED (1 << 27)
|
||||||
|
#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_KILLERDOMINATION (1 << 0)
|
||||||
#define TF_DEATHFLAG_ASSISTERDOMINATION (1 << 1)
|
#define TF_DEATHFLAG_ASSISTERDOMINATION (1 << 1)
|
||||||
@@ -71,6 +76,8 @@
|
|||||||
#define TF_DEATHFLAG_ASSISTERREVENGE (1 << 3)
|
#define TF_DEATHFLAG_ASSISTERREVENGE (1 << 3)
|
||||||
#define TF_DEATHFLAG_FIRSTBLOOD (1 << 4)
|
#define TF_DEATHFLAG_FIRSTBLOOD (1 << 4)
|
||||||
#define TF_DEATHFLAG_DEADRINGER (1 << 5)
|
#define TF_DEATHFLAG_DEADRINGER (1 << 5)
|
||||||
|
#define TF_DEATHFLAG_INTERRUPTED (1 << 6)
|
||||||
|
#define TF_DEATHFLAG_GIBBED (1 << 7)
|
||||||
|
|
||||||
// Custom kill identifiers for the customkill property on the player_death event
|
// Custom kill identifiers for the customkill property on the player_death event
|
||||||
enum {
|
enum {
|
||||||
@@ -114,7 +121,11 @@ enum {
|
|||||||
TF_CUSTOM_TAUNT_ENGINEER_ARM,
|
TF_CUSTOM_TAUNT_ENGINEER_ARM,
|
||||||
TF_CUSTOM_FISH_KILL,
|
TF_CUSTOM_FISH_KILL,
|
||||||
TF_CUSTOM_TRIGGER_HURT,
|
TF_CUSTOM_TRIGGER_HURT,
|
||||||
TF_CUSTOM_DECAPITATION_BOSS
|
TF_CUSTOM_DECAPITATION_BOSS,
|
||||||
|
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
|
// Weapon codes as used in some events, such as player_death
|
||||||
@@ -192,7 +203,25 @@ enum {
|
|||||||
TF_WEAPON_SENTRY_REVENGE,
|
TF_WEAPON_SENTRY_REVENGE,
|
||||||
TF_WEAPON_JAR_MILK,
|
TF_WEAPON_JAR_MILK,
|
||||||
TF_WEAPON_HANDGUN_SCOUT_PRIMARY,
|
TF_WEAPON_HANDGUN_SCOUT_PRIMARY,
|
||||||
TF_WEAPON_BAT_FISH
|
TF_WEAPON_BAT_FISH,
|
||||||
|
TF_WEAPON_CROSSBOW,
|
||||||
|
TF_WEAPON_STICKBOMB,
|
||||||
|
TF_WEAPON_HANDGUN_SCOUT_SEC,
|
||||||
|
TF_WEAPON_SODA_POPPER,
|
||||||
|
TF_WEAPON_SNIPERRIFLE_DECAP,
|
||||||
|
};
|
||||||
|
|
||||||
|
// TF2 Weapon Slots for GetPlayerWeaponSlot
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TFWeaponSlot_Primary,
|
||||||
|
TFWeaponSlot_Secondary,
|
||||||
|
TFWeaponSlot_Melee,
|
||||||
|
TFWeaponSlot_Grenade,
|
||||||
|
TFWeaponSlot_Building,
|
||||||
|
TFWeaponSlot_PDA,
|
||||||
|
TFWeaponSlot_Item1,
|
||||||
|
TFWeaponSlot_Item2
|
||||||
};
|
};
|
||||||
|
|
||||||
// Identifiers for the eventtype property on the teamplay_flag_event event
|
// Identifiers for the eventtype property on the teamplay_flag_event event
|
||||||
@@ -200,7 +229,8 @@ enum {
|
|||||||
TF_FLAGEVENT_PICKEDUP = 1,
|
TF_FLAGEVENT_PICKEDUP = 1,
|
||||||
TF_FLAGEVENT_CAPTURED,
|
TF_FLAGEVENT_CAPTURED,
|
||||||
TF_FLAGEVENT_DEFENDED,
|
TF_FLAGEVENT_DEFENDED,
|
||||||
TF_FLAGEVENT_DROPPED
|
TF_FLAGEVENT_DROPPED,
|
||||||
|
TF_FLAGEVENT_RETURNED
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TFResourceType
|
enum TFResourceType
|
||||||
@@ -388,9 +418,44 @@ stock TF2_RemoveAllWeapons(client)
|
|||||||
* @param client Player's index.
|
* @param client Player's index.
|
||||||
* @return Player's condition bits
|
* @return Player's condition bits
|
||||||
*/
|
*/
|
||||||
|
#pragma deprecated Use TF2_IsPlayerInCondition instead.
|
||||||
stock TF2_GetPlayerConditionFlags(client)
|
stock TF2_GetPlayerConditionFlags(client)
|
||||||
{
|
{
|
||||||
return GetEntProp(client, Prop_Send, "m_nPlayerCond");
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -37,6 +37,6 @@
|
|||||||
|
|
||||||
#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */
|
#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */
|
||||||
#define SOURCEMOD_V_MINOR 3 /**< SourceMod Minor version */
|
#define SOURCEMOD_V_MINOR 3 /**< SourceMod Minor version */
|
||||||
#define SOURCEMOD_V_RELEASE 6 /**< SourceMod Release version */
|
#define SOURCEMOD_V_RELEASE 8 /**< SourceMod Release version */
|
||||||
|
|
||||||
#define SOURCEMOD_VERSION "1.3.6" /**< SourceMod version string (major.minor.release.build) */
|
#define SOURCEMOD_VERSION "1.3.8" /**< SourceMod version string (major.minor.release.build) */
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ public Action:Command_SetNextmap(client, args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ShowActivity(client, "%t", "Changed Next Map", map);
|
ShowActivity(client, "%t", "Changed Next Map", map);
|
||||||
LogMessage("\"%L\" changed nextmap to \"%s\"", client, map);
|
LogAction(client, -1, "\"%L\" changed nextmap to \"%s\"", client, map);
|
||||||
|
|
||||||
SetNextMap(map);
|
SetNextMap(map);
|
||||||
g_MapVoteCompleted = true;
|
g_MapVoteCompleted = true;
|
||||||
@@ -635,7 +635,7 @@ InitiateVote(MapChange:when, Handle:inputlist=INVALID_HANDLE)
|
|||||||
SetMenuExitButton(g_VoteMenu, false);
|
SetMenuExitButton(g_VoteMenu, false);
|
||||||
VoteMenuToAll(g_VoteMenu, voteDuration);
|
VoteMenuToAll(g_VoteMenu, voteDuration);
|
||||||
|
|
||||||
LogMessage("Voting for next map has started.");
|
LogAction(-1, -1, "Voting for next map has started.");
|
||||||
PrintToChatAll("[SM] %t", "Nextmap Voting Started");
|
PrintToChatAll("[SM] %t", "Nextmap Voting Started");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -696,7 +696,7 @@ public Handler_MapVoteFinished(Handle:menu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
PrintToChatAll("[SM] %t", "Current Map Extended", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
PrintToChatAll("[SM] %t", "Current Map Extended", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
||||||
LogMessage("Voting for next map has finished. The current map has been extended.");
|
LogAction(-1, -1, "Voting for next map has finished. The current map has been extended.");
|
||||||
|
|
||||||
// We extended, so we'll have to vote again.
|
// We extended, so we'll have to vote again.
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
@@ -707,7 +707,7 @@ public Handler_MapVoteFinished(Handle:menu,
|
|||||||
else if (strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
else if (strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
||||||
{
|
{
|
||||||
PrintToChatAll("[SM] %t", "Current Map Stays", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
PrintToChatAll("[SM] %t", "Current Map Stays", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
||||||
LogMessage("Voting for next map has finished. 'No Change' was the winner");
|
LogAction(-1, -1, "Voting for next map has finished. 'No Change' was the winner");
|
||||||
|
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
CreateNextVote();
|
CreateNextVote();
|
||||||
@@ -736,7 +736,7 @@ public Handler_MapVoteFinished(Handle:menu,
|
|||||||
g_MapVoteCompleted = true;
|
g_MapVoteCompleted = true;
|
||||||
|
|
||||||
PrintToChatAll("[SM] %t", "Nextmap Voting Finished", map, RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
PrintToChatAll("[SM] %t", "Nextmap Voting Finished", map, RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100), num_votes);
|
||||||
LogMessage("Voting for next map has finished. Nextmap: %s.", map);
|
LogAction(-1, -1, "Voting for next map has finished. Nextmap: %s.", map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -967,7 +967,7 @@ public Native_InitiateVote(Handle:plugin, numParams)
|
|||||||
new MapChange:when = MapChange:GetNativeCell(1);
|
new MapChange:when = MapChange:GetNativeCell(1);
|
||||||
new Handle:inputarray = Handle:GetNativeCell(2);
|
new Handle:inputarray = Handle:GetNativeCell(2);
|
||||||
|
|
||||||
LogMessage("Starting map vote because outside request");
|
LogAction(-1, -1, "Starting map vote because outside request");
|
||||||
InitiateVote(when, inputarray);
|
InitiateVote(when, inputarray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,13 +192,13 @@ public Action:Command_Nominate(client, args)
|
|||||||
{
|
{
|
||||||
if (!client)
|
if (!client)
|
||||||
{
|
{
|
||||||
return Plugin_Continue;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args == 0)
|
if (args == 0)
|
||||||
{
|
{
|
||||||
AttemptNominate(client);
|
AttemptNominate(client);
|
||||||
return Plugin_Continue;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
decl String:mapname[64];
|
decl String:mapname[64];
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public Action:Timer_RandomizeNextmap(Handle:timer)
|
|||||||
RemoveFromArray(g_OldMapList, 0);
|
RemoveFromArray(g_OldMapList, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogMessage("RandomCycle has chosen %s for the nextmap.", map);
|
LogAction(-1, -1, "RandomCycle has chosen %s for the nextmap.", map);
|
||||||
|
|
||||||
return Plugin_Stop;
|
return Plugin_Stop;
|
||||||
}
|
}
|
||||||
@@ -162,12 +162,12 @@ public Action:Command_RTV(client, args)
|
|||||||
{
|
{
|
||||||
if (!g_CanRTV || !client)
|
if (!g_CanRTV || !client)
|
||||||
{
|
{
|
||||||
return Plugin_Continue;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
AttemptRTV(client);
|
AttemptRTV(client);
|
||||||
|
|
||||||
return Plugin_Continue;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action:Command_Say(client, args)
|
public Action:Command_Say(client, args)
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
1.3.6
|
1.3.8
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <IShareSys.h>
|
#include <IShareSys.h>
|
||||||
|
#include <sp_vm_api.h>
|
||||||
|
|
||||||
#define SMINTERFACE_NINVOKE_NAME "INativeInterface"
|
#define SMINTERFACE_NINVOKE_NAME "INativeInterface"
|
||||||
#define SMINTERFACE_NINVOKE_VERSION 1
|
#define SMINTERFACE_NINVOKE_VERSION 1
|
||||||
@@ -65,7 +66,7 @@ namespace SourceMod
|
|||||||
* @param name Name of native.
|
* @param name Name of native.
|
||||||
* @return True if native was found, false otherwise.
|
* @return True if native was found, false otherwise.
|
||||||
*/
|
*/
|
||||||
virtual bool Start(IPluginContext *pContext, const char *name) = 0;
|
virtual bool Start(SourcePawn::IPluginContext *pContext, const char *name) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Invokes the native. The preparation state is cleared immediately, meaning that
|
* @brief Invokes the native. The preparation state is cleared immediately, meaning that
|
||||||
@@ -92,7 +93,7 @@ namespace SourceMod
|
|||||||
* @param bytes Number of bytes for memory (NINVOKE_DEFAULT_MEMORY recommended).
|
* @param bytes Number of bytes for memory (NINVOKE_DEFAULT_MEMORY recommended).
|
||||||
* @return New runtime, or NULL on failure.
|
* @return New runtime, or NULL on failure.
|
||||||
*/
|
*/
|
||||||
virtual IPluginRuntime *CreateRuntime(const char *name, size_t bytes) = 0;
|
virtual SourcePawn::IPluginRuntime *CreateRuntime(const char *name, size_t bytes) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates an object that can be used to invoke a single native code.
|
* @brief Creates an object that can be used to invoke a single native code.
|
||||||
|
|||||||
+4
-2
@@ -10,7 +10,7 @@ h
|
|||||||
i
|
i
|
||||||
D
|
D
|
||||||
S
|
S
|
||||||
!
|
!!
|
||||||
joys of buildbot, part 5: a watermelon's diatribes need not be cause for spilling the queen's tea
|
joys of buildbot, part 5: a watermelon's diatribes need not be cause for spilling the queen's tea
|
||||||
crab
|
crab
|
||||||
joys of buildbot, part 6: a merry metal matchturtle mocks mostly and mainly in Madrid.
|
joys of buildbot, part 6: a merry metal matchturtle mocks mostly and mainly in Madrid.
|
||||||
@@ -25,4 +25,6 @@ Ye who reads this line of text shall cease to exist.
|
|||||||
u
|
u
|
||||||
r
|
r
|
||||||
tsu
|
tsu
|
||||||
|
smalltsu
|
||||||
|
_
|
||||||
|
oh
|
||||||
|
|||||||
@@ -29,6 +29,11 @@
|
|||||||
#include "sc.h"
|
#include "sc.h"
|
||||||
#include "memfile.h"
|
#include "memfile.h"
|
||||||
|
|
||||||
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined DARWIN
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* pc_printf()
|
/* pc_printf()
|
||||||
* Called for general purpose "console" output. This function prints general
|
* Called for general purpose "console" output. This function prints general
|
||||||
* purpose messages; errors go through pc_error(). The function is modelled
|
* purpose messages; errors go through pc_error(). The function is modelled
|
||||||
@@ -100,6 +105,17 @@ static char *prefix[3]={ "error", "fatal error", "warning" };
|
|||||||
*/
|
*/
|
||||||
void *pc_opensrc(char *filename)
|
void *pc_opensrc(char *filename)
|
||||||
{
|
{
|
||||||
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined DARWIN
|
||||||
|
struct stat fileInfo;
|
||||||
|
if (stat(filename, &fileInfo) != 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (S_ISDIR(fileInfo.st_mode)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return fopen(filename,"rt");
|
return fopen(filename,"rt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -291,6 +291,10 @@
|
|||||||
RelativePath="..\sp_file.c"
|
RelativePath="..\sp_file.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sp_symhash.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
@@ -333,6 +337,10 @@
|
|||||||
RelativePath="..\..\..\public\sourcepawn\sp_file_headers.h"
|
RelativePath="..\..\..\public\sourcepawn\sp_file_headers.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sp_symhash.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\svn_version.h"
|
RelativePath="..\svn_version.h"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -290,6 +290,10 @@
|
|||||||
RelativePath="..\sp_file.c"
|
RelativePath="..\sp_file.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sp_symhash.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
@@ -332,6 +336,10 @@
|
|||||||
RelativePath="..\..\..\public\sourcepawn\sp_file_headers.h"
|
RelativePath="..\..\..\public\sourcepawn\sp_file_headers.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sp_symhash.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\svn_version.h"
|
RelativePath="..\svn_version.h"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -268,27 +268,9 @@ static void doinclude(int silent)
|
|||||||
if (c!='\0')
|
if (c!='\0')
|
||||||
check_empty(lptr+1); /* verify that the rest of the line is whitespace */
|
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);
|
result=plungefile(name,(c!='>'),TRUE);
|
||||||
if (result)
|
if (!result && !silent)
|
||||||
add_constant(symname,1,sGLOBAL,0);
|
|
||||||
else if (!silent)
|
|
||||||
error(120,name); /* cannot read from ... (fatal error) */
|
error(120,name); /* cannot read from ... (fatal error) */
|
||||||
} /* if */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* readline
|
/* readline
|
||||||
|
|||||||
@@ -10,13 +10,8 @@ require 'helpers.pm';
|
|||||||
chdir('..');
|
chdir('..');
|
||||||
chdir('..');
|
chdir('..');
|
||||||
|
|
||||||
our $SSH = 'ssh -i ../../smpvkey';
|
|
||||||
|
|
||||||
open(PDBLOG, '../OUTPUT/pdblog.txt') or die "Could not open pdblog.txt: $!\n";
|
open(PDBLOG, '../OUTPUT/pdblog.txt') or die "Could not open pdblog.txt: $!\n";
|
||||||
|
|
||||||
#Sync us up with the main symbol store
|
|
||||||
rsync('[email protected]:~/public_html/symbols/', '..\\..\\symstore');
|
|
||||||
|
|
||||||
#Get version info
|
#Get version info
|
||||||
my ($version);
|
my ($version);
|
||||||
$version = Build::ProductVersion(Build::PathFormat('product.version'));
|
$version = Build::ProductVersion(Build::PathFormat('product.version'));
|
||||||
@@ -41,14 +36,14 @@ while (<PDBLOG>)
|
|||||||
$line = $_;
|
$line = $_;
|
||||||
$line =~ s/\.pdb/\*/;
|
$line =~ s/\.pdb/\*/;
|
||||||
chomp $line;
|
chomp $line;
|
||||||
Build::Command("symstore add /r /f \"..\\OUTPUT\\$line\" /s ..\\..\\symstore /t \"SourceMod\" /v \"$version\" /c \"$build_type\"");
|
Build::Command("symstore add /r /f \"..\\OUTPUT\\$line\" /s \"S:\\sourcemod\" /t \"SourceMod\" /v \"$version\" /c \"$build_type\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
close(PDBLOG);
|
close(PDBLOG);
|
||||||
|
|
||||||
#Lowercase DLLs. Sigh.
|
#Lowercase DLLs. Sigh.
|
||||||
my (@files);
|
my (@files);
|
||||||
opendir(DIR, "..\\..\\symstore");
|
opendir(DIR, "S:\\sourcemod");
|
||||||
@files = readdir(DIR);
|
@files = readdir(DIR);
|
||||||
closedir(DIR);
|
closedir(DIR);
|
||||||
|
|
||||||
@@ -57,23 +52,14 @@ for ($i = 0; $i <= $#files; $i++)
|
|||||||
{
|
{
|
||||||
$file = $files[$i];
|
$file = $files[$i];
|
||||||
next unless ($file =~ /\.dll$/);
|
next unless ($file =~ /\.dll$/);
|
||||||
next unless (-d "..\\..\\symstore\\$file");
|
next unless (-d "S:\\sourcemod\\$file");
|
||||||
opendir(DIR, "..\\..\\symstore\\$file");
|
opendir(DIR, "S:\\sourcemod\\$file");
|
||||||
@subdirs = readdir(DIR);
|
@subdirs = readdir(DIR);
|
||||||
closedir(DIR);
|
closedir(DIR);
|
||||||
for ($j = 0; $j <= $#subdirs; $j++)
|
for ($j = 0; $j <= $#subdirs; $j++)
|
||||||
{
|
{
|
||||||
next unless ($subdirs[$j] =~ /[A-Z]/);
|
next unless ($subdirs[$j] =~ /[A-Z]/);
|
||||||
Build::Command("rename ..\\..\\symstore\\$file\\" . $subdirs[$j] . " " . lc($subdirs[$j]));
|
Build::Command("rename S:\\sourcemod\\$file\\" . $subdirs[$j] . " " . lc($subdirs[$j]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#Now that we're done, rsync back.
|
|
||||||
rsync('../../symstore/', '[email protected]:~/public_html/symbols');
|
|
||||||
|
|
||||||
sub rsync
|
|
||||||
{
|
|
||||||
my ($from, $to) = (@_);
|
|
||||||
|
|
||||||
Build::Command('rsync -av --delete -e="' . $SSH . '" ' . $from . ' ' . $to);
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user