Compare commits
110
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ad1cb0b8c | ||
|
|
32f2680181 | ||
|
|
f7a8e4ceb1 | ||
|
|
415df6545b | ||
|
|
e216bf49d9 | ||
|
|
77737d319f | ||
|
|
13e620ec81 | ||
|
|
b383d8c89e | ||
|
|
227a604ab1 | ||
|
|
f153937038 | ||
|
|
3d1fa83197 | ||
|
|
0a4a60fe08 | ||
|
|
6c0325d7d8 | ||
|
|
55058ab0c7 | ||
|
|
1cf0b2c35b | ||
|
|
48bf766075 | ||
|
|
e04d7f6b0c | ||
|
|
505687f748 | ||
|
|
d2cfd39f80 | ||
|
|
a628f370e4 | ||
|
|
78567bda2f | ||
|
|
8cb946cf59 | ||
|
|
c3065f7535 | ||
|
|
d56da0c3da | ||
|
|
3e244fcab2 | ||
|
|
c5e7e1fa5d | ||
|
|
aadf4f137b | ||
|
|
eb6296b0c8 | ||
|
|
64e0403cd5 | ||
|
|
68eeff311b | ||
|
|
05fa9268a3 | ||
|
|
05044032da | ||
|
|
abf0a4f508 | ||
|
|
4a98a25b75 | ||
|
|
eec65697a7 | ||
|
|
64d2ad9679 | ||
|
|
58d6a6793f | ||
|
|
b2cc0869a5 | ||
|
|
950300dffe | ||
|
|
1eaa48f978 | ||
|
|
4fe1c93e68 | ||
|
|
6bdb12f4bb | ||
|
|
c5cb4834f4 | ||
|
|
0bd4474729 | ||
|
|
dabf9f3810 | ||
|
|
927e8b0ec9 | ||
|
|
f47fd11453 | ||
|
|
96f8590fda | ||
|
|
b7cc3b7670 | ||
|
|
7d524e4179 | ||
|
|
485e56906a | ||
|
|
611cf15433 | ||
|
|
443f5b16e3 | ||
|
|
a465569b22 | ||
|
|
cc207eae51 | ||
|
|
1a21832cbb | ||
|
|
00b81f343a | ||
|
|
b7ae818e7c | ||
|
|
75e673d6ff | ||
|
|
b7edc558b3 | ||
|
|
40046d8248 | ||
|
|
b51b34fbf4 | ||
|
|
e6f854b760 | ||
|
|
4d46aa34e9 | ||
|
|
d0182a01ac | ||
|
|
57d5a67a95 | ||
|
|
993b3f62e4 | ||
|
|
a82c86a7b6 | ||
|
|
bbb73091ed | ||
|
|
7e5e57cad1 | ||
|
|
7849f4df20 | ||
|
|
73b77549cc | ||
|
|
2341a8e756 | ||
|
|
73888b137d | ||
|
|
aff4431eea | ||
|
|
be8146364f | ||
|
|
b1b2da3cb8 | ||
|
|
f1c1d305d8 | ||
|
|
a2470215ed | ||
|
|
bfb49a3c1b | ||
|
|
61121914bc | ||
|
|
b75a4d07be | ||
|
|
e956248f29 | ||
|
|
c434cd646a | ||
|
|
0da38e0f04 | ||
|
|
c437c6e01e | ||
|
|
d0cab7b717 | ||
|
|
f58728c0a8 | ||
|
|
83682230c0 | ||
|
|
888a1432f2 | ||
|
|
a0833bfd10 | ||
|
|
2c74333d47 | ||
|
|
d52cf9bcc3 | ||
|
|
ba3ff06236 | ||
|
|
228029b20f | ||
|
|
6e542f51f0 | ||
|
|
54754f9e83 | ||
|
|
0b731c9bc0 | ||
|
|
37d72420e4 | ||
|
|
064f57e321 | ||
|
|
bcb9bc988f | ||
|
|
1f071f7c80 | ||
|
|
52fdc87325 | ||
|
|
aa5f1c4f03 | ||
|
|
adbd79633b | ||
|
|
1e1ebc981a | ||
|
|
44065ac939 | ||
|
|
3ecd914647 | ||
|
|
54b49dafbf | ||
|
|
23c2f9b54e |
+22
-7
@@ -1,14 +1,16 @@
|
|||||||
We now use svn:keywords "Id" on all .c/.cpp/.h/.sp/.inc files. Please make sure your client is configured properly.
|
We now use svn:keywords "Id" on all .c/.cpp/.h/.inc/.sp/ files.
|
||||||
|
Please make sure your client is configured properly.
|
||||||
|
|
||||||
WINDOWS:
|
WINDOWS:
|
||||||
Open your Application Data folder.
|
- Open your Application Data directory.
|
||||||
Windows XP/2000: C:\Documents and Settings\<user>\Application Data
|
Windows XP/2000: C:\Documents and Settings\<user>\Application Data
|
||||||
Windows Vista: C:\Users\<user>\AppData\Roaming
|
Windows Vista: C:\Users\<user>\AppData\Roaming
|
||||||
|
|
||||||
Now go to Subversion. Open the "config" file with a text editor.
|
- Now go to the Subversion directory.
|
||||||
|
- Open the "config" file with a text editor.
|
||||||
|
|
||||||
LINUX:
|
LINUX:
|
||||||
Open ~/.subversion/config with your favorite text editor.
|
- Open ~/.subversion/config with your favorite text editor.
|
||||||
|
|
||||||
Under [miscellany], uncomment this line:
|
Under [miscellany], uncomment this line:
|
||||||
# enable-auto-props = yes
|
# enable-auto-props = yes
|
||||||
@@ -17,5 +19,18 @@ Under [auto-props], add these lines:
|
|||||||
*.c = svn:keywords=Id
|
*.c = svn:keywords=Id
|
||||||
*.cpp = svn:keywords=Id
|
*.cpp = svn:keywords=Id
|
||||||
*.h = svn:keywords=Id
|
*.h = svn:keywords=Id
|
||||||
*.sp = svn:keywords=Id
|
|
||||||
*.inc = svn:keywords=Id
|
*.inc = svn:keywords=Id
|
||||||
|
*.sp = svn:keywords=Id
|
||||||
|
|
||||||
|
|
||||||
|
If you find a file with one of the above extensions that does not have the svn:keywords property...
|
||||||
|
|
||||||
|
TORTOISE SVN:
|
||||||
|
- Right click on the file(s) that do not have the property.
|
||||||
|
- In the context menu that appears, select TortoiseSVN -> Properties.
|
||||||
|
- A properties window should appear. Click the Add button.
|
||||||
|
- Select "svn:keywords" from the "Property name" combo box and type "Id" in the "Property value" text area.
|
||||||
|
- Click OK on both windows and commit the change(s).
|
||||||
|
|
||||||
|
CLI SVN CLIENT:
|
||||||
|
- Execute the following command: svn propset svn:keywords Id <files>
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// Custom admin menu commands.
|
||||||
|
// For more information:
|
||||||
|
//
|
||||||
|
// http://wiki.alliedmods.net/Custom_Admin_Menu_%28SourceMod%29
|
||||||
|
//
|
||||||
|
// Note: This file must be in Valve KeyValues format (no multiline comments)
|
||||||
|
//
|
||||||
|
|
||||||
|
"Commands"
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/* Add group options to be added to 'group' or 'groupplayer' type submenus
|
||||||
|
* The left side is the name that will show in the menu, right is the command that will be fired
|
||||||
|
*
|
||||||
|
* For more information: http://wiki.alliedmods.net/Custom_Admin_Menu_%28SourceMod%29
|
||||||
|
*/
|
||||||
|
|
||||||
|
Groups
|
||||||
|
{
|
||||||
|
"All" "@all"
|
||||||
|
"Bots" "@bots"
|
||||||
|
"Alive" "@alive"
|
||||||
|
"Dead" "@dead"
|
||||||
|
"Humans" "@humans"
|
||||||
|
"Current aim" "@aim"
|
||||||
|
|
||||||
|
/* You can enable these if you are using Counter-Strike Source and running the cstrike extension */
|
||||||
|
// "Terrorists" "@t"
|
||||||
|
// "Counter-Terrorists" "@ct"
|
||||||
|
|
||||||
|
}
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"target" "default"
|
"target" "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For the "randomcycle" plugin */
|
/* For the "rockthevote" plugin */
|
||||||
"rockthevote"
|
"rockthevote"
|
||||||
{
|
{
|
||||||
"target" "default"
|
"target" "default"
|
||||||
|
|||||||
+355
-4
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -41,12 +41,14 @@
|
|||||||
#include "sourcemod.h"
|
#include "sourcemod.h"
|
||||||
#include "sm_stringutil.h"
|
#include "sm_stringutil.h"
|
||||||
#include "sourcemm_api.h"
|
#include "sourcemm_api.h"
|
||||||
|
#include "sm_srvcmds.h"
|
||||||
|
|
||||||
#define LEVEL_STATE_NONE 0
|
#define LEVEL_STATE_NONE 0
|
||||||
#define LEVEL_STATE_LEVELS 1
|
#define LEVEL_STATE_LEVELS 1
|
||||||
#define LEVEL_STATE_FLAGS 2
|
#define LEVEL_STATE_FLAGS 2
|
||||||
|
|
||||||
AdminCache g_Admins;
|
AdminCache g_Admins;
|
||||||
|
char g_ReverseFlags[26];
|
||||||
AdminFlag g_FlagLetters[26];
|
AdminFlag g_FlagLetters[26];
|
||||||
bool g_FlagSet[26];
|
bool g_FlagSet[26];
|
||||||
|
|
||||||
@@ -299,8 +301,23 @@ void AdminCache::OnSourceModAllInitialized()
|
|||||||
|
|
||||||
void AdminCache::OnSourceModLevelChange(const char *mapName)
|
void AdminCache::OnSourceModLevelChange(const char *mapName)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
AdminFlag flag;
|
||||||
|
|
||||||
/* For now, we only read these once per level. */
|
/* For now, we only read these once per level. */
|
||||||
s_FlagReader.LoadLevels();
|
s_FlagReader.LoadLevels();
|
||||||
|
|
||||||
|
for (i = 0; i < 26; i++)
|
||||||
|
{
|
||||||
|
if (FindFlag('a' + i, &flag))
|
||||||
|
{
|
||||||
|
g_ReverseFlags[flag] = 'a' + i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_ReverseFlags[flag] = '?';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminCache::OnSourceModShutdown()
|
void AdminCache::OnSourceModShutdown()
|
||||||
@@ -434,7 +451,9 @@ AdminId AdminCache::CreateAdmin(const char *name)
|
|||||||
assert(pUser->magic == USR_MAGIC_UNSET);
|
assert(pUser->magic == USR_MAGIC_UNSET);
|
||||||
id = m_FreeUserList;
|
id = m_FreeUserList;
|
||||||
m_FreeUserList = pUser->next_user;
|
m_FreeUserList = pUser->next_user;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
id = m_pMemory->CreateMem(sizeof(AdminUser), (void **)&pUser);
|
id = m_pMemory->CreateMem(sizeof(AdminUser), (void **)&pUser);
|
||||||
pUser->grp_size = 0;
|
pUser->grp_size = 0;
|
||||||
pUser->grp_table = -1;
|
pUser->grp_table = -1;
|
||||||
@@ -454,19 +473,28 @@ AdminId AdminCache::CreateAdmin(const char *name)
|
|||||||
{
|
{
|
||||||
m_FirstUser = id;
|
m_FirstUser = id;
|
||||||
m_LastUser = id;
|
m_LastUser = id;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
AdminUser *pPrev = (AdminUser *)m_pMemory->GetAddress(m_LastUser);
|
AdminUser *pPrev = (AdminUser *)m_pMemory->GetAddress(m_LastUser);
|
||||||
pPrev->next_user = id;
|
pPrev->next_user = id;
|
||||||
pUser->prev_user = m_LastUser;
|
pUser->prev_user = m_LastUser;
|
||||||
m_LastUser = id;
|
m_LastUser = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Since we always append to the tail, we should invalidate their next */
|
||||||
|
pUser->next_user = -1;
|
||||||
|
|
||||||
if (name && name[0] != '\0')
|
if (name && name[0] != '\0')
|
||||||
{
|
{
|
||||||
int nameidx = m_pStrings->AddString(name);
|
int nameidx = m_pStrings->AddString(name);
|
||||||
pUser = (AdminUser *)m_pMemory->GetAddress(id);
|
pUser = (AdminUser *)m_pMemory->GetAddress(id);
|
||||||
pUser->nameidx = nameidx;
|
pUser->nameidx = nameidx;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pUser->nameidx = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -1412,6 +1440,12 @@ void AdminCache::SetAdminPassword(AdminId id, const char *password)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (password[0] == '\0')
|
||||||
|
{
|
||||||
|
pUser->password = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int i_password = m_pStrings->AddString(password);
|
int i_password = m_pStrings->AddString(password);
|
||||||
pUser = (AdminUser *)m_pMemory->GetAddress(id);
|
pUser = (AdminUser *)m_pMemory->GetAddress(id);
|
||||||
pUser->password = i_password;
|
pUser->password = i_password;
|
||||||
@@ -1587,7 +1621,9 @@ bool AdminCache::CanAdminTarget(AdminId id, AdminId target)
|
|||||||
|
|
||||||
bool AdminCache::FindFlag(char c, AdminFlag *pAdmFlag)
|
bool AdminCache::FindFlag(char c, AdminFlag *pAdmFlag)
|
||||||
{
|
{
|
||||||
if (c < 'a' || c > 'z')
|
if (c < 'a'
|
||||||
|
|| c > 'z'
|
||||||
|
|| !g_FlagSet[(unsigned)c - (unsigned)'a'])
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1600,6 +1636,21 @@ bool AdminCache::FindFlag(char c, AdminFlag *pAdmFlag)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AdminCache::FindFlagChar(AdminFlag flag, char *c)
|
||||||
|
{
|
||||||
|
if (!g_FlagSet[flag])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c)
|
||||||
|
{
|
||||||
|
*c = g_ReverseFlags[flag];
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
FlagBits AdminCache::ReadFlagString(const char *flags, const char **end)
|
FlagBits AdminCache::ReadFlagString(const char *flags, const char **end)
|
||||||
{
|
{
|
||||||
FlagBits bits = 0;
|
FlagBits bits = 0;
|
||||||
@@ -1730,3 +1781,303 @@ bool AdminCache::CheckAccess(int client, const char *cmd, FlagBits flags, bool o
|
|||||||
|
|
||||||
return g_ConCmds.CheckCommandAccess(client, cmd, bits) ? 1 : 0;
|
return g_ConCmds.CheckCommandAccess(client, cmd, bits) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void iterator_glob_basic_override(Trie *pTrie, const char *key, void **value, void *data)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int flags;
|
||||||
|
char flagstr[64];
|
||||||
|
|
||||||
|
fp = (FILE *)data;
|
||||||
|
flags = (int)*value;
|
||||||
|
g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t\"%s\"\t\t\"%s\"\n", key, flagstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iterator_glob_grp_override(Trie *pTrie, const char *key, void **value, void *data)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int flags;
|
||||||
|
char flagstr[64];
|
||||||
|
|
||||||
|
fp = (FILE *)data;
|
||||||
|
flags = (int)*value;
|
||||||
|
g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t\"@%s\"\t\t\"%s\"\n", key, flagstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iterator_group_basic_override(Trie *pTrie, const char *key, void **value, void *data)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int flags;
|
||||||
|
char flagstr[64];
|
||||||
|
|
||||||
|
fp = (FILE *)data;
|
||||||
|
flags = (int)*value;
|
||||||
|
g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t\t\t\"%s\"\t\t\"%s\"\n", key, flagstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iterator_group_grp_override(Trie *pTrie, const char *key, void **value, void *data)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int flags;
|
||||||
|
char flagstr[64];
|
||||||
|
|
||||||
|
fp = (FILE *)data;
|
||||||
|
flags = (int)*value;
|
||||||
|
g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t\t\t\"@%s\"\t\t\"%s\"\n", key, flagstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdminCache::DumpCache(FILE *fp)
|
||||||
|
{
|
||||||
|
int *itable;
|
||||||
|
AdminId aid;
|
||||||
|
GroupId gid;
|
||||||
|
char flagstr[64];
|
||||||
|
unsigned int num;
|
||||||
|
AdminUser *pAdmin;
|
||||||
|
AdminGroup *pGroup;
|
||||||
|
char name_buffer[512];
|
||||||
|
|
||||||
|
fprintf(fp, "\"Groups\"\n{\n");
|
||||||
|
|
||||||
|
num = 0;
|
||||||
|
gid = m_FirstGroup;
|
||||||
|
while (gid != INVALID_GROUP_ID
|
||||||
|
&& (pGroup = GetGroup(gid)) != NULL)
|
||||||
|
{
|
||||||
|
num++;
|
||||||
|
FillFlagString(pGroup->addflags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t/* num = %d, gid = 0x%X */\n", num, gid);
|
||||||
|
fprintf(fp, "\t\"%s\"\n\t{\n", GetString(pGroup->nameidx));
|
||||||
|
fprintf(fp, "\t\t\"flags\"\t\t\t\"%s\"\n", flagstr);
|
||||||
|
fprintf(fp, "\t\t\"immunity\"\t\t\"%d\"\n", pGroup->immunity_level);
|
||||||
|
|
||||||
|
if (pGroup->immune_table != -1
|
||||||
|
&& (itable = (int *)m_pMemory->GetAddress(pGroup->immune_table)) != NULL)
|
||||||
|
{
|
||||||
|
AdminGroup *pAltGroup;
|
||||||
|
const char *gname, *mod;
|
||||||
|
|
||||||
|
for (int i = 1; i <= itable[0]; i++)
|
||||||
|
{
|
||||||
|
if ((pAltGroup = GetGroup(itable[i])) == NULL)
|
||||||
|
{
|
||||||
|
/* Assume the rest of the table is corrupt */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gname = GetString(pAltGroup->nameidx);
|
||||||
|
if (atoi(gname) != 0)
|
||||||
|
{
|
||||||
|
mod = "@";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mod = "";
|
||||||
|
}
|
||||||
|
fprintf(fp, "\t\t\"immunity\"\t\t\"%s%s\"\n", mod, gname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "\n\t\t\"Overrides\"\n\t\t{\n");
|
||||||
|
if (pGroup->pCmdGrpTable != NULL)
|
||||||
|
{
|
||||||
|
sm_trie_bad_iterator(pGroup->pCmdGrpTable,
|
||||||
|
name_buffer,
|
||||||
|
sizeof(name_buffer),
|
||||||
|
iterator_group_grp_override,
|
||||||
|
fp);
|
||||||
|
}
|
||||||
|
if (pGroup->pCmdTable != NULL)
|
||||||
|
{
|
||||||
|
sm_trie_bad_iterator(pGroup->pCmdTable,
|
||||||
|
name_buffer,
|
||||||
|
sizeof(name_buffer),
|
||||||
|
iterator_group_basic_override,
|
||||||
|
fp);
|
||||||
|
}
|
||||||
|
fprintf(fp, "\t\t}\n");
|
||||||
|
|
||||||
|
fprintf(fp, "\t}\n");
|
||||||
|
|
||||||
|
if ((gid = pGroup->next_grp) != INVALID_GROUP_ID)
|
||||||
|
{
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "}\n\n");
|
||||||
|
fprintf(fp, "\"Admins\"\n{\n");
|
||||||
|
|
||||||
|
num = 0;
|
||||||
|
aid = m_FirstUser;
|
||||||
|
while (aid != INVALID_ADMIN_ID
|
||||||
|
&& (pAdmin = GetUser(aid)) != NULL)
|
||||||
|
{
|
||||||
|
num++;
|
||||||
|
FillFlagString(pAdmin->flags, flagstr, sizeof(flagstr));
|
||||||
|
|
||||||
|
fprintf(fp, "\t/* num = %d, aid = 0x%X, serialno = 0x%X*/\n", num, aid, pAdmin->serialchange);
|
||||||
|
|
||||||
|
if (pAdmin->nameidx != -1)
|
||||||
|
{
|
||||||
|
fprintf(fp, "\t\"%s\"\n\t{\n", GetString(pAdmin->nameidx));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(fp, "\t\"\"\n\t{\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pAdmin->auth.identidx != -1)
|
||||||
|
{
|
||||||
|
fprintf(fp, "\t\t\"auth\"\t\t\t\"%s\"\n", GetMethodName(pAdmin->auth.index));
|
||||||
|
fprintf(fp, "\t\t\"identity\"\t\t\"%s\"\n", GetString(pAdmin->auth.identidx));
|
||||||
|
}
|
||||||
|
if (pAdmin->password != -1)
|
||||||
|
{
|
||||||
|
fprintf(fp, "\t\t\"password\"\t\t\"%s\"\n", GetString(pAdmin->password));
|
||||||
|
}
|
||||||
|
fprintf(fp, "\t\t\"flags\"\t\t\t\"%s\"\n", flagstr);
|
||||||
|
fprintf(fp, "\t\t\"immunity\"\t\t\"%d\"\n", pAdmin->immunity_level);
|
||||||
|
|
||||||
|
if (pAdmin->grp_count != 0
|
||||||
|
&& pAdmin->grp_table != -1
|
||||||
|
&& (itable = (int *)m_pMemory->GetAddress(pAdmin->grp_table)) != NULL)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < pAdmin->grp_count; i++)
|
||||||
|
{
|
||||||
|
if ((pGroup = GetGroup(itable[i])) == NULL)
|
||||||
|
{
|
||||||
|
/* Assume the rest of the table is corrupt */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf(fp, "\t\t\"group\"\t\t\t\"%s\"\n", GetString(pGroup->nameidx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "\t}\n");
|
||||||
|
|
||||||
|
if ((aid = pAdmin->next_user) != INVALID_ADMIN_ID)
|
||||||
|
{
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "}\n\n");
|
||||||
|
|
||||||
|
fprintf(fp, "\"Overrides\"\n{\n");
|
||||||
|
if (m_pCmdGrpOverrides != NULL)
|
||||||
|
{
|
||||||
|
sm_trie_bad_iterator(m_pCmdGrpOverrides,
|
||||||
|
name_buffer,
|
||||||
|
sizeof(name_buffer),
|
||||||
|
iterator_glob_grp_override,
|
||||||
|
fp);
|
||||||
|
}
|
||||||
|
if (m_pCmdOverrides != NULL)
|
||||||
|
{
|
||||||
|
sm_trie_bad_iterator(m_pCmdOverrides,
|
||||||
|
name_buffer,
|
||||||
|
sizeof(name_buffer),
|
||||||
|
iterator_glob_basic_override,
|
||||||
|
fp);
|
||||||
|
}
|
||||||
|
fprintf(fp, "}\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
AdminGroup *AdminCache::GetGroup(GroupId gid)
|
||||||
|
{
|
||||||
|
AdminGroup *pGroup;
|
||||||
|
|
||||||
|
pGroup = (AdminGroup *)m_pMemory->GetAddress(gid);
|
||||||
|
if (!pGroup || pGroup->magic != GRP_MAGIC_SET)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
AdminUser *AdminCache::GetUser(AdminId aid)
|
||||||
|
{
|
||||||
|
AdminUser *pAdmin;
|
||||||
|
|
||||||
|
pAdmin = (AdminUser *)m_pMemory->GetAddress(aid);
|
||||||
|
if (!pAdmin || pAdmin->magic != USR_MAGIC_SET)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pAdmin;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *AdminCache::GetMethodName(unsigned int index)
|
||||||
|
{
|
||||||
|
List<AuthMethod>::iterator iter;
|
||||||
|
for (iter=m_AuthMethods.begin();
|
||||||
|
iter!=m_AuthMethods.end();
|
||||||
|
iter++)
|
||||||
|
{
|
||||||
|
if (index-- == 0)
|
||||||
|
{
|
||||||
|
return (*iter).name.c_str();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *AdminCache::GetString(int idx)
|
||||||
|
{
|
||||||
|
return m_pStrings->GetString(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t AdminCache::FillFlagString(FlagBits bits, char *buffer, size_t maxlen)
|
||||||
|
{
|
||||||
|
size_t pos;
|
||||||
|
unsigned int i, num_flags;
|
||||||
|
AdminFlag flags[AdminFlags_TOTAL];
|
||||||
|
|
||||||
|
num_flags = FlagBitsToArray(bits, flags, AdminFlags_TOTAL);
|
||||||
|
|
||||||
|
pos = 0;
|
||||||
|
for (i = 0; pos < maxlen && i < num_flags; i++)
|
||||||
|
{
|
||||||
|
if (FindFlagChar(flags[i], &buffer[pos]))
|
||||||
|
{
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer[pos] = '\0';
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
CON_COMMAND(sm_dump_admcache, "Dumps the admin cache for debugging")
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char buffer[PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
|
g_SourceMod.BuildPath(Path_SM, buffer, sizeof(buffer), "data/admin_cache_dump.txt");
|
||||||
|
|
||||||
|
if ((fp = fopen(buffer, "wt")) == NULL)
|
||||||
|
{
|
||||||
|
g_RootMenu.ConsolePrint("Could not open file for writing: %s", buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_Admins.DumpCache(fp);
|
||||||
|
|
||||||
|
g_RootMenu.ConsolePrint("Admin cache dumped to: %s", buffer);
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|||||||
+8
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -153,6 +153,7 @@ public: //IAdminSystem
|
|||||||
bool FindFlag(const char *str, AdminFlag *pFlag);
|
bool FindFlag(const char *str, AdminFlag *pFlag);
|
||||||
bool FindFlag(char c, AdminFlag *pAdmFlag);
|
bool FindFlag(char c, AdminFlag *pAdmFlag);
|
||||||
FlagBits ReadFlagString(const char *flags, const char **end);
|
FlagBits ReadFlagString(const char *flags, const char **end);
|
||||||
|
size_t FillFlagString(FlagBits bits, char *buffer, size_t maxlen);
|
||||||
unsigned int GetAdminSerialChange(AdminId id);
|
unsigned int GetAdminSerialChange(AdminId id);
|
||||||
bool CanAdminUseCommand(int client, const char *cmd);
|
bool CanAdminUseCommand(int client, const char *cmd);
|
||||||
const char *GetGroupName(GroupId gid);
|
const char *GetGroupName(GroupId gid);
|
||||||
@@ -164,8 +165,13 @@ public: //IAdminSystem
|
|||||||
const char *cmd,
|
const char *cmd,
|
||||||
FlagBits flags,
|
FlagBits flags,
|
||||||
bool override_only);
|
bool override_only);
|
||||||
|
bool FindFlagChar(AdminFlag flag, char *c);
|
||||||
public:
|
public:
|
||||||
bool IsValidAdmin(AdminId id);
|
bool IsValidAdmin(AdminId id);
|
||||||
|
void DumpCache(FILE *fp);
|
||||||
|
AdminGroup *GetGroup(GroupId gid);
|
||||||
|
AdminUser *GetUser(AdminId id);
|
||||||
|
const char *GetString(int idx);
|
||||||
private:
|
private:
|
||||||
void _UnsetCommandOverride(const char *cmd);
|
void _UnsetCommandOverride(const char *cmd);
|
||||||
void _UnsetCommandGroupOverride(const char *group);
|
void _UnsetCommandGroupOverride(const char *group);
|
||||||
@@ -174,6 +180,7 @@ private:
|
|||||||
void DumpCommandOverrideCache(OverrideType type);
|
void DumpCommandOverrideCache(OverrideType type);
|
||||||
Trie *GetMethodByIndex(unsigned int index);
|
Trie *GetMethodByIndex(unsigned int index);
|
||||||
bool GetMethodIndex(const char *name, unsigned int *_index);
|
bool GetMethodIndex(const char *name, unsigned int *_index);
|
||||||
|
const char *GetMethodName(unsigned int index);
|
||||||
void NameFlag(const char *str, AdminFlag flag);
|
void NameFlag(const char *str, AdminFlag flag);
|
||||||
public:
|
public:
|
||||||
BaseStringTable *m_pStrings;
|
BaseStringTable *m_pStrings;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -379,14 +379,14 @@ void ConCmdManager::InternalDispatch(const CCommand &command)
|
|||||||
/* On a listen server, sometimes the server host's client index can be set as 0.
|
/* On a listen server, sometimes the server host's client index can be set as 0.
|
||||||
* So index 1 is passed to the command callback to correct this potential problem.
|
* So index 1 is passed to the command callback to correct this potential problem.
|
||||||
*/
|
*/
|
||||||
if (client == 0 && !engine->IsDedicatedServer())
|
if (!engine->IsDedicatedServer())
|
||||||
{
|
{
|
||||||
pHook->pf->PushCell(1);
|
client = g_Players.ListenClient();
|
||||||
} else {
|
|
||||||
pHook->pf->PushCell(client);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pHook->pf->PushCell(client);
|
||||||
pHook->pf->PushCell(args);
|
pHook->pf->PushCell(args);
|
||||||
|
|
||||||
if (pHook->pf->Execute(&tempres) == SP_ERROR_NONE)
|
if (pHook->pf->Execute(&tempres) == SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
if (tempres > result)
|
if (tempres > result)
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ ConVar sm_corecfgfile("sm_corecfgfile", "addons/sourcemod/configs/core.cfg", 0,
|
|||||||
|
|
||||||
IForward *g_pOnServerCfg = NULL;
|
IForward *g_pOnServerCfg = NULL;
|
||||||
IForward *g_pOnConfigsExecuted = NULL;
|
IForward *g_pOnConfigsExecuted = NULL;
|
||||||
|
IForward *g_pOnAutoConfigsBuffered = NULL;
|
||||||
CoreConfig g_CoreConfig;
|
CoreConfig g_CoreConfig;
|
||||||
bool g_bConfigsExecd = false;
|
bool g_bConfigsExecd = false;
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ void CoreConfig::OnSourceModAllInitialized()
|
|||||||
g_RootMenu.AddRootConsoleCommand("config", "Set core configuration options", this);
|
g_RootMenu.AddRootConsoleCommand("config", "Set core configuration options", this);
|
||||||
g_pOnServerCfg = g_Forwards.CreateForward("OnServerCfg", ET_Ignore, 0, NULL);
|
g_pOnServerCfg = g_Forwards.CreateForward("OnServerCfg", ET_Ignore, 0, NULL);
|
||||||
g_pOnConfigsExecuted = g_Forwards.CreateForward("OnConfigsExecuted", ET_Ignore, 0, NULL);
|
g_pOnConfigsExecuted = g_Forwards.CreateForward("OnConfigsExecuted", ET_Ignore, 0, NULL);
|
||||||
|
g_pOnAutoConfigsBuffered = g_Forwards.CreateForward("OnAutoConfigsBuffered", ET_Ignore, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreConfig::OnSourceModShutdown()
|
void CoreConfig::OnSourceModShutdown()
|
||||||
@@ -64,6 +66,7 @@ void CoreConfig::OnSourceModShutdown()
|
|||||||
g_RootMenu.RemoveRootConsoleCommand("config", this);
|
g_RootMenu.RemoveRootConsoleCommand("config", this);
|
||||||
g_Forwards.ReleaseForward(g_pOnServerCfg);
|
g_Forwards.ReleaseForward(g_pOnServerCfg);
|
||||||
g_Forwards.ReleaseForward(g_pOnConfigsExecuted);
|
g_Forwards.ReleaseForward(g_pOnConfigsExecuted);
|
||||||
|
g_Forwards.ReleaseForward(g_pOnAutoConfigsBuffered);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreConfig::OnSourceModLevelChange(const char *mapName)
|
void CoreConfig::OnSourceModLevelChange(const char *mapName)
|
||||||
@@ -403,6 +406,8 @@ void SM_ExecuteAllConfigs()
|
|||||||
}
|
}
|
||||||
iter->Release();
|
iter->Release();
|
||||||
|
|
||||||
|
g_pOnAutoConfigsBuffered->Execute(NULL);
|
||||||
|
|
||||||
engine->ServerCommand("sm internal 1\n");
|
engine->ServerCommand("sm internal 1\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+110
-56
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,12 +29,74 @@
|
|||||||
* Version: $Id$
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if 0
|
|
||||||
#include "sm_globals.h"
|
#include "sm_globals.h"
|
||||||
#include "sourcemm_api.h"
|
#include "sourcemm_api.h"
|
||||||
#include "Tlhelp32.h"
|
#include "Tlhelp32.h"
|
||||||
#include "LibrarySys.h"
|
#include "LibrarySys.h"
|
||||||
#include "minidump.h"
|
#include "minidump.h"
|
||||||
|
#include "sm_stringutil.h"
|
||||||
|
|
||||||
|
bool HookImportAddrTable(BYTE *base, const char *func, DWORD hookfunc, char *err, size_t maxlength)
|
||||||
|
{
|
||||||
|
IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *)base;
|
||||||
|
if (dos->e_magic != IMAGE_DOS_SIGNATURE)
|
||||||
|
{
|
||||||
|
UTIL_Format(err, maxlength, "%s", "Could not detect valid DOS signature");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IMAGE_NT_HEADERS *nt = (IMAGE_NT_HEADERS *)(base + dos->e_lfanew);
|
||||||
|
if (nt->Signature != IMAGE_NT_SIGNATURE)
|
||||||
|
{
|
||||||
|
UTIL_Format(err, maxlength, "%s", "Could not detect valid NT signature");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IMAGE_IMPORT_DESCRIPTOR *desc =
|
||||||
|
(IMAGE_IMPORT_DESCRIPTOR *)
|
||||||
|
(base + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
|
||||||
|
if (base == (BYTE *)desc)
|
||||||
|
{
|
||||||
|
UTIL_Format(err, maxlength, "%s", "Could not find IAT");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool entryFound = false;
|
||||||
|
while (desc->Name)
|
||||||
|
{
|
||||||
|
if (desc->FirstThunk != 0)
|
||||||
|
{
|
||||||
|
IMAGE_THUNK_DATA *data = (IMAGE_THUNK_DATA *)(base + desc->OriginalFirstThunk);
|
||||||
|
DWORD *iat = (DWORD *)(base + desc->FirstThunk);
|
||||||
|
while (data->u1.Function)
|
||||||
|
{
|
||||||
|
if ((data->u1.Ordinal & IMAGE_ORDINAL_FLAG32) != IMAGE_ORDINAL_FLAG32)
|
||||||
|
{
|
||||||
|
IMAGE_IMPORT_BY_NAME *import = (IMAGE_IMPORT_BY_NAME *)(base + data->u1.AddressOfData);
|
||||||
|
if (strcmp((char *)import->Name, func) == 0)
|
||||||
|
{
|
||||||
|
DWORD oldprot, oldprot2;
|
||||||
|
VirtualProtect(iat, 4, PAGE_READWRITE, &oldprot);
|
||||||
|
*iat = hookfunc;
|
||||||
|
VirtualProtect(iat, 4, oldprot, &oldprot2);
|
||||||
|
entryFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data++;
|
||||||
|
iat++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
desc++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!entryFound)
|
||||||
|
{
|
||||||
|
UTIL_Format(err, maxlength, "Could not find IAT entry for %s", func);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
@@ -62,6 +124,24 @@ FARPROC WINAPI GetProcAddress2(HMODULE hModule, LPCSTR lpProcName)
|
|||||||
return GetProcAddress(hModule, lpProcName);
|
return GetProcAddress(hModule, lpProcName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HMODULE WINAPI LoadLibraryEx2(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
HMODULE lib = LoadLibraryEx(lpFileName, hFile, dwFlags);
|
||||||
|
|
||||||
|
/* Steam.dll seems to get loaded using an abs path, thus the use of stristr() */
|
||||||
|
if (stristr(lpFileName, "steam.dll"))
|
||||||
|
{
|
||||||
|
char err[64];
|
||||||
|
if (!HookImportAddrTable((BYTE *)lib, "GetProcAddress", (DWORD)GetProcAddress2, err, sizeof(err)))
|
||||||
|
{
|
||||||
|
Error("[SM] %s in steam.dll\n", err);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lib;
|
||||||
|
}
|
||||||
|
|
||||||
class CrazyWindowsDebugger : public SMGlobalClass
|
class CrazyWindowsDebugger : public SMGlobalClass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -69,6 +149,9 @@ public:
|
|||||||
{
|
{
|
||||||
HANDLE hModuleList = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
|
HANDLE hModuleList = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
|
||||||
MODULEENTRY32 me32;
|
MODULEENTRY32 me32;
|
||||||
|
BYTE *engine = NULL;
|
||||||
|
BYTE *steam = NULL;
|
||||||
|
char err[64];
|
||||||
|
|
||||||
me32.dwSize = sizeof(MODULEENTRY32);
|
me32.dwSize = sizeof(MODULEENTRY32);
|
||||||
|
|
||||||
@@ -77,69 +160,40 @@ public:
|
|||||||
Error("Could not initialize crazy debugger!");
|
Error("Could not initialize crazy debugger!");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (strcasecmp(me32.szModule, "steam.dll") == 0)
|
if (strcasecmp(me32.szModule, "engine.dll") == 0)
|
||||||
{
|
{
|
||||||
IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *)me32.modBaseAddr;
|
engine = me32.modBaseAddr;
|
||||||
if (dos->e_magic != IMAGE_DOS_SIGNATURE)
|
}
|
||||||
{
|
else if (strcasecmp(me32.szModule, "steam.dll") == 0)
|
||||||
Error("[SM] Could not detect steam.dll with valid DOS signature");
|
{
|
||||||
}
|
steam = me32.modBaseAddr;
|
||||||
char *base = (char *)dos;
|
|
||||||
IMAGE_NT_HEADERS *nt = (IMAGE_NT_HEADERS *)(base + dos->e_lfanew);
|
|
||||||
if (nt->Signature != IMAGE_NT_SIGNATURE)
|
|
||||||
{
|
|
||||||
Error("[SM] Could not detect steam.dll with valid NT signature");
|
|
||||||
}
|
|
||||||
IMAGE_IMPORT_DESCRIPTOR *desc =
|
|
||||||
(IMAGE_IMPORT_DESCRIPTOR *)
|
|
||||||
(base + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
|
|
||||||
if (base == (char *)desc)
|
|
||||||
{
|
|
||||||
Error("[SM] Could not find the steam.dll IAT");
|
|
||||||
}
|
|
||||||
while (desc->Name)
|
|
||||||
{
|
|
||||||
if (desc->FirstThunk != 0)
|
|
||||||
{
|
|
||||||
IMAGE_THUNK_DATA *data = (IMAGE_THUNK_DATA *)(base + desc->OriginalFirstThunk);
|
|
||||||
DWORD *iat = (DWORD *)(base + desc->FirstThunk);
|
|
||||||
while (data->u1.Function)
|
|
||||||
{
|
|
||||||
if ((data->u1.Ordinal & IMAGE_ORDINAL_FLAG32) != IMAGE_ORDINAL_FLAG32)
|
|
||||||
{
|
|
||||||
IMAGE_IMPORT_BY_NAME *import = (IMAGE_IMPORT_BY_NAME *)(base + data->u1.AddressOfData);
|
|
||||||
if (strcmp((char *)import->Name, "GetProcAddress") == 0)
|
|
||||||
{
|
|
||||||
DWORD oldprot, oldprot2;
|
|
||||||
VirtualProtect(iat, 4, PAGE_READWRITE, &oldprot);
|
|
||||||
*iat = (DWORD)GetProcAddress2;
|
|
||||||
VirtualProtect(iat, 4, oldprot, &oldprot2);
|
|
||||||
found = true;
|
|
||||||
goto _end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data++;
|
|
||||||
iat++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
desc++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} while (Module32Next(hModuleList, &me32));
|
} while (Module32Next(hModuleList, &me32));
|
||||||
|
|
||||||
_end:
|
CloseHandle(hModuleList);
|
||||||
|
|
||||||
if (!found)
|
/* This really should not happen, but ... */
|
||||||
|
if (!engine)
|
||||||
{
|
{
|
||||||
Error("Could not find steam.dll's GetProcAddress IAT entry");
|
Error("[SM] Could not find engine.dll\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(hModuleList);
|
/* Steam.dll isn't loaded yet */
|
||||||
|
if (!steam)
|
||||||
|
{
|
||||||
|
if (!HookImportAddrTable(engine, "LoadLibraryExA", (DWORD)LoadLibraryEx2, err, sizeof(err)))
|
||||||
|
{
|
||||||
|
Error("[SM] %s in engine.dll)\n", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!HookImportAddrTable(steam, "GetProcAddress", (DWORD)GetProcAddress2, err, sizeof(err)))
|
||||||
|
{
|
||||||
|
Error("[SM] %s in steam.dll)\n", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} s_CrazyDebugger;
|
} s_CrazyDebugger;
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -181,6 +181,9 @@ int DebugReport::_GetPluginIndex(IPluginContext *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
iter->Release();
|
iter->Release();
|
||||||
return -1;
|
|
||||||
|
/* If we don't know which plugin this is, it's one being loaded. Fake its index for now. */
|
||||||
|
|
||||||
|
return g_PluginSys.GetPluginCount() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ void GameConfigManager::OnSourceModStartup(bool late)
|
|||||||
strncopy(g_GameDesc + 1, SERVER_CALL(GetGameDescription)(), sizeof(g_GameDesc) - 1);
|
strncopy(g_GameDesc + 1, SERVER_CALL(GetGameDescription)(), sizeof(g_GameDesc) - 1);
|
||||||
|
|
||||||
KeyValues *pGameInfo = new KeyValues("GameInfo");
|
KeyValues *pGameInfo = new KeyValues("GameInfo");
|
||||||
if (pGameInfo->LoadFromFile(basefilesystem, "gameinfo.txt"))
|
if (g_HL2.KVLoadFromFile(pGameInfo, basefilesystem, "gameinfo.txt"))
|
||||||
{
|
{
|
||||||
const char *str;
|
const char *str;
|
||||||
if ((str = pGameInfo->GetString("game", NULL)) != NULL)
|
if ((str = pGameInfo->GetString("game", NULL)) != NULL)
|
||||||
|
|||||||
+41
-2
@@ -114,8 +114,6 @@ void CHalfLife2::OnSourceModAllInitialized()
|
|||||||
m_HinTextMsg = g_UserMsgs.GetMessageIndex("HintText");
|
m_HinTextMsg = g_UserMsgs.GetMessageIndex("HintText");
|
||||||
m_VGUIMenu = g_UserMsgs.GetMessageIndex("VGUIMenu");
|
m_VGUIMenu = g_UserMsgs.GetMessageIndex("VGUIMenu");
|
||||||
g_ShareSys.AddInterface(NULL, this);
|
g_ShareSys.AddInterface(NULL, this);
|
||||||
|
|
||||||
FindInSendTable("CTFPlayer", "m_nDisguiseClass");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined METAMOD_PLAPI_VERSION
|
#if !defined METAMOD_PLAPI_VERSION
|
||||||
@@ -437,6 +435,47 @@ bool CHalfLife2::IsLANServer()
|
|||||||
return (sv_lan->GetInt() != 0);
|
return (sv_lan->GetInt() != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CHalfLife2::KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID)
|
||||||
|
{
|
||||||
|
#if defined METAMOD_PLAPI_VERSION
|
||||||
|
if (g_SMAPI->GetSourceEngineBuild() == SOURCE_ENGINE_ORIGINAL)
|
||||||
|
#else
|
||||||
|
if (strcasecmp(g_SourceMod.GetGameFolderName(), "ship") == 0)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
Assert(filesystem);
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Assert(_heapchk() == _HEAPOK);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FileHandle_t f = filesystem->Open(resourceName, "rb", pathID);
|
||||||
|
if (!f)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// load file into a null-terminated buffer
|
||||||
|
int fileSize = filesystem->Size(f);
|
||||||
|
char *buffer = (char *)MemAllocScratch(fileSize + 1);
|
||||||
|
|
||||||
|
Assert(buffer);
|
||||||
|
|
||||||
|
filesystem->Read(buffer, fileSize, f); // read into local buffer
|
||||||
|
|
||||||
|
buffer[fileSize] = 0; // null terminate file as EOF
|
||||||
|
|
||||||
|
filesystem->Close( f ); // close file after reading
|
||||||
|
|
||||||
|
bool retOK = kv->LoadFromBuffer( resourceName, buffer, filesystem );
|
||||||
|
|
||||||
|
MemFreeScratch();
|
||||||
|
|
||||||
|
return retOK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return kv->LoadFromFile(filesystem, resourceName, pathID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CHalfLife2::PushCommandStack(const CCommand *cmd)
|
void CHalfLife2::PushCommandStack(const CCommand *cmd)
|
||||||
{
|
{
|
||||||
CachedCommandInfo info;
|
CachedCommandInfo info;
|
||||||
|
|||||||
@@ -41,6 +41,8 @@
|
|||||||
#include "sm_queue.h"
|
#include "sm_queue.h"
|
||||||
#include <IGameHelpers.h>
|
#include <IGameHelpers.h>
|
||||||
#include <KeyValues.h>
|
#include <KeyValues.h>
|
||||||
|
#include <server_class.h>
|
||||||
|
#include <datamap.h>
|
||||||
|
|
||||||
class CCommand;
|
class CCommand;
|
||||||
|
|
||||||
@@ -99,6 +101,7 @@ public: //IGameHelpers
|
|||||||
bool HintTextMsg(int client, const char *msg);
|
bool HintTextMsg(int client, const char *msg);
|
||||||
bool ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show);
|
bool ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show);
|
||||||
bool IsLANServer();
|
bool IsLANServer();
|
||||||
|
bool KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID = NULL);
|
||||||
public:
|
public:
|
||||||
void AddToFakeCliCmdQueue(int client, int userid, const char *cmd);
|
void AddToFakeCliCmdQueue(int client, int userid, const char *cmd);
|
||||||
void ProcessFakeCliCmdQueue();
|
void ProcessFakeCliCmdQueue();
|
||||||
|
|||||||
+72
-58
@@ -1,21 +1,16 @@
|
|||||||
#(C)2004-2008 Metamod:Source Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
#Local paths
|
SMSDK = ..
|
||||||
|
SRCDS_BASE = ~/srcds
|
||||||
HL2SDK_ORIG = ../../hl2sdk
|
HL2SDK_ORIG = ../../hl2sdk
|
||||||
HL2SDK_OB = ../../hl2sdk-ob
|
HL2SDK_OB = ../../hl2sdk-ob
|
||||||
SOURCEMM14 = ../../sourcemm-1.4
|
SOURCEMM14 = ../../sourcemm-1.4
|
||||||
SOURCEMM16 = ../../sourcemm-1.6
|
SOURCEMM16 = ../../sourcemm-1.6
|
||||||
SRCDS_BASE = ~/srcds
|
|
||||||
SMSDK = ..
|
|
||||||
|
|
||||||
#Project options
|
|
||||||
OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
|
||||||
GCC4_FLAGS = -fvisibility=hidden
|
|
||||||
GCC4_CPP_FLAGS = -fvisibility-inlines-hidden
|
|
||||||
DEBUG_FLAGS = -g -ggdb3
|
|
||||||
CPP = gcc-4.1
|
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
|
#####################################
|
||||||
|
|
||||||
OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \
|
OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \
|
||||||
Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \
|
Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \
|
||||||
@@ -33,101 +28,120 @@ OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \
|
|||||||
smn_adt_trie.cpp smn_hudtext.cpp
|
smn_adt_trie.cpp smn_hudtext.cpp
|
||||||
OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \
|
OBJECTS += systems/ExtensionSys.cpp systems/ForwardSys.cpp systems/HandleSys.cpp \
|
||||||
systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \
|
systems/LibrarySys.cpp systems/PluginInfoDatabase.cpp systems/PluginSys.cpp \
|
||||||
systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_function.cpp
|
systems/ShareSys.cpp vm/sp_vm_basecontext.cpp vm/sp_vm_engine.cpp \
|
||||||
|
vm/sp_vm_function.cpp
|
||||||
OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp
|
OBJECTS += thread/ThreadWorker.cpp thread/BaseWorker.cpp thread/PosixThreads.cpp ThreadSupport.cpp
|
||||||
OBJECTS_C = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \
|
OBJECTS += zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/gzio.c \
|
||||||
zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \
|
zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c \
|
||||||
zlib/uncompr.c zlib/zutil.c
|
zlib/uncompr.c zlib/zutil.c
|
||||||
OBJECTS_SM16 = vm/sp_vm_engine.cpp
|
|
||||||
|
|
||||||
|
##############################################
|
||||||
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
##############################################
|
||||||
|
|
||||||
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
|
CPP = gcc-4.1
|
||||||
|
|
||||||
|
override ENGSET = false
|
||||||
ifeq "$(ENGINE)" "original"
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(HL2SDK_ORIG)
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
HL2PUB = $(HL2SDK_ORIG)/public
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||||
METAMOD = $(SOURCEMM14)
|
METAMOD = $(SOURCEMM14)
|
||||||
INCLUDE += -I$(HL2PUB)/dlls
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
SRCDS = $(SRCDS_BASE)
|
SRCDS = $(SRCDS_BASE)
|
||||||
BINARY = sourcemod.1.ep1.so
|
BINARY = sourcemod.1.ep1.so
|
||||||
|
override ENGSET = true
|
||||||
endif
|
endif
|
||||||
ifeq "$(ENGINE)" "orangebox"
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
HL2SDK = $(HL2SDK_OB)
|
HL2SDK = $(HL2SDK_OB)
|
||||||
HL2PUB = $(HL2SDK_OB)/public
|
HL2PUB = $(HL2SDK_OB)/public
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||||
CFLAGS += -DORANGEBOX_BUILD
|
CFLAGS += -DORANGEBOX_BUILD
|
||||||
METAMOD = $(SOURCEMM16)
|
METAMOD = $(SOURCEMM16)
|
||||||
INCLUDE += -I$(HL2PUB)/game/server
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
SRCDS = $(SRCDS_BASE)/orangebox
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
BINARY = sourcemod.2.ep2.so
|
BINARY = sourcemod.2.ep2.so
|
||||||
endif
|
override ENGSET = true
|
||||||
ifeq "$(BINARY)" ""
|
|
||||||
echo "You must supply ENGINE=orangebox or ENGINE=original"
|
|
||||||
false
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LINK += $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so \
|
LINK += $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so \
|
||||||
tier0_i486.so -lpthread -static-libgcc
|
tier0_i486.so -lpthread -static-libgcc
|
||||||
|
|
||||||
INCLUDE_SMSDK = -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions
|
INCLUDE_SMSDK = -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn
|
||||||
|
|
||||||
INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
INCLUDE_SM16 = -I. -I.. -I$(SOURCEMM16)/sourcehook $(INCLUDE_SMSDK)
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \
|
|
||||||
-I$(HL2PUB)/mathlib -Isystems $(INCLUDE_SMSDK)
|
|
||||||
|
|
||||||
SM16_INCLUDE = -I. -I.. -I$(SOURCEMM16)/sourcehook $(INCLUDE_SMSDK)
|
INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/mathlib -I$(HL2PUB)/vstdlib \
|
||||||
|
-I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook \
|
||||||
|
-I$(METAMOD)/sourcemm -Isystems $(INCLUDE_SMSDK)
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror \
|
||||||
|
-Wno-uninitialized -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -DSM_DEFAULT_THREADER -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
|
################################################
|
||||||
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
|
################################################
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug.$(ENGINE)
|
BIN_DIR = Debug.$(ENGINE)
|
||||||
CFLAGS += $(DEBUG_FLAGS)
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release.$(ENGINE)
|
BIN_DIR = Release.$(ENGINE)
|
||||||
CFLAGS += $(OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
|
|
||||||
CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \
|
|
||||||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \
|
|
||||||
-Dstrcmpi=strcasecmp -Wall -Wno-uninitialized -Werror -mfpmath=sse -msse \
|
|
||||||
-DSOURCEMOD_BUILD -DSM_DEFAULT_THREADER -m32
|
|
||||||
CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
|
||||||
|
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
CFLAGS += $(GCC4_FLAGS)
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(GCC4_CPP_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.ox)
|
OBJ_LINUX := $(OBJECTS:%vm_engine.cpp=$(BIN_DIR)/%vm_engine.o)
|
||||||
OBJ_LINUX_C := $(OBJECTS_C:%.c=$(BIN_DIR)/%.oc)
|
OBJ_LINUX := $(OBJ_LINUX:%.cpp=$(BIN_DIR)/%.o)
|
||||||
OBJ_LINUX_SM16 := $(OBJECTS_SM16:%.cpp=$(BIN_DIR)/%.ok)
|
OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o)
|
||||||
|
|
||||||
$(BIN_DIR)/%.ox: %.cpp
|
$(BIN_DIR)/%vm_engine.o: %vm_engine.cpp
|
||||||
|
$(CPP) $(INCLUDE_SM16) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(BIN_DIR)/%.oc: %.c
|
$(BIN_DIR)/%.o: %.c
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(BIN_DIR)/%.ok: %.cpp
|
all: check
|
||||||
$(CPP) $(SM16_INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
|
||||||
|
|
||||||
all:
|
|
||||||
mkdir -p $(BIN_DIR)/systems
|
mkdir -p $(BIN_DIR)/systems
|
||||||
mkdir -p $(BIN_DIR)/vm
|
mkdir -p $(BIN_DIR)/vm
|
||||||
mkdir -p $(BIN_DIR)/zlib
|
mkdir -p $(BIN_DIR)/zlib
|
||||||
mkdir -p $(BIN_DIR)/thread
|
mkdir -p $(BIN_DIR)/thread
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so;
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so;
|
||||||
$(MAKE) -f Makefile sourcemod
|
$(MAKE) -f Makefile sourcemod
|
||||||
|
|
||||||
sourcemod: $(OBJ_LINUX) $(OBJ_LINUX_C) $(OBJ_LINUX_SM16)
|
check:
|
||||||
$(CPP) $(OBJ_LINUX) $(OBJ_LINUX_C) $(OBJ_LINUX_SM16) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
if [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
sourcemod: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
debug:
|
||||||
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf $(BIN_DIR)/*.ox
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf $(BIN_DIR)/systems/*.ox
|
rm -rf $(BIN_DIR)/systems/*.o
|
||||||
rm -rf $(BIN_DIR)/zlib/*.oc
|
rm -rf $(BIN_DIR)/zlib/*.o
|
||||||
rm -rf $(BIN_DIR)/vm/*.ox
|
rm -rf $(BIN_DIR)/vm/*.o
|
||||||
rm -rf $(BIN_DIR)/thread/*.ox
|
rm -rf $(BIN_DIR)/thread/*.o
|
||||||
rm -rf $(BIN_DIR)/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
|||||||
+24
-3
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
#include <inetchannel.h>
|
#include <inetchannel.h>
|
||||||
#include <iclient.h>
|
#include <iclient.h>
|
||||||
#include "GameConfigs.h"
|
#include "GameConfigs.h"
|
||||||
|
#include "systems/ExtensionSys.h"
|
||||||
|
|
||||||
PlayerManager g_Players;
|
PlayerManager g_Players;
|
||||||
bool g_OnMapStarted = false;
|
bool g_OnMapStarted = false;
|
||||||
@@ -133,6 +134,9 @@ void PlayerManager::OnSourceModAllInitialized()
|
|||||||
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);
|
||||||
PostAdminFilter = g_Forwards.CreateForward("OnClientPostAdminFilter", ET_Ignore, 1, p1);
|
PostAdminFilter = g_Forwards.CreateForward("OnClientPostAdminFilter", ET_Ignore, 1, p1);
|
||||||
|
|
||||||
|
m_bIsListenServer = !engine->IsDedicatedServer();
|
||||||
|
m_ListenClient = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerManager::OnSourceModShutdown()
|
void PlayerManager::OnSourceModShutdown()
|
||||||
@@ -206,6 +210,7 @@ void PlayerManager::OnServerActivate(edict_t *pEdictList, int edictCount, int cl
|
|||||||
|
|
||||||
g_NumPlayersToAuth = &m_AuthQueue[0];
|
g_NumPlayersToAuth = &m_AuthQueue[0];
|
||||||
}
|
}
|
||||||
|
g_Extensions.CallOnCoreMapStart(pEdictList, edictCount, clientMax);
|
||||||
m_onActivate->Execute(NULL);
|
m_onActivate->Execute(NULL);
|
||||||
m_onActivate2->Execute(NULL);
|
m_onActivate2->Execute(NULL);
|
||||||
|
|
||||||
@@ -383,7 +388,9 @@ bool PlayerManager::OnClientConnect(edict_t *pEntity, const char *pszName, const
|
|||||||
{
|
{
|
||||||
m_AuthQueue[++m_AuthQueue[0]] = client;
|
m_AuthQueue[++m_AuthQueue[0]] = client;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
RETURN_META_VALUE(MRES_SUPERCEDE, false);
|
RETURN_META_VALUE(MRES_SUPERCEDE, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,6 +420,13 @@ bool PlayerManager::OnClientConnect_Post(edict_t *pEntity, const char *pszName,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pPlayer->IsFakeClient()
|
||||||
|
&& m_bIsListenServer
|
||||||
|
&& strncmp(pszAddress, "127.0.0.1", 9) == 0)
|
||||||
|
{
|
||||||
|
m_ListenClient = client;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -522,7 +536,9 @@ void PlayerManager::OnClientDisconnect(edict_t *pEntity)
|
|||||||
{
|
{
|
||||||
m_cldisconnect->PushCell(client);
|
m_cldisconnect->PushCell(client);
|
||||||
m_cldisconnect->Execute(&res, NULL);
|
m_cldisconnect->Execute(&res, NULL);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* We don't care, prevent a double call */
|
/* We don't care, prevent a double call */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -563,6 +579,11 @@ void PlayerManager::OnClientDisconnect(edict_t *pEntity)
|
|||||||
|
|
||||||
m_Players[client].Disconnect();
|
m_Players[client].Disconnect();
|
||||||
m_UserIdLookUp[engine->GetPlayerUserId(pEntity)] = 0;
|
m_UserIdLookUp[engine->GetPlayerUserId(pEntity)] = 0;
|
||||||
|
|
||||||
|
if (m_ListenClient == client)
|
||||||
|
{
|
||||||
|
m_ListenClient = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerManager::OnClientDisconnect_Post(edict_t *pEntity)
|
void PlayerManager::OnClientDisconnect_Post(edict_t *pEntity)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -161,6 +161,10 @@ public:
|
|||||||
{
|
{
|
||||||
return m_PlayerCount;
|
return m_PlayerCount;
|
||||||
}
|
}
|
||||||
|
inline int ListenClient()
|
||||||
|
{
|
||||||
|
return m_ListenClient;
|
||||||
|
}
|
||||||
bool CheckSetAdmin(int index, CPlayer *pPlayer, AdminId id);
|
bool CheckSetAdmin(int index, CPlayer *pPlayer, AdminId id);
|
||||||
bool CheckSetAdminName(int index, CPlayer *pPlayer, AdminId id);
|
bool CheckSetAdminName(int index, CPlayer *pPlayer, AdminId id);
|
||||||
const char *GetPassInfoVar();
|
const char *GetPassInfoVar();
|
||||||
@@ -188,6 +192,8 @@ private:
|
|||||||
unsigned int *m_AuthQueue;
|
unsigned int *m_AuthQueue;
|
||||||
String m_PassInfoVar;
|
String m_PassInfoVar;
|
||||||
bool m_QueryLang;
|
bool m_QueryLang;
|
||||||
|
bool m_bIsListenServer;
|
||||||
|
int m_ListenClient;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern PlayerManager g_Players;
|
extern PlayerManager g_Players;
|
||||||
|
|||||||
@@ -5,35 +5,35 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sourcemod_mm", "sourcemod_m
|
|||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
CrazyDebug|Win32 = CrazyDebug|Win32
|
CrazyDebug - Episode 1|Win32 = CrazyDebug - Episode 1|Win32
|
||||||
|
CrazyDebug - Old Metamod|Win32 = CrazyDebug - Old Metamod|Win32
|
||||||
|
CrazyDebug - Orange Box|Win32 = CrazyDebug - Orange Box|Win32
|
||||||
Debug - Episode 1|Win32 = Debug - Episode 1|Win32
|
Debug - Episode 1|Win32 = Debug - Episode 1|Win32
|
||||||
Debug - Old Metamod|Win32 = Debug - Old Metamod|Win32
|
Debug - Old Metamod|Win32 = Debug - Old Metamod|Win32
|
||||||
Debug - Orange Box|Win32 = Debug - Orange Box|Win32
|
Debug - Orange Box|Win32 = Debug - Orange Box|Win32
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release - Episode 1|Win32 = Release - Episode 1|Win32
|
Release - Episode 1|Win32 = Release - Episode 1|Win32
|
||||||
Release - Old Metamod|Win32 = Release - Old Metamod|Win32
|
Release - Old Metamod|Win32 = Release - Old Metamod|Win32
|
||||||
Release - Orange Box|Win32 = Release - Orange Box|Win32
|
Release - Orange Box|Win32 = Release - Orange Box|Win32
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug|Win32.ActiveCfg = CrazyDebug|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Episode 1|Win32.ActiveCfg = CrazyDebug - Episode 1|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug|Win32.Build.0 = CrazyDebug|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Episode 1|Win32.Build.0 = CrazyDebug - Episode 1|Win32
|
||||||
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Old Metamod|Win32.ActiveCfg = CrazyDebug - Old Metamod|Win32
|
||||||
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Old Metamod|Win32.Build.0 = CrazyDebug - Old Metamod|Win32
|
||||||
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Orange Box|Win32.ActiveCfg = CrazyDebug - Orange Box|Win32
|
||||||
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.CrazyDebug - Orange Box|Win32.Build.0 = CrazyDebug - Orange Box|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Episode 1|Win32.ActiveCfg = Debug - Episode 1|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Episode 1|Win32.ActiveCfg = Debug - Episode 1|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Episode 1|Win32.Build.0 = Debug - Episode 1|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Episode 1|Win32.Build.0 = Debug - Episode 1|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Old Metamod|Win32.ActiveCfg = Debug - Old Metamod|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Old Metamod|Win32.ActiveCfg = Debug - Old Metamod|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Old Metamod|Win32.Build.0 = Debug - Old Metamod|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Old Metamod|Win32.Build.0 = Debug - Old Metamod|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug|Win32.ActiveCfg = CrazyDebug|Win32
|
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Debug|Win32.Build.0 = CrazyDebug|Win32
|
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Episode 1|Win32.ActiveCfg = Release - Episode 1|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Episode 1|Win32.ActiveCfg = Release - Episode 1|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Episode 1|Win32.Build.0 = Release - Episode 1|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Episode 1|Win32.Build.0 = Release - Episode 1|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Old Metamod|Win32.ActiveCfg = Release - Old Metamod|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Old Metamod|Win32.ActiveCfg = Release - Old Metamod|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Old Metamod|Win32.Build.0 = Release - Old Metamod|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Old Metamod|Win32.Build.0 = Release - Old Metamod|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32
|
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release|Win32.ActiveCfg = Debug - Old Metamod|Win32
|
|
||||||
{E39527CD-7CAB-4420-97CC-DA1B93B260BC}.Release|Win32.Build.0 = Debug - Old Metamod|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
+551
-389
File diff suppressed because it is too large
Load Diff
+68
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -357,6 +357,57 @@ void AddFloat(char **buf_p, size_t &maxlen, double fval, int width, int prec, in
|
|||||||
*buf_p = buf;
|
*buf_p = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddBinary(char **buf_p, size_t &maxlen, unsigned int val, int width, int flags)
|
||||||
|
{
|
||||||
|
char text[32];
|
||||||
|
int digits;
|
||||||
|
char *buf;
|
||||||
|
|
||||||
|
digits = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (val & 1)
|
||||||
|
{
|
||||||
|
text[digits++] = '1';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text[digits++] = '0';
|
||||||
|
}
|
||||||
|
val >>= 1;
|
||||||
|
} while (val);
|
||||||
|
|
||||||
|
buf = *buf_p;
|
||||||
|
|
||||||
|
if (!(flags & LADJUST))
|
||||||
|
{
|
||||||
|
while (digits < width && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
||||||
|
width--;
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (digits-- && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = text[digits];
|
||||||
|
width--;
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & LADJUST)
|
||||||
|
{
|
||||||
|
while (width-- && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*buf_p = buf;
|
||||||
|
}
|
||||||
|
|
||||||
void AddUInt(char **buf_p, size_t &maxlen, unsigned int val, int width, int flags)
|
void AddUInt(char **buf_p, size_t &maxlen, unsigned int val, int width, int flags)
|
||||||
{
|
{
|
||||||
char text[32];
|
char text[32];
|
||||||
@@ -623,6 +674,13 @@ reswitch:
|
|||||||
arg++;
|
arg++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'b':
|
||||||
|
{
|
||||||
|
int *value = (int *)args[arg];
|
||||||
|
AddBinary(&buf_p, llen, *value, width, flags);
|
||||||
|
arg++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'i':
|
case 'i':
|
||||||
{
|
{
|
||||||
@@ -809,6 +867,15 @@ reswitch:
|
|||||||
arg++;
|
arg++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'b':
|
||||||
|
{
|
||||||
|
CHECK_ARGS(0);
|
||||||
|
cell_t *value;
|
||||||
|
pCtx->LocalToPhysAddr(params[arg], &value);
|
||||||
|
AddBinary(&buf_p, llen, *value, width, flags);
|
||||||
|
arg++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'i':
|
case 'i':
|
||||||
{
|
{
|
||||||
|
|||||||
+30
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -90,3 +90,32 @@ size_t sm_trie_mem_usage(Trie *trie)
|
|||||||
{
|
{
|
||||||
return trie->k.mem_usage();
|
return trie->k.mem_usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct trie_iter_data
|
||||||
|
{
|
||||||
|
SM_TRIE_BAD_ITERATOR iter;
|
||||||
|
void *ptr;
|
||||||
|
Trie *pTrie;
|
||||||
|
};
|
||||||
|
|
||||||
|
void our_trie_iterator(KTrie<void *> *pTrie, const char *name, void *& obj, void *data)
|
||||||
|
{
|
||||||
|
trie_iter_data *our_iter;
|
||||||
|
|
||||||
|
our_iter = (trie_iter_data *)data;
|
||||||
|
our_iter->iter(our_iter->pTrie, name, &obj, our_iter->ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sm_trie_bad_iterator(Trie *trie,
|
||||||
|
char *buffer,
|
||||||
|
size_t maxlength,
|
||||||
|
SM_TRIE_BAD_ITERATOR iter,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
trie_iter_data our_iter;
|
||||||
|
|
||||||
|
our_iter.iter = iter;
|
||||||
|
our_iter.ptr = data;
|
||||||
|
our_iter.pTrie = trie;
|
||||||
|
trie->k.bad_iterator(buffer, maxlength, &our_iter, our_trie_iterator);
|
||||||
|
}
|
||||||
|
|||||||
+8
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
struct Trie;
|
struct Trie;
|
||||||
|
|
||||||
|
typedef void (*SM_TRIE_BAD_ITERATOR)(Trie *pTrie, const char *key, void **value, void *data);
|
||||||
|
|
||||||
Trie *sm_trie_create();
|
Trie *sm_trie_create();
|
||||||
void sm_trie_destroy(Trie *trie);
|
void sm_trie_destroy(Trie *trie);
|
||||||
bool sm_trie_insert(Trie *trie, const char *key, void *value);
|
bool sm_trie_insert(Trie *trie, const char *key, void *value);
|
||||||
@@ -42,5 +44,10 @@ bool sm_trie_retrieve(Trie *trie, const char *key, void **value);
|
|||||||
bool sm_trie_delete(Trie *trie, const char *key);
|
bool sm_trie_delete(Trie *trie, const char *key);
|
||||||
void sm_trie_clear(Trie *trie);
|
void sm_trie_clear(Trie *trie);
|
||||||
size_t sm_trie_mem_usage(Trie *trie);
|
size_t sm_trie_mem_usage(Trie *trie);
|
||||||
|
void sm_trie_bad_iterator(Trie *trie,
|
||||||
|
char *buffer,
|
||||||
|
size_t maxlength,
|
||||||
|
SM_TRIE_BAD_ITERATOR iter,
|
||||||
|
void *data);
|
||||||
|
|
||||||
#endif //_INCLUDE_SOURCEMOD_SIMPLE_TRIE_H_
|
#endif //_INCLUDE_SOURCEMOD_SIMPLE_TRIE_H_
|
||||||
|
|||||||
+3
-3
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
* @file Contains SourceMod version information.
|
* @file Contains SourceMod version information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "1.0.0.1946"
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
#define SVN_FILE_VERSION 1,0,0,1946
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
#endif //_INCLUDE_SOURCEMOD_VERSION_H_
|
#endif //_INCLUDE_SOURCEMOD_VERSION_H_
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
#include "sm_globals.h"
|
#include "sm_globals.h"
|
||||||
#include "sourcemod.h"
|
#include "sourcemod.h"
|
||||||
#include "sourcemm_api.h"
|
#include "sourcemm_api.h"
|
||||||
#include "server_class.h"
|
|
||||||
#include "PlayerManager.h"
|
#include "PlayerManager.h"
|
||||||
#include "HalfLife2.h"
|
#include "HalfLife2.h"
|
||||||
#include "GameConfigs.h"
|
#include "GameConfigs.h"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#include "sourcemm_api.h"
|
#include "sourcemm_api.h"
|
||||||
#include "sm_stringutil.h"
|
#include "sm_stringutil.h"
|
||||||
#include "HandleSys.h"
|
#include "HandleSys.h"
|
||||||
|
#include "HalfLife2.h"
|
||||||
#include <KeyValues.h>
|
#include <KeyValues.h>
|
||||||
#include "utlbuffer.h"
|
#include "utlbuffer.h"
|
||||||
|
|
||||||
@@ -782,6 +783,7 @@ static cell_t smn_FileToKeyValues(IPluginContext *pCtx, const cell_t *params)
|
|||||||
HandleSecurity sec;
|
HandleSecurity sec;
|
||||||
char *path;
|
char *path;
|
||||||
KeyValueStack *pStk;
|
KeyValueStack *pStk;
|
||||||
|
KeyValues *kv;
|
||||||
|
|
||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
@@ -797,7 +799,8 @@ static cell_t smn_FileToKeyValues(IPluginContext *pCtx, const cell_t *params)
|
|||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", path);
|
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", path);
|
||||||
|
|
||||||
return pStk->pCurRoot.front()->LoadFromFile(basefilesystem, realpath);
|
kv = pStk->pCurRoot.front();
|
||||||
|
return g_HL2.KVLoadFromFile(kv, basefilesystem, realpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t smn_KvSetEscapeSequences(IPluginContext *pCtx, const cell_t *params)
|
static cell_t smn_KvSetEscapeSequences(IPluginContext *pCtx, const cell_t *params)
|
||||||
|
|||||||
+103
-19
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -765,115 +765,199 @@ static cell_t IsTimingOut(IPluginContext *pContext, const cell_t *params)
|
|||||||
static cell_t GetLatency(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetLatency(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetLatency(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetLatency(FLOW_INCOMING) + pInfo->GetLatency(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetLatency(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetAvgLatency(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetAvgLatency(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetAvgLatency(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgLatency(FLOW_INCOMING) + pInfo->GetAvgLatency(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgLatency(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetAvgLoss(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetAvgLoss(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetAvgLoss(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgLoss(FLOW_INCOMING) + pInfo->GetAvgLoss(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgLoss(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetAvgChoke(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetAvgChoke(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetAvgChoke(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgChoke(FLOW_INCOMING) + pInfo->GetAvgChoke(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgChoke(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetAvgData(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetAvgData(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetAvgData(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgData(FLOW_INCOMING) + pInfo->GetAvgData(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgData(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetAvgPackets(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetAvgPackets(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
int client = params[1];
|
int client = params[1];
|
||||||
|
float value;
|
||||||
|
|
||||||
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
CPlayer *pPlayer = g_Players.GetPlayerByIndex(client);
|
||||||
if (!pPlayer)
|
if (!pPlayer)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
return pContext->ThrowNativeError("Client index %d is invalid", client);
|
||||||
} else if (!pPlayer->IsInGame()) {
|
}
|
||||||
|
else if (!pPlayer->IsInGame())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is not in game", client);
|
return pContext->ThrowNativeError("Client %d is not in game", client);
|
||||||
} else if (pPlayer->IsFakeClient()) {
|
}
|
||||||
|
else if (pPlayer->IsFakeClient())
|
||||||
|
{
|
||||||
return pContext->ThrowNativeError("Client %d is a bot", client);
|
return pContext->ThrowNativeError("Client %d is a bot", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
|
||||||
|
|
||||||
return sp_ftoc(pInfo->GetAvgPackets(params[2]));
|
if (params[2] == MAX_FLOWS)
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgPackets(FLOW_INCOMING) + pInfo->GetAvgPackets(FLOW_OUTGOING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = pInfo->GetAvgPackets(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp_ftoc(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t GetClientOfUserId(IPluginContext *pContext, const cell_t *params)
|
static cell_t GetClientOfUserId(IPluginContext *pContext, const cell_t *params)
|
||||||
|
|||||||
+33
-2
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -460,8 +460,12 @@ static cell_t ReplaceString(IPluginContext *pContext, const cell_t *params)
|
|||||||
pContext->LocalToString(params[4], &replace);
|
pContext->LocalToString(params[4], &replace);
|
||||||
maxlength = (size_t)params[2];
|
maxlength = (size_t)params[2];
|
||||||
|
|
||||||
|
if (search[0] == '\0')
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Cannot replace searches of empty strings");
|
||||||
|
}
|
||||||
|
|
||||||
return UTIL_ReplaceAll(text, maxlength, search, replace);
|
return UTIL_ReplaceAll(text, maxlength, search, replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t ReplaceStringEx(IPluginContext *pContext, const cell_t *params)
|
static cell_t ReplaceStringEx(IPluginContext *pContext, const cell_t *params)
|
||||||
@@ -477,6 +481,11 @@ static cell_t ReplaceStringEx(IPluginContext *pContext, const cell_t *params)
|
|||||||
size_t searchLen = (params[5] == -1) ? strlen(search) : (size_t)params[5];
|
size_t searchLen = (params[5] == -1) ? strlen(search) : (size_t)params[5];
|
||||||
size_t replaceLen = (params[6] == -1) ? strlen(replace) : (size_t)params[6];
|
size_t replaceLen = (params[6] == -1) ? strlen(replace) : (size_t)params[6];
|
||||||
|
|
||||||
|
if (searchLen == 0)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Cannot replace searches of empty strings");
|
||||||
|
}
|
||||||
|
|
||||||
char *ptr = UTIL_ReplaceEx(text, maxlength, search, searchLen, replace, replaceLen);
|
char *ptr = UTIL_ReplaceEx(text, maxlength, search, searchLen, replace, replaceLen);
|
||||||
|
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
@@ -560,6 +569,27 @@ static cell_t SplitString(IPluginContext *pContext, const cell_t *params)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell_t StripQuotes(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
char *text;
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
pContext->LocalToString(params[1], &text);
|
||||||
|
length = strlen(text);
|
||||||
|
|
||||||
|
if (text[0] == '"' && text[length-1] == '"')
|
||||||
|
{
|
||||||
|
/* Null-terminate */
|
||||||
|
text[--length] = '\0';
|
||||||
|
/* Move the remaining bytes (including null terminator) down by one */
|
||||||
|
memmove(&text[0], &text[1], length);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
REGISTER_NATIVES(basicStrings)
|
REGISTER_NATIVES(basicStrings)
|
||||||
{
|
{
|
||||||
{"BreakString", BreakString},
|
{"BreakString", BreakString},
|
||||||
@@ -586,6 +616,7 @@ REGISTER_NATIVES(basicStrings)
|
|||||||
{"StringToIntEx", StringToIntEx},
|
{"StringToIntEx", StringToIntEx},
|
||||||
{"StringToFloat", sm_strtofloat},
|
{"StringToFloat", sm_strtofloat},
|
||||||
{"StringToFloatEx", StringToFloatEx},
|
{"StringToFloatEx", StringToFloatEx},
|
||||||
|
{"StripQuotes", StripQuotes},
|
||||||
{"TrimString", TrimString},
|
{"TrimString", TrimString},
|
||||||
{"VFormat", sm_vformat},
|
{"VFormat", sm_vformat},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
|
|||||||
+8
-1
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -325,6 +325,11 @@ static cell_t smn_IsServerProcessing(IPluginContext *pContext, const cell_t *par
|
|||||||
return (gpGlobals->frametime > 0.0f) ? 1 : 0;
|
return (gpGlobals->frametime > 0.0f) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell_t smn_GetTickInterval(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
return sp_ftoc(gpGlobals->interval_per_tick);
|
||||||
|
}
|
||||||
|
|
||||||
REGISTER_NATIVES(timernatives)
|
REGISTER_NATIVES(timernatives)
|
||||||
{
|
{
|
||||||
{"CreateTimer", smn_CreateTimer},
|
{"CreateTimer", smn_CreateTimer},
|
||||||
@@ -335,5 +340,7 @@ REGISTER_NATIVES(timernatives)
|
|||||||
{"GetMapTimeLimit", smn_GetMapTimeLimit},
|
{"GetMapTimeLimit", smn_GetMapTimeLimit},
|
||||||
{"ExtendMapTimeLimit", smn_ExtendMapTimeLimit},
|
{"ExtendMapTimeLimit", smn_ExtendMapTimeLimit},
|
||||||
{"IsServerProcessing", smn_IsServerProcessing},
|
{"IsServerProcessing", smn_IsServerProcessing},
|
||||||
|
{"GetTickInterval", smn_GetTickInterval},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1369,3 +1369,20 @@ IExtension *CExtensionManager::LoadExternal(IExtensionInterface *pInterface,
|
|||||||
return pExt;
|
return pExt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CExtensionManager::CallOnCoreMapStart(edict_t *pEdictList, int edictCount, int clientMax)
|
||||||
|
{
|
||||||
|
IExtensionInterface *pAPI;
|
||||||
|
List<CExtension *>::iterator iter;
|
||||||
|
|
||||||
|
for (iter=m_Libs.begin(); iter!=m_Libs.end(); iter++)
|
||||||
|
{
|
||||||
|
if ((pAPI = (*iter)->GetAPI()) == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (pAPI->GetExtensionVersion() > 3)
|
||||||
|
{
|
||||||
|
pAPI->OnCoreMapStart(pEdictList, edictCount, clientMax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ public:
|
|||||||
void AddLibrary(IExtension *pSource, const char *library);
|
void AddLibrary(IExtension *pSource, const char *library);
|
||||||
bool LibraryExists(const char *library);
|
bool LibraryExists(const char *library);
|
||||||
void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives);
|
void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives);
|
||||||
|
void CallOnCoreMapStart(edict_t *pEdictList, int edictCount, int clientMax);
|
||||||
public:
|
public:
|
||||||
CExtension *GetExtensionFromIdent(IdentityToken_t *ptr);
|
CExtension *GetExtensionFromIdent(IdentityToken_t *ptr);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|||||||
+32
-19
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod
|
* SourceMod
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -286,11 +286,23 @@ void LibrarySystem::GetPlatformError(char *error, size_t maxlength)
|
|||||||
maxlength,
|
maxlength,
|
||||||
NULL);
|
NULL);
|
||||||
#elif defined PLATFORM_POSIX
|
#elif defined PLATFORM_POSIX
|
||||||
snprintf(error, maxlength, "%s", strerror(errno));
|
UTIL_Format(error, maxlength, "%s", strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LibrarySystem::GetLoaderError(char *buffer, size_t maxlength)
|
||||||
|
{
|
||||||
|
#if defined PLATFORM_WINDOWS
|
||||||
|
GetPlatformError(buffer, maxlength);
|
||||||
|
#elif defined PLATFORM_POSIX
|
||||||
|
if (buffer != NULL && maxlength)
|
||||||
|
{
|
||||||
|
strncopy(buffer, dlerror(), maxlength);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void LibrarySystem::CloseDirectory(IDirectory *dir)
|
void LibrarySystem::CloseDirectory(IDirectory *dir)
|
||||||
{
|
{
|
||||||
delete dir;
|
delete dir;
|
||||||
@@ -301,20 +313,16 @@ ILibrary *LibrarySystem::OpenLibrary(const char *path, char *error, size_t maxle
|
|||||||
LibraryHandle lib;
|
LibraryHandle lib;
|
||||||
#if defined PLATFORM_WINDOWS
|
#if defined PLATFORM_WINDOWS
|
||||||
lib = LoadLibraryA(path);
|
lib = LoadLibraryA(path);
|
||||||
if (!lib)
|
|
||||||
{
|
|
||||||
GetPlatformError(error, maxlength);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#elif defined PLATFORM_POSIX
|
#elif defined PLATFORM_POSIX
|
||||||
lib = dlopen(path, RTLD_NOW);
|
lib = dlopen(path, RTLD_NOW);
|
||||||
if (!lib)
|
|
||||||
{
|
|
||||||
GetPlatformError(error, maxlength);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (lib == NULL)
|
||||||
|
{
|
||||||
|
GetLoaderError(error, maxlength);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return new CLibrary(lib);
|
return new CLibrary(lib);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,21 +352,26 @@ size_t LibrarySystem::PathFormat(char *buffer, size_t len, const char *fmt, ...)
|
|||||||
|
|
||||||
const char *LibrarySystem::GetFileExtension(const char *filename)
|
const char *LibrarySystem::GetFileExtension(const char *filename)
|
||||||
{
|
{
|
||||||
size_t end = strlen(filename) - 1;
|
size_t len, end;
|
||||||
|
|
||||||
for (size_t i = end; i >= 0; i--)
|
len = strlen(filename);
|
||||||
|
|
||||||
|
/* Minimum string length for filename with ext would be 3; example: a.a */
|
||||||
|
if (len < 3)
|
||||||
{
|
{
|
||||||
if (i > end)
|
return NULL;
|
||||||
{
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
end = len - 1;
|
||||||
|
|
||||||
|
for (size_t i = end; i <= end; i--)
|
||||||
|
{
|
||||||
if (filename[i] == PLATFORM_SEP_CHAR || filename[i] == PLATFORM_SEP_ALTCHAR)
|
if (filename[i] == PLATFORM_SEP_CHAR || filename[i] == PLATFORM_SEP_ALTCHAR)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename[i] == '.' && i != end)
|
if (filename[i] == '.' && i != end && i != 0)
|
||||||
{
|
{
|
||||||
return &filename[++i];
|
return &filename[++i];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ public:
|
|||||||
bool CreateFolder(const char *path);
|
bool CreateFolder(const char *path);
|
||||||
size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path);
|
size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path);
|
||||||
bool FileTime(const char *path, FileTimeType type, time_t *pTime);
|
bool FileTime(const char *path, FileTimeType type, time_t *pTime);
|
||||||
|
void GetLoaderError(char *buffer, size_t maxlength);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern LibrarySystem g_LibSys;
|
extern LibrarySystem g_LibSys;
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "SourceMod Core"
|
VALUE "FileDescription", "SourceMod Core"
|
||||||
VALUE "FileVersion", SVN_FULL_VERSION
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
VALUE "InternalName", "sourcemod"
|
VALUE "InternalName", "sourcemod"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
VALUE "OriginalFilename", "sourcemod_mm.dll"
|
VALUE "OriginalFilename", "sourcemod_mm.dll"
|
||||||
VALUE "ProductName", "SourceMod"
|
VALUE "ProductName", "SourceMod"
|
||||||
VALUE "ProductVersion", SVN_FULL_VERSION
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ cellsof chars sizeof tagof
|
|||||||
|
|
||||||
# Predefined constants
|
# Predefined constants
|
||||||
false true cellbits cellmax cellmin charbits charmax charmin myinfo INVALID_HANDLE
|
false true cellbits cellmax cellmin charbits charmax charmin myinfo INVALID_HANDLE
|
||||||
__version
|
__version NULL_VECTOR NULL_STRING
|
||||||
|
|
||||||
# Predefined tag names
|
# Predefined tag names
|
||||||
bool Float Handle String
|
bool Float Handle String
|
||||||
|
|||||||
Binary file not shown.
@@ -1,62 +0,0 @@
|
|||||||
/* ======== Basic Admin tool ========
|
|
||||||
* Copyright (C) 2004-2006 Erling K. Sæterdal
|
|
||||||
* No warranties of any kind
|
|
||||||
*
|
|
||||||
* License: zlib/libpng
|
|
||||||
*
|
|
||||||
* Author(s): Erling K. Sæterdal ( EKS )
|
|
||||||
* Credits:
|
|
||||||
* Menu code based on code from CSDM ( http://www.tcwonline.org/~dvander/cssdm ) Created by BAILOPAN
|
|
||||||
* Helping on misc errors/functions: BAILOPAN,LDuke,sslice,devicenull,PMOnoTo,cybermind ( most who idle in #sourcemod on GameSurge realy )
|
|
||||||
* ============================ */
|
|
||||||
|
|
||||||
#ifndef _INCLUDE_BATINTERFACE
|
|
||||||
#define _INCLUDE_BATINTERFACE
|
|
||||||
#include <ISmmPlugin.h>
|
|
||||||
|
|
||||||
#define ADMININTERFACE_VERSION 0
|
|
||||||
#define ADMININTERFACE_MAXACCESSLENGTHTEXT 50 // This is the maximum length of a "flag" access text.
|
|
||||||
|
|
||||||
//#include "BATMenu.h"
|
|
||||||
|
|
||||||
//extern menuId g_AdminMenu;
|
|
||||||
class AdminInterfaceListner
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void OnAdminInterfaceUnload()=0;
|
|
||||||
virtual void Client_Authorized(int id)=0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class AdminInterface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual bool RegisterFlag(const char *Class,const char *Flag,const char *Description) = 0; // Registers a new admin access
|
|
||||||
virtual bool IsClient(int id) = 0; // returns false if client is bot, or NOT connected
|
|
||||||
virtual bool HasFlag(int id,const char *Flag) = 0; // returns true if the player has this access flag, lower case only
|
|
||||||
virtual int GetInterfaceVersion() = 0 ; // Returns the interface version of the admin mod
|
|
||||||
virtual const char* GetModName() = 0; // Returns the name of the current admin mod
|
|
||||||
virtual void AddEventListner(AdminInterfaceListner *ptr) = 0; // You should ALLWAYS set this, so you know when the "server" plugin gets unloaded
|
|
||||||
virtual void RemoveListner(AdminInterfaceListner *ptr) = 0; // You MUST CALL this function in your plugin unloads function, or the admin plugin will crash on next client connect.
|
|
||||||
};
|
|
||||||
|
|
||||||
class BATAdminInterface : public AdminInterface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool RegisterFlag(const char *Class,const char *Flag,const char *Description); // Max 1 admin access at the time, returns true if done successfully
|
|
||||||
bool IsClient(int id); // returns false if client is bot, or NOT connected
|
|
||||||
bool HasFlag(int id,const char *Flag); // returns true if the player has this access flag
|
|
||||||
int GetInterfaceVersion() { return ADMININTERFACE_VERSION; } // Returns the interface version of the admin mod
|
|
||||||
const char* GetModName() { return "BAT"; } // Returns the name of the current admin mod
|
|
||||||
void AddEventListner(AdminInterfaceListner *ptr); // You should ALLWAYS set this, so you know when the "server" plugin gets unloaded
|
|
||||||
void RemoveListner(AdminInterfaceListner *ptr);
|
|
||||||
private:
|
|
||||||
char GetFlagFromInt(int CharIndex);
|
|
||||||
bool CustomAccessExistence(const char *Flag);
|
|
||||||
};
|
|
||||||
class MyListener : public IMetamodListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void *OnMetamodQuery(const char *iface, int *ret);
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
#(C)2004-2006 SourceMM Development Team
|
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
|
||||||
|
|
||||||
SMSDK = ../..
|
|
||||||
SRCDS = ~/srcds
|
|
||||||
SOURCEMM = ../../../../sourcemm
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
|
||||||
#####################################
|
|
||||||
|
|
||||||
PROJECT = batsupport
|
|
||||||
|
|
||||||
#Uncomment for SourceMM-enabled extensions
|
|
||||||
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp
|
|
||||||
|
|
||||||
##############################################
|
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
|
||||||
##############################################
|
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
|
||||||
CPP = gcc-4.1
|
|
||||||
|
|
||||||
HL2PUB = $(HL2SDK)/public
|
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
|
||||||
HL2SDK = $(SOURCEMM)/hl2sdk
|
|
||||||
SMM_TRUNK = $(SOURCEMM)/trunk
|
|
||||||
|
|
||||||
LINK = $(LINK_HL2) -static-libgcc
|
|
||||||
|
|
||||||
INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_TRUNK) -I$(SMM_TRUNK)/sourcehook -I$(SMM_TRUNK)/sourcemm \
|
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \
|
|
||||||
|
|
||||||
CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -msse -DSOURCEMOD_BUILD
|
|
||||||
CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
|
||||||
|
|
||||||
################################################
|
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
|
||||||
################################################
|
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
|
||||||
BIN_DIR = Debug
|
|
||||||
CFLAGS += $(C_DEBUG_FLAGS)
|
|
||||||
else
|
|
||||||
BIN_DIR = Release
|
|
||||||
CFLAGS += $(C_OPT_FLAGS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
BINARY = $(PROJECT).ext.so
|
|
||||||
|
|
||||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
|
||||||
|
|
||||||
all:
|
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
|
||||||
$(MAKE) extension
|
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
|
||||||
|
|
||||||
debug:
|
|
||||||
$(MAKE) all DEBUG=true
|
|
||||||
|
|
||||||
default: all
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf Release/*.o
|
|
||||||
rm -rf Release/sdk/*.o
|
|
||||||
rm -rf Release/$(BINARY)
|
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/sdk/*.o
|
|
||||||
rm -rf Debug/$(BINARY)
|
|
||||||
@@ -1,270 +0,0 @@
|
|||||||
/**
|
|
||||||
* vim: set ts=4 :
|
|
||||||
* =============================================================================
|
|
||||||
* SourceMod BAT Support Extension
|
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
|
||||||
* =============================================================================
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
|
||||||
* Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
|
||||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
|
||||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
|
||||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
|
||||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
|
||||||
* this exception to all derivative works. AlliedModders LLC defines further
|
|
||||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
|
||||||
* or <http://www.sourcemod.net/license.php>.
|
|
||||||
*
|
|
||||||
* Version: $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <IAdminSystem.h>
|
|
||||||
#include <IPlayerHelpers.h>
|
|
||||||
#include "extension.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file extension.cpp
|
|
||||||
* @brief Implements BAT Support extension code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
BatSupport g_BatSupport; /**< Global singleton for your extension's main interface */
|
|
||||||
IAdminSystem *admins = NULL;
|
|
||||||
IPlayerManager *players = NULL;
|
|
||||||
SMEXT_LINK(&g_BatSupport);
|
|
||||||
|
|
||||||
bool BatSupport::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
|
||||||
{
|
|
||||||
SM_GET_IFACE(ADMINSYS, admins);
|
|
||||||
SM_GET_IFACE(PLAYERMANAGER, players);
|
|
||||||
|
|
||||||
players->AddClientListener(this);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BatSupport::SDK_OnUnload()
|
|
||||||
{
|
|
||||||
players->RemoveClientListener(this);
|
|
||||||
|
|
||||||
List<AdminInterfaceListner *>::iterator iter;
|
|
||||||
AdminInterfaceListner *hook;
|
|
||||||
|
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
|
||||||
{
|
|
||||||
hook = (*iter);
|
|
||||||
hook->OnAdminInterfaceUnload();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In case plugins don't do this */
|
|
||||||
m_hooks.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BatSupport::SDK_OnMetamodLoad(char *error, size_t maxlength, bool late)
|
|
||||||
{
|
|
||||||
g_SMAPI->AddListener(this, this);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BatSupport::OnClientAuthorized(int client, const char *authstring)
|
|
||||||
{
|
|
||||||
List<AdminInterfaceListner *>::iterator iter;
|
|
||||||
AdminInterfaceListner *hook;
|
|
||||||
|
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
|
||||||
{
|
|
||||||
hook = (*iter);
|
|
||||||
hook->Client_Authorized(client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *BatSupport::GetModName()
|
|
||||||
{
|
|
||||||
return "SourceMod";
|
|
||||||
}
|
|
||||||
|
|
||||||
int BatSupport::GetInterfaceVersion()
|
|
||||||
{
|
|
||||||
return ADMININTERFACE_VERSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *BatSupport::OnMetamodQuery(const char *iface, int *ret)
|
|
||||||
{
|
|
||||||
if (strcmp(iface, "AdminInterface") == 0)
|
|
||||||
{
|
|
||||||
AdminInterface *pThis = this;
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
*ret = IFACE_OK;
|
|
||||||
}
|
|
||||||
return pThis;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
*ret = IFACE_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BatSupport::RegisterFlag(const char *Class,const char *Flag,const char *Description)
|
|
||||||
{
|
|
||||||
/* No empty flags */
|
|
||||||
if (Flag[0] == '\0')
|
|
||||||
{
|
|
||||||
g_pSM->LogError(myself, "BAT AdminInterface support tried to register a blank flag");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We only support up to 6 custom flags for SourceMod */
|
|
||||||
if (m_flags.size() >= 6)
|
|
||||||
{
|
|
||||||
g_pSM->LogError(myself, "BAT AdminInterface support reached maximum number of custom flags");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CustomFlag>::iterator iter;
|
|
||||||
for (iter=m_flags.begin(); iter!=m_flags.end(); iter++)
|
|
||||||
{
|
|
||||||
CustomFlag &cf = (*iter);
|
|
||||||
/* Ignore already registered, in case plugin is reloading */
|
|
||||||
if (cf.name.compare(Flag) == 0)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_pSM->LogMessage(myself,
|
|
||||||
"BAT AdminInterface support registered Admin_Custom%d (class \"%s\") (flag \"%s\") (descr \"%s\")",
|
|
||||||
m_flags.size() + 1,
|
|
||||||
Class,
|
|
||||||
Flag,
|
|
||||||
Description);
|
|
||||||
|
|
||||||
unsigned int f = (unsigned int)Admin_Custom1;
|
|
||||||
f += m_flags.size();
|
|
||||||
|
|
||||||
CustomFlag cf;
|
|
||||||
cf.bit = (1<<f);
|
|
||||||
cf.flag = (AdminFlag)f;
|
|
||||||
cf.name.assign(Flag);
|
|
||||||
|
|
||||||
m_flags.push_back(cf);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BatSupport::IsClient(int id)
|
|
||||||
{
|
|
||||||
IGamePlayer *pPlayer = players->GetGamePlayer(id);
|
|
||||||
|
|
||||||
if (!pPlayer)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pPlayer->IsConnected())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pPlayer->IsFakeClient())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BatSupport::AddEventListner(AdminInterfaceListner *ptr)
|
|
||||||
{
|
|
||||||
m_hooks.push_back(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BatSupport::RemoveListner(AdminInterfaceListner *ptr)
|
|
||||||
{
|
|
||||||
m_hooks.remove(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BatSupport::HasFlag(int id,const char *Flag)
|
|
||||||
{
|
|
||||||
IGamePlayer *pPlayer = players->GetGamePlayer(id);
|
|
||||||
|
|
||||||
if (!pPlayer || !pPlayer->IsConnected())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
AdminId admin = pPlayer->GetAdminId();
|
|
||||||
if (admin == INVALID_ADMIN_ID)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
FlagBits bits = admins->GetAdminFlags(admin, Access_Effective);
|
|
||||||
|
|
||||||
/* Root has it all... except for immunity */
|
|
||||||
if ((strcmp(Flag, "immunity") != 0)
|
|
||||||
&& ((bits & ADMFLAG_ROOT) == ADMFLAG_ROOT))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(Flag, "any"))
|
|
||||||
{
|
|
||||||
return ((bits & ~ADMFLAG_RESERVATION) != 0);
|
|
||||||
} else if (!strcmp(Flag, "kick")) {
|
|
||||||
return ((bits & ADMFLAG_KICK) == ADMFLAG_KICK);
|
|
||||||
} else if (!strcmp(Flag, "slap")) {
|
|
||||||
return ((bits & ADMFLAG_SLAY) == ADMFLAG_SLAY);
|
|
||||||
} else if (!strcmp(Flag, "slay")) {
|
|
||||||
return ((bits & ADMFLAG_SLAY) == ADMFLAG_SLAY);
|
|
||||||
} else if (!strcmp(Flag, "ban")) {
|
|
||||||
return ((bits & ADMFLAG_BAN) == ADMFLAG_BAN);
|
|
||||||
} else if (!strcmp(Flag, "chat")) {
|
|
||||||
return ((bits & ADMFLAG_CHAT) == ADMFLAG_CHAT);
|
|
||||||
} else if (!strcmp(Flag, "rcon")) {
|
|
||||||
return ((bits & ADMFLAG_RCON) == ADMFLAG_RCON);
|
|
||||||
} else if (!strcmp(Flag, "map")) {
|
|
||||||
return ((bits & ADMFLAG_CHANGEMAP) == ADMFLAG_CHANGEMAP);
|
|
||||||
} else if (!strcmp(Flag, "reservedslots")) {
|
|
||||||
return ((bits & ADMFLAG_RESERVATION) == ADMFLAG_RESERVATION);
|
|
||||||
} else if (!strcmp(Flag, "immunuty")) {
|
|
||||||
/* This is a bit different... */
|
|
||||||
unsigned int count = admins->GetAdminGroupCount(admin);
|
|
||||||
for (unsigned int i=0; i<count; i++)
|
|
||||||
{
|
|
||||||
GroupId gid = admins->GetAdminGroup(admin, i, NULL);
|
|
||||||
if (admins->GetGroupGenericImmunity(gid, Immunity_Default)
|
|
||||||
|| admins->GetGroupGenericImmunity(gid, Immunity_Global))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CustomFlag>::iterator iter;
|
|
||||||
for (iter=m_flags.begin(); iter!=m_flags.end(); iter++)
|
|
||||||
{
|
|
||||||
CustomFlag &cf = (*iter);
|
|
||||||
if (cf.name.compare(Flag) == 0)
|
|
||||||
{
|
|
||||||
return ((bits & cf.bit) == cf.bit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
/**
|
|
||||||
* vim: set ts=4 :
|
|
||||||
* =============================================================================
|
|
||||||
* SourceMod BAT Support Extension
|
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
|
||||||
* =============================================================================
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
|
||||||
* Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
|
||||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
|
||||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
|
||||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
|
||||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
|
||||||
* this exception to all derivative works. AlliedModders LLC defines further
|
|
||||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
|
||||||
* or <http://www.sourcemod.net/license.php>.
|
|
||||||
*
|
|
||||||
* Version: $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
|
||||||
#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file extension.h
|
|
||||||
* @brief BAT Support extension code header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "smsdk_ext.h"
|
|
||||||
#include "BATInterface.h"
|
|
||||||
#include <sh_list.h>
|
|
||||||
#include <sh_string.h>
|
|
||||||
|
|
||||||
using namespace SourceHook;
|
|
||||||
|
|
||||||
struct CustomFlag
|
|
||||||
{
|
|
||||||
String name;
|
|
||||||
AdminFlag flag;
|
|
||||||
FlagBits bit;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Implementation of the BAT Support extension.
|
|
||||||
* Note: Uncomment one of the pre-defined virtual functions in order to use it.
|
|
||||||
*/
|
|
||||||
class BatSupport :
|
|
||||||
public SDKExtension,
|
|
||||||
public IMetamodListener,
|
|
||||||
public AdminInterface,
|
|
||||||
public IClientListener
|
|
||||||
{
|
|
||||||
public: // SDKExtension
|
|
||||||
bool SDK_OnLoad(char *error, size_t maxlength, bool late);
|
|
||||||
void SDK_OnUnload();
|
|
||||||
bool SDK_OnMetamodLoad(char *error, size_t maxlength, bool late);
|
|
||||||
public: // IMetamodListener
|
|
||||||
void *OnMetamodQuery(const char *iface, int *ret);
|
|
||||||
public: // AdminInterface
|
|
||||||
bool RegisterFlag(const char *Class, const char *Flag, const char *Description);
|
|
||||||
bool IsClient(int id);
|
|
||||||
bool HasFlag(int id, const char *Flag);
|
|
||||||
int GetInterfaceVersion();
|
|
||||||
const char* GetModName();
|
|
||||||
void AddEventListner(AdminInterfaceListner *ptr);
|
|
||||||
void RemoveListner(AdminInterfaceListner *ptr);
|
|
||||||
public: // IClientListener
|
|
||||||
void OnClientAuthorized(int client, const char *authstring);
|
|
||||||
private:
|
|
||||||
List<AdminInterfaceListner *> m_hooks;
|
|
||||||
List<CustomFlag> m_flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
#(C)2004-2006 SourceMM Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
SMSDK = ../..
|
SMSDK = ../..
|
||||||
SRCDS = ~/srcds
|
SRCDS_BASE = ~/srcds
|
||||||
SOURCEMM = ../../../sourcemm
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
@@ -11,8 +14,8 @@ SOURCEMM = ../../../sourcemm
|
|||||||
|
|
||||||
PROJECT = bintools
|
PROJECT = bintools
|
||||||
|
|
||||||
#Uncomment for SourceMM-enabled extensions
|
#Uncomment for Metamod: Source enabled extension
|
||||||
#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
#USEMETA = true
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp jit_call.cpp CallWrapper.cpp CallMaker.cpp
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp jit_call.cpp CallWrapper.cpp CallMaker.cpp
|
||||||
|
|
||||||
@@ -20,28 +23,52 @@ OBJECTS = sdk/smsdk_ext.cpp extension.cpp jit_call.cpp CallWrapper.cpp CallMaker
|
|||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
CPP = gcc-4.1
|
CPP = gcc-4.1
|
||||||
|
|
||||||
HL2PUB = $(HL2SDK)/public
|
override ENGSET = false
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(SOURCEMM)/hl2sdk
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
SMM_TRUNK = $(SOURCEMM)/trunk
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
|
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||||
|
METAMOD = $(SOURCEMM14)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
|
HL2SDK = $(HL2SDK_OB)
|
||||||
|
HL2PUB = $(HL2SDK_OB)/public
|
||||||
|
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||||
|
CFLAGS += -DORANGEBOX_BUILD
|
||||||
|
METAMOD = $(SOURCEMM16)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
|
||||||
LINK = $(LINK_HL2) -static-libgcc
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
||||||
|
|
||||||
INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
LINK += $(LINK_HL2)
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_TRUNK) -I$(SMM_TRUNK)/sourcehook -I$(SMM_TRUNK)/sourcemm \
|
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions -I$(SMSDK)/public/jit \
|
|
||||||
-I$(SMSDK)/public/jit/x86
|
|
||||||
|
|
||||||
CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \
|
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
-Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \
|
-I$(SMSDK)/public/sourcepawn
|
||||||
-m32
|
else
|
||||||
CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -m32
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/extensions -I$(SMSDK)/public/jit \
|
||||||
|
-I$(SMSDK)/public/jit/x86 -I$(SMSDK)/public/sourcepawn
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINK += -static-libgcc
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse \
|
||||||
|
-msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
@@ -55,9 +82,13 @@ else
|
|||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -68,24 +99,29 @@ OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all: check
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so; \
|
||||||
$(MAKE) extension
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
check:
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) all DEBUG=true
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf Release/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf Release/sdk/*.o
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
rm -rf Release/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/sdk/*.o
|
|
||||||
rm -rf Debug/$(BINARY)
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8,00"
|
Version="8.00"
|
||||||
Name="bintools"
|
Name="bintools"
|
||||||
ProjectGUID="{E38F65D9-74B2-4373-B46A-DBB76F579F98}"
|
ProjectGUID="{E38F65D9-74B2-4373-B46A-DBB76F579F98}"
|
||||||
RootNamespace="bintools"
|
RootNamespace="bintools"
|
||||||
@@ -65,6 +65,7 @@
|
|||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
OutputFile="$(OutDir)\bintools.ext.dll"
|
OutputFile="$(OutDir)\bintools.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -143,6 +144,7 @@
|
|||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
OutputFile="$(OutDir)\bintools.ext.dll"
|
OutputFile="$(OutDir)\bintools.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod BinTools Extension
|
* SourceMod BinTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod BinTools Extension
|
* SourceMod BinTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_BINTOOLS_VERSION_H_
|
#ifndef _INCLUDE_BINTOOLS_VERSION_H_
|
||||||
#define _INCLUDE_BINTOOLS_VERSION_H_
|
#define _INCLUDE_BINTOOLS_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "1.0.0.1900"
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
#define SVN_FILE_VERSION 1,0,0,1900
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
#endif //_INCLUDE_BINTOOLS_VERSION_H_
|
#endif //_INCLUDE_BINTOOLS_VERSION_H_
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod BinTools Extension
|
* SourceMod BinTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_BINTOOLS_VERSION_H_
|
#ifndef _INCLUDE_BINTOOLS_VERSION_H_
|
||||||
#define _INCLUDE_BINTOOLS_VERSION_H_
|
#define _INCLUDE_BINTOOLS_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$LOCAL_BUILD$"
|
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$GLOBAL_BUILD$"
|
||||||
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$LOCAL_BUILD$
|
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$GLOBAL_BUILD$
|
||||||
|
|
||||||
#endif //_INCLUDE_BINTOOLS_VERSION_H_
|
#endif //_INCLUDE_BINTOOLS_VERSION_H_
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "SourceMod BinTools Extension"
|
VALUE "FileDescription", "SourceMod BinTools Extension"
|
||||||
VALUE "FileVersion", SVN_FULL_VERSION
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
VALUE "InternalName", "SourceMod BinTools Extension"
|
VALUE "InternalName", "SourceMod BinTools Extension"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
VALUE "OriginalFilename", "bintools.ext.dll"
|
VALUE "OriginalFilename", "bintools.ext.dll"
|
||||||
VALUE "ProductName", "SourceMod BinTools Extension"
|
VALUE "ProductName", "SourceMod BinTools Extension"
|
||||||
VALUE "ProductVersion", SVN_FULL_VERSION
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
|||||||
+49
-27
@@ -1,12 +1,12 @@
|
|||||||
#(C)2004-2008 Metamod:Source Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
|
SMSDK = ../..
|
||||||
|
SRCDS_BASE = ~/srcds
|
||||||
HL2SDK_ORIG = ../../../hl2sdk
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
HL2SDK_OB = ../../../hl2sdk-ob
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
SOURCEMM14 = ../../../sourcemm-1.4
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
SOURCEMM16 = ../../../sourcemm-1.6
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
SRCDS_BASE = ~/srcds
|
|
||||||
SMSDK = ../..
|
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
@@ -14,17 +14,22 @@ SMSDK = ../..
|
|||||||
|
|
||||||
PROJECT = game.cstrike
|
PROJECT = game.cstrike
|
||||||
|
|
||||||
|
#Uncomment for Metamod: Source enabled extension
|
||||||
|
USEMETA = true
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp timeleft.cpp
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
CPP = gcc-4.1
|
CPP = gcc-4.1
|
||||||
|
|
||||||
|
override ENGSET = false
|
||||||
ifeq "$(ENGINE)" "original"
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(HL2SDK_ORIG)
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
HL2PUB = $(HL2SDK_ORIG)/public
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
@@ -32,6 +37,7 @@ ifeq "$(ENGINE)" "original"
|
|||||||
METAMOD = $(SOURCEMM14)
|
METAMOD = $(SOURCEMM14)
|
||||||
INCLUDE += -I$(HL2SDK)/public/dlls
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
SRCDS = $(SRCDS_BASE)
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
endif
|
endif
|
||||||
ifeq "$(ENGINE)" "orangebox"
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
HL2SDK = $(HL2SDK_OB)
|
HL2SDK = $(HL2SDK_OB)
|
||||||
@@ -41,23 +47,26 @@ ifeq "$(ENGINE)" "orangebox"
|
|||||||
METAMOD = $(SOURCEMM16)
|
METAMOD = $(SOURCEMM16)
|
||||||
INCLUDE += -I$(HL2SDK)/public/game/server
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
SRCDS = $(SRCDS_BASE)/orangebox
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
endif
|
override ENGSET = true
|
||||||
ifeq "$(ENGINE)" ""
|
|
||||||
echo "You must supply ENGINE=orangebox or ENGINE=original"
|
|
||||||
false
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a tier0_i486.so
|
||||||
|
|
||||||
LINK += $(LINK_HL2) -static-libgcc
|
LINK += $(LINK_HL2)
|
||||||
|
|
||||||
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \
|
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions
|
-I$(SMSDK)/public/extensions -I$(SMSDK)/public/sourcepawn
|
||||||
|
else
|
||||||
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \
|
LINK += -static-libgcc
|
||||||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp \
|
|
||||||
-Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse \
|
||||||
|
-msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
@@ -65,16 +74,20 @@ CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
|||||||
################################################
|
################################################
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug.$(ENGINE)
|
BIN_DIR = Debug
|
||||||
CFLAGS += $(C_DEBUG_FLAGS)
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release.$(ENGINE)
|
BIN_DIR = Release
|
||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -85,19 +98,28 @@ OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all: check
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
$(MAKE) -f Makefile extension
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
check:
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
debug:
|
||||||
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf $(BIN_DIR)/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf $(BIN_DIR)/sdk/*.o
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
rm -rf $(BIN_DIR)/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ extern sp_nativeinfo_t g_CSNatives[];
|
|||||||
|
|
||||||
bool CStrike::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
bool CStrike::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||||
{
|
{
|
||||||
|
if (strcmp(g_pSM->GetGameFolderName(), "cstrike") != 0)
|
||||||
|
{
|
||||||
|
snprintf(error, maxlength, "Cannot Load Cstrike Extension on mods other than CS:S");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
sharesys->AddDependency(myself, "bintools.ext", true, true);
|
sharesys->AddDependency(myself, "bintools.ext", true, true);
|
||||||
|
|
||||||
char conf_error[255];
|
char conf_error[255];
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug - Old Metamod|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="2"
|
ConfigurationType="2"
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -63,9 +63,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="tier0.lib"
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib""
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -96,7 +97,7 @@
|
|||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release - Old Metamod|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="2"
|
ConfigurationType="2"
|
||||||
@@ -121,7 +122,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableEnhancedInstructionSet="1"
|
EnableEnhancedInstructionSet="1"
|
||||||
@@ -142,8 +143,173 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib""
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug - Orange Box|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
EnableEnhancedInstructionSet="1"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib""
|
||||||
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release - Orange Box|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
FavorSizeOrSpeed="1"
|
||||||
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableEnhancedInstructionSet="1"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib""
|
||||||
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
@@ -200,7 +366,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -223,9 +389,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib""
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -255,328 +422,6 @@
|
|||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
|
||||||
Name="Debug - Orange Box|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug - Old Metamod|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM14);$(SOURCEMM14)\sourcemm;$(SOURCEMM14)\sourcehook"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release - Old Metamod|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM14);$(SOURCEMM14)\sourcemm;$(SOURCEMM14)\sourcehook"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release - Orange Box|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDKOB)\public;$(HL2SDKOB)\public\dlls;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;$(HL2SDKOB)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release - Episode 1|Win32"
|
Name="Release - Episode 1|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
@@ -603,7 +448,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;$(HL2SDK)\tier1;$(SOURCEMM16);$(SOURCEMM16)\sourcemm;$(SOURCEMM16)\sourcehook"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CSTRIKE_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableEnhancedInstructionSet="1"
|
EnableEnhancedInstructionSet="1"
|
||||||
@@ -624,9 +469,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib""
|
||||||
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
OutputFile="$(OutDir)\game.cstrike.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Counter-Strike:Source Extension
|
* SourceMod Counter-Strike:Source Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod SDKTools Extension
|
* SourceMod Counter-Strike:Source Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_SDKTOOLS_VERSION_H_
|
#ifndef _INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
#define _INCLUDE_SDKTOOLS_VERSION_H_
|
#define _INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "1.0.0.1884"
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
#define SVN_FILE_VERSION 1,0,0,1884
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
#endif //_INCLUDE_SDKTOOLS_VERSION_H_
|
#endif //_INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod SDKTools Extension
|
* SourceMod Counter-Strike:Source Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_SDKTOOLS_VERSION_H_
|
#ifndef _INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
#define _INCLUDE_SDKTOOLS_VERSION_H_
|
#define _INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$LOCAL_BUILD$"
|
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$GLOBAL_BUILD$"
|
||||||
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$LOCAL_BUILD$
|
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$GLOBAL_BUILD$
|
||||||
|
|
||||||
#endif //_INCLUDE_SDKTOOLS_VERSION_H_
|
#endif //_INCLUDE_SDKTOOLS_VERSION_H_
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "SourceMod CS:S Extension"
|
VALUE "FileDescription", "SourceMod CS:S Extension"
|
||||||
VALUE "FileVersion", SVN_FULL_VERSION
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
VALUE "InternalName", "SourceMod CS:S Extension"
|
VALUE "InternalName", "SourceMod CS:S Extension"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
VALUE "OriginalFilename", "game.cstrike.ext.dll"
|
VALUE "OriginalFilename", "game.cstrike.ext.dll"
|
||||||
VALUE "ProductName", "SourceMod CS:S Extension"
|
VALUE "ProductName", "SourceMod CS:S Extension"
|
||||||
VALUE "ProductVersion", SVN_FULL_VERSION
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
|||||||
+71
-39
@@ -1,9 +1,12 @@
|
|||||||
#(C)2004-2006 SourceMM Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
SMSDK = ../..
|
SMSDK = ../..
|
||||||
SRCDS = ~/srcds
|
SRCDS_BASE = ~/srcds
|
||||||
SOURCEMM = ../../../sourcemm-1.6
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
@@ -11,8 +14,8 @@ SOURCEMM = ../../../sourcemm-1.6
|
|||||||
|
|
||||||
PROJECT = geoip
|
PROJECT = geoip
|
||||||
|
|
||||||
#Uncomment for SourceMM-enabled extensions
|
#Uncomment for Metamod: Source enabled extension
|
||||||
#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
#USEMETA = true
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp GeoIP.c
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp GeoIP.c
|
||||||
|
|
||||||
@@ -20,27 +23,51 @@ OBJECTS = sdk/smsdk_ext.cpp extension.cpp GeoIP.c
|
|||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
CPP = gcc-4.1
|
CPP = gcc-4.1
|
||||||
|
|
||||||
HL2PUB = $(HL2SDK)/public
|
override ENGSET = false
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(SOURCEMM)/hl2sdk
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
SMM_TRUNK = $(SOURCEMM)/trunk
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
|
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||||
|
METAMOD = $(SOURCEMM14)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
|
HL2SDK = $(HL2SDK_OB)
|
||||||
|
HL2PUB = $(HL2SDK_OB)/public
|
||||||
|
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||||
|
CFLAGS += -DORANGEBOX_BUILD
|
||||||
|
METAMOD = $(SOURCEMM16)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
|
||||||
LINK = $(LINK_HL2) -static-libgcc
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
||||||
|
|
||||||
INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
LINK += $(LINK_HL2)
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_TRUNK) -I$(SMM_TRUNK)/sourcehook -I$(SMM_TRUNK)/sourcemm \
|
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \
|
|
||||||
|
|
||||||
CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \
|
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
-Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD \
|
-I$(SMSDK)/public/sourcepawn
|
||||||
-m32
|
else
|
||||||
CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINK += -static-libgcc
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse \
|
||||||
|
-msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
@@ -54,41 +81,46 @@ else
|
|||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BINARY = $(PROJECT).ext.so
|
BINARY = $(PROJECT).ext.so
|
||||||
|
|
||||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o)
|
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.c
|
all: check
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
|
||||||
|
|
||||||
all:
|
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so; \
|
||||||
$(MAKE) extension
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
check:
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) all DEBUG=true
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf Release/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf Release/sdk/*.o
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
rm -rf Release/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/sdk/*.o
|
|
||||||
rm -rf Debug/$(BINARY)
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8,00"
|
Version="8.00"
|
||||||
Name="geoip"
|
Name="geoip"
|
||||||
ProjectGUID="{698EAEE7-0EFC-4017-9B88-ECCAAF42FD5F}"
|
ProjectGUID="{698EAEE7-0EFC-4017-9B88-ECCAAF42FD5F}"
|
||||||
RootNamespace="geoip"
|
RootNamespace="geoip"
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
AdditionalDependencies="ws2_32.lib"
|
AdditionalDependencies="ws2_32.lib"
|
||||||
OutputFile="$(OutDir)\geoip.ext.dll"
|
OutputFile="$(OutDir)\geoip.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -145,6 +146,7 @@
|
|||||||
AdditionalDependencies="ws2_32.lib"
|
AdditionalDependencies="ws2_32.lib"
|
||||||
OutputFile="$(OutDir)\geoip.ext.dll"
|
OutputFile="$(OutDir)\geoip.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod GeoIP Extension
|
* SourceMod GeoIP Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod GeoIP Extension
|
* SourceMod GeoIP Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_GEOIP_VERSION_H_
|
#ifndef _INCLUDE_GEOIP_VERSION_H_
|
||||||
#define _INCLUDE_GEOIP_VERSION_H_
|
#define _INCLUDE_GEOIP_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "1.0.0.1884"
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
#define SVN_FILE_VERSION 1,0,0,1884
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
#endif //_INCLUDE_GEOIP_VERSION_H_
|
#endif //_INCLUDE_GEOIP_VERSION_H_
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod GeoIP Extension
|
* SourceMod GeoIP Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_GEOIP_VERSION_H_
|
#ifndef _INCLUDE_GEOIP_VERSION_H_
|
||||||
#define _INCLUDE_GEOIP_VERSION_H_
|
#define _INCLUDE_GEOIP_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$LOCAL_BUILD$"
|
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$GLOBAL_BUILD$"
|
||||||
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$LOCAL_BUILD$
|
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$GLOBAL_BUILD$
|
||||||
|
|
||||||
#endif //_INCLUDE_GEOIP_VERSION_H_
|
#endif //_INCLUDE_GEOIP_VERSION_H_
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "SourceMod GeoIP Extension"
|
VALUE "FileDescription", "SourceMod GeoIP Extension"
|
||||||
VALUE "FileVersion", SVN_FULL_VERSION
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
VALUE "InternalName", "SourceMod GeoIP Extension"
|
VALUE "InternalName", "SourceMod GeoIP Extension"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
VALUE "OriginalFilename", "geoip.ext.dll"
|
VALUE "OriginalFilename", "geoip.ext.dll"
|
||||||
VALUE "ProductName", "SourceMod GeoIP Extension"
|
VALUE "ProductName", "SourceMod GeoIP Extension"
|
||||||
VALUE "ProductVersion", SVN_FULL_VERSION
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
|||||||
+73
-39
@@ -1,9 +1,12 @@
|
|||||||
#(C)2004-2006 SourceMM Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
SMSDK = ../..
|
SMSDK = ../..
|
||||||
SRCDS = ~/srcds
|
SRCDS_BASE = ~/srcds
|
||||||
SOURCEMM = ../../../sourcemm-1.6
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
MYSQL = ../../../mysql-5.0
|
MYSQL = ../../../mysql-5.0
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
@@ -12,8 +15,8 @@ MYSQL = ../../../mysql-5.0
|
|||||||
|
|
||||||
PROJECT = dbi.mysql
|
PROJECT = dbi.mysql
|
||||||
|
|
||||||
#Uncomment for SourceMM-enabled extensions
|
#Uncomment for Metamod: Source enabled extension
|
||||||
#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
#USEMETA = true
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp \
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp \
|
||||||
mysql/MyBasicResults.cpp mysql/MyDatabase.cpp \
|
mysql/MyBasicResults.cpp mysql/MyDatabase.cpp \
|
||||||
@@ -24,28 +27,52 @@ OBJECTS = sdk/smsdk_ext.cpp extension.cpp \
|
|||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
CPP = gcc-4.1
|
CPP = gcc-4.1
|
||||||
|
|
||||||
HL2PUB = $(HL2SDK)/public
|
override ENGSET = false
|
||||||
HL2LIB = $(HL2SDK)/linux_sdk
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(SOURCEMM)/hl2sdk
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
|
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||||
|
METAMOD = $(SOURCEMM14)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
|
HL2SDK = $(HL2SDK_OB)
|
||||||
|
HL2PUB = $(HL2SDK_OB)/public
|
||||||
|
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||||
|
CFLAGS += -DORANGEBOX_BUILD
|
||||||
|
METAMOD = $(SOURCEMM16)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
|
||||||
LINK = $(LINK_HL2) $(MYSQL)/lib/libmysqlclient_r.a -lz -static-libgcc -lpthread
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
||||||
|
|
||||||
INCLUDE = -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine \
|
LINK += $(LINK_HL2)
|
||||||
-I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 \
|
|
||||||
-I$(SOURCEMM) -I$(SOURCEMM)/sourcehook -I$(SOURCEMM)/sourcemm \
|
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \
|
|
||||||
-I$(MYSQL)/include
|
|
||||||
|
|
||||||
CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \
|
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
-Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H \
|
-I$(SMSDK)/public/sourcepawn
|
||||||
-Wno-switch -m32
|
else
|
||||||
CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SOURCEMM16)/sourcehook \
|
||||||
|
-I$(MYSQL)/include
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINK += $(MYSQL)/lib/libmysqlclient_r.a -lz -static-libgcc -lpthread
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \
|
||||||
|
-mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
@@ -59,9 +86,13 @@ else
|
|||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -72,28 +103,31 @@ OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all: check
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
mkdir -p $(BIN_DIR)/mysql
|
mkdir -p $(BIN_DIR)/mysql
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so; \
|
||||||
$(MAKE) extension
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
check:
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) all DEBUG=true
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf Release/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf Release/sdk/*.o
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
rm -rf Release/mysql/*.o
|
rm -rf $(BIN_DIR)/mysql/*.o
|
||||||
rm -rf Release/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/sdk/*.o
|
|
||||||
rm -rf Debug/mysql/*.o
|
|
||||||
rm -rf Debug/$(BINARY)
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
AdditionalDependencies="wsock32.lib mysqlclient.lib zlib.lib"
|
AdditionalDependencies="wsock32.lib mysqlclient.lib zlib.lib"
|
||||||
OutputFile="$(OutDir)\dbi.mysql.ext.dll"
|
OutputFile="$(OutDir)\dbi.mysql.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
IgnoreDefaultLibraryNames="LIBCMT"
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;$(SOURCEMM)\sourcehook"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
StructMemberAlignment="3"
|
StructMemberAlignment="3"
|
||||||
@@ -148,6 +148,7 @@
|
|||||||
AdditionalDependencies="wsock32.lib mysqlclient.lib"
|
AdditionalDependencies="wsock32.lib mysqlclient.lib"
|
||||||
OutputFile="$(OutDir)\dbi.mysql.ext.dll"
|
OutputFile="$(OutDir)\dbi.mysql.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod MySQL Extension
|
* SourceMod MySQL Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod MySQL Extension
|
* SourceMod MySQL Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -89,6 +89,8 @@ MyBoundResults::MyBoundResults(MYSQL_STMT *stmt, MYSQL_RES *res)
|
|||||||
/* Zero data */
|
/* Zero data */
|
||||||
memset(m_bind, 0, sizeof(MYSQL_BIND) * m_ColCount);
|
memset(m_bind, 0, sizeof(MYSQL_BIND) * m_ColCount);
|
||||||
memset(m_pull, 0, sizeof(ResultBind) * m_ColCount);
|
memset(m_pull, 0, sizeof(ResultBind) * m_ColCount);
|
||||||
|
|
||||||
|
m_bUpdatedBinds = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
MyBoundResults::~MyBoundResults()
|
MyBoundResults::~MyBoundResults()
|
||||||
@@ -211,6 +213,15 @@ IResultRow *MyBoundResults::FetchRow()
|
|||||||
|
|
||||||
m_CurRow++;
|
m_CurRow++;
|
||||||
|
|
||||||
|
if (m_bUpdatedBinds)
|
||||||
|
{
|
||||||
|
if (mysql_stmt_bind_result(m_stmt, m_bind) != 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
m_bUpdatedBinds = false;
|
||||||
|
}
|
||||||
|
|
||||||
/* We should be able to get another row */
|
/* We should be able to get another row */
|
||||||
int err = mysql_stmt_fetch(m_stmt);
|
int err = mysql_stmt_fetch(m_stmt);
|
||||||
if (err == 0 || err == MYSQL_DATA_TRUNCATED)
|
if (err == 0 || err == MYSQL_DATA_TRUNCATED)
|
||||||
@@ -266,22 +277,29 @@ void ResizeBuffer(ResultBind *bind, size_t len)
|
|||||||
{
|
{
|
||||||
bind->blob = new unsigned char[len];
|
bind->blob = new unsigned char[len];
|
||||||
bind->length = len;
|
bind->length = len;
|
||||||
} else if (bind->length < len) {
|
}
|
||||||
|
else if (bind->length < len)
|
||||||
|
{
|
||||||
delete [] bind->blob;
|
delete [] bind->blob;
|
||||||
bind->blob = new unsigned char[len];
|
bind->blob = new unsigned char[len];
|
||||||
bind->length = len;
|
bind->length = len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RefetchField(MYSQL_STMT *stmt,
|
bool MyBoundResults::RefetchField(MYSQL_STMT *stmt,
|
||||||
ResultBind *rbind,
|
|
||||||
unsigned int id,
|
unsigned int id,
|
||||||
size_t initSize,
|
size_t initSize,
|
||||||
enum_field_types type)
|
enum_field_types type)
|
||||||
{
|
{
|
||||||
|
ResultBind *rbind = &m_pull[id];
|
||||||
|
|
||||||
/* Make sure there is a buffer to pull into */
|
/* Make sure there is a buffer to pull into */
|
||||||
ResizeBuffer(rbind, initSize);
|
ResizeBuffer(rbind, initSize);
|
||||||
|
|
||||||
|
/* Update the bind with the buffer size */
|
||||||
|
m_bind[id].buffer_length = (unsigned long)rbind->length;
|
||||||
|
m_bUpdatedBinds = true;
|
||||||
|
|
||||||
MYSQL_BIND bind;
|
MYSQL_BIND bind;
|
||||||
|
|
||||||
/* Initialize bind info */
|
/* Initialize bind info */
|
||||||
@@ -397,7 +415,7 @@ DBResult MyBoundResults::GetString(unsigned int id, const char **pString, size_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to refetch the string */
|
/* Attempt to refetch the string */
|
||||||
if (!RefetchField(m_stmt, &m_pull[id], id, 128, MYSQL_TYPE_STRING))
|
if (!RefetchField(m_stmt, id, 128, MYSQL_TYPE_STRING))
|
||||||
{
|
{
|
||||||
return DBVal_TypeMismatch;
|
return DBVal_TypeMismatch;
|
||||||
}
|
}
|
||||||
@@ -418,7 +436,7 @@ DBResult MyBoundResults::GetString(unsigned int id, const char **pString, size_t
|
|||||||
if ((size_t)(m_pull[id].my_length) >= m_pull[id].length)
|
if ((size_t)(m_pull[id].my_length) >= m_pull[id].length)
|
||||||
{
|
{
|
||||||
/* Yes, we need to refetch. */
|
/* Yes, we need to refetch. */
|
||||||
if (!RefetchField(m_stmt, &m_pull[id], id, m_pull[id].my_length + 1, MYSQL_TYPE_STRING))
|
if (!RefetchField(m_stmt, id, m_pull[id].my_length + 1, MYSQL_TYPE_STRING))
|
||||||
{
|
{
|
||||||
return DBVal_Error;
|
return DBVal_Error;
|
||||||
}
|
}
|
||||||
@@ -591,7 +609,7 @@ DBResult MyBoundResults::GetBlob(unsigned int id, const void **pData, size_t *le
|
|||||||
|
|
||||||
if ((size_t)m_pull[id].my_length > m_pull[id].length)
|
if ((size_t)m_pull[id].my_length > m_pull[id].length)
|
||||||
{
|
{
|
||||||
if (!RefetchField(m_stmt, &m_pull[id], id, m_pull[id].my_length, MYSQL_TYPE_BLOB))
|
if (!RefetchField(m_stmt, id, m_pull[id].my_length, MYSQL_TYPE_BLOB))
|
||||||
{
|
{
|
||||||
return DBVal_TypeMismatch;
|
return DBVal_TypeMismatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,11 @@ public: //IResultRow
|
|||||||
public:
|
public:
|
||||||
bool Initialize();
|
bool Initialize();
|
||||||
void Update();
|
void Update();
|
||||||
|
private:
|
||||||
|
bool RefetchField(MYSQL_STMT *stmt,
|
||||||
|
unsigned int id,
|
||||||
|
size_t initSize,
|
||||||
|
enum_field_types type);
|
||||||
private:
|
private:
|
||||||
MYSQL_STMT *m_stmt;
|
MYSQL_STMT *m_stmt;
|
||||||
MYSQL_RES *m_pRes;
|
MYSQL_RES *m_pRes;
|
||||||
@@ -92,6 +97,7 @@ private:
|
|||||||
bool m_Initialized;
|
bool m_Initialized;
|
||||||
unsigned int m_RowCount;
|
unsigned int m_RowCount;
|
||||||
unsigned int m_CurRow;
|
unsigned int m_CurRow;
|
||||||
|
bool m_bUpdatedBinds;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //_INCLUDE_SM_MYSQL_BOUND_RESULTS_H_
|
#endif //_INCLUDE_SM_MYSQL_BOUND_RESULTS_H_
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod MySQL Extension
|
* SourceMod MySQL Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod Base Extension Code
|
* SourceMod Base Extension Code
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod MySQL Extension
|
* SourceMod MySQL Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_MYSQLEXT_VERSION_H_
|
#ifndef _INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
#define _INCLUDE_MYSQLEXT_VERSION_H_
|
#define _INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "1.0.0.1918"
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
#define SVN_FILE_VERSION 1,0,0,1918
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
#endif //_INCLUDE_MYSQLEXT_VERSION_H_
|
#endif //_INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod MySQL Extension
|
* SourceMod MySQL Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef _INCLUDE_MYSQLEXT_VERSION_H_
|
#ifndef _INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
#define _INCLUDE_MYSQLEXT_VERSION_H_
|
#define _INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
|
|
||||||
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$LOCAL_BUILD$"
|
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$GLOBAL_BUILD$"
|
||||||
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$LOCAL_BUILD$
|
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$GLOBAL_BUILD$
|
||||||
|
|
||||||
#endif //_INCLUDE_MYSQLEXT_VERSION_H_
|
#endif //_INCLUDE_MYSQLEXT_VERSION_H_
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "SourceMod MySQL Extension"
|
VALUE "FileDescription", "SourceMod MySQL Extension"
|
||||||
VALUE "FileVersion", SVN_FULL_VERSION
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
VALUE "InternalName", "SourceMod MySQL Extension"
|
VALUE "InternalName", "SourceMod MySQL Extension"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AlliedModders LLC"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
VALUE "OriginalFilename", "dbi.mysql.ext.dll"
|
VALUE "OriginalFilename", "dbi.mysql.ext.dll"
|
||||||
VALUE "ProductName", "SourceMod MySQL Extension"
|
VALUE "ProductName", "SourceMod MySQL Extension"
|
||||||
VALUE "ProductVersion", SVN_FULL_VERSION
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
|||||||
@@ -0,0 +1,155 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "pcre.h"
|
||||||
|
#include "CRegEx.h"
|
||||||
|
#include <sh_string.h>
|
||||||
|
#include "extension.h"
|
||||||
|
|
||||||
|
RegEx::RegEx()
|
||||||
|
{
|
||||||
|
mErrorOffset = 0;
|
||||||
|
mError = NULL;
|
||||||
|
re = NULL;
|
||||||
|
mFree = true;
|
||||||
|
subject = NULL;
|
||||||
|
mSubStrings = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegEx::Clear ()
|
||||||
|
{
|
||||||
|
mErrorOffset = 0;
|
||||||
|
mError = NULL;
|
||||||
|
if (re)
|
||||||
|
pcre_free(re);
|
||||||
|
re = NULL;
|
||||||
|
mFree = true;
|
||||||
|
if (subject)
|
||||||
|
delete [] subject;
|
||||||
|
subject = NULL;
|
||||||
|
mSubStrings = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegEx::~RegEx()
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RegEx::isFree(bool set, bool val)
|
||||||
|
{
|
||||||
|
if (set)
|
||||||
|
{
|
||||||
|
mFree = val;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return mFree;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int RegEx::Compile(const char *pattern, int iFlags)
|
||||||
|
{
|
||||||
|
if (!mFree)
|
||||||
|
Clear();
|
||||||
|
|
||||||
|
re = pcre_compile(pattern, iFlags, &mError, &mErrorOffset, NULL);
|
||||||
|
|
||||||
|
if (re == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
mFree = false;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RegEx::Match(const char *str)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (mFree || re == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
this->ClearMatch();
|
||||||
|
|
||||||
|
//save str
|
||||||
|
subject = new char[strlen(str)+1];
|
||||||
|
strcpy(subject, str);
|
||||||
|
|
||||||
|
rc = pcre_exec(re, NULL, subject, (int)strlen(subject), 0, 0, ovector, 30);
|
||||||
|
|
||||||
|
if (rc < 0)
|
||||||
|
{
|
||||||
|
if (rc == PCRE_ERROR_NOMATCH)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
mErrorOffset = rc;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mSubStrings = rc;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
void RegEx::ClearMatch()
|
||||||
|
{
|
||||||
|
// Clears match results
|
||||||
|
mErrorOffset = 0;
|
||||||
|
mError = NULL;
|
||||||
|
if (subject)
|
||||||
|
delete [] subject;
|
||||||
|
subject = NULL;
|
||||||
|
mSubStrings = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *RegEx::GetSubstring(int s, char buffer[], int max)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
if (s >= mSubStrings || s < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
char *substr_a = subject + ovector[2*s];
|
||||||
|
int substr_l = ovector[2*s+1] - ovector[2*s];
|
||||||
|
|
||||||
|
for (i = 0; i<substr_l; i++)
|
||||||
|
{
|
||||||
|
if (i >= max)
|
||||||
|
break;
|
||||||
|
buffer[i] = substr_a[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[i] = '\0';
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_CREGEX_H
|
||||||
|
#define _INCLUDE_CREGEX_H
|
||||||
|
|
||||||
|
class RegEx
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RegEx();
|
||||||
|
~RegEx();
|
||||||
|
bool isFree(bool set=false, bool val=false);
|
||||||
|
void Clear();
|
||||||
|
|
||||||
|
int Compile(const char *pattern, int iFlags);
|
||||||
|
int Match(const char *str);
|
||||||
|
void ClearMatch();
|
||||||
|
const char *GetSubstring(int s, char buffer[], int max);
|
||||||
|
public:
|
||||||
|
int mErrorOffset;
|
||||||
|
const char *mError;
|
||||||
|
int mSubStrings;
|
||||||
|
private:
|
||||||
|
pcre *re;
|
||||||
|
bool mFree;
|
||||||
|
int ovector[30];
|
||||||
|
char *subject;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_INCLUDE_CREGEX_H
|
||||||
|
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
# (C)2004-2008 SourceMod Development Team
|
||||||
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
|
SMSDK = ../..
|
||||||
|
SRCDS_BASE = ~/srcds
|
||||||
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
|
#####################################
|
||||||
|
|
||||||
|
PROJECT = regex
|
||||||
|
|
||||||
|
#Uncomment for Metamod: Source enabled extension
|
||||||
|
#USEMETA = true
|
||||||
|
|
||||||
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp CRegEx.cpp
|
||||||
|
|
||||||
|
##############################################
|
||||||
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
##############################################
|
||||||
|
|
||||||
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
|
CPP = gcc-4.1
|
||||||
|
|
||||||
|
override ENGSET = false
|
||||||
|
ifeq "$(ENGINE)" "original"
|
||||||
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
|
HL2LIB = $(HL2SDK_ORIG)/linux_sdk
|
||||||
|
METAMOD = $(SOURCEMM14)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
|
HL2SDK = $(HL2SDK_OB)
|
||||||
|
HL2PUB = $(HL2SDK_OB)/public
|
||||||
|
HL2LIB = $(HL2SDK_OB)/linux_sdk
|
||||||
|
CFLAGS += -DORANGEBOX_BUILD
|
||||||
|
METAMOD = $(SOURCEMM16)
|
||||||
|
INCLUDE += -I$(HL2SDK)/public/game/server
|
||||||
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
|
override ENGSET = true
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so
|
||||||
|
|
||||||
|
LINK += $(LINK_HL2)
|
||||||
|
|
||||||
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||||
|
-I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
|
-I$(SMSDK)/public/sourcepawn
|
||||||
|
else
|
||||||
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SOURCEMM16)/sourcehook
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINK += lib_linux/libpcre.a -static-libgcc
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -mfpmath=sse \
|
||||||
|
-msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
|
################################################
|
||||||
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
|
################################################
|
||||||
|
|
||||||
|
ifeq "$(DEBUG)" "true"
|
||||||
|
BIN_DIR = Debug
|
||||||
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
|
else
|
||||||
|
BIN_DIR = Release
|
||||||
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
BINARY = $(PROJECT).ext.so
|
||||||
|
|
||||||
|
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
|
|
||||||
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
all: check
|
||||||
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so; \
|
||||||
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
|
check:
|
||||||
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
debug:
|
||||||
|
$(MAKE) -f Makefile all DEBUG=true
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
clean: check
|
||||||
|
rm -rf $(BIN_DIR)/*.o
|
||||||
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "extension.h"
|
||||||
|
|
||||||
|
#include <sh_string.h>
|
||||||
|
#include "pcre.h"
|
||||||
|
#include "CRegEx.h"
|
||||||
|
using namespace SourceHook;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file extension.cpp
|
||||||
|
* @brief Implement Regex extension code here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
RegexExtension g_RegexExtension; /**< Global singleton for extension's main interface */
|
||||||
|
|
||||||
|
SMEXT_LINK(&g_RegexExtension);
|
||||||
|
|
||||||
|
RegexHandler g_RegexHandler;
|
||||||
|
HandleType_t g_RegexHandle=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool RegexExtension::SDK_OnLoad(char *error, size_t err_max, bool late)
|
||||||
|
{
|
||||||
|
g_pShareSys->AddNatives(myself,regex_natives);
|
||||||
|
g_RegexHandle = g_pHandleSys->CreateType("Regex", &g_RegexHandler, 0, NULL, NULL, myself->GetIdentity(), NULL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegexExtension::SDK_OnUnload()
|
||||||
|
{
|
||||||
|
g_pHandleSys->RemoveType(g_RegexHandle, myself->GetIdentity());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t CompileRegex(IPluginContext *pCtx, const cell_t *params)
|
||||||
|
{
|
||||||
|
char *regex;
|
||||||
|
pCtx->LocalToString(params[1], ®ex);
|
||||||
|
|
||||||
|
RegEx *x = new RegEx();
|
||||||
|
|
||||||
|
if (x->Compile(regex, params[2]) == 0)
|
||||||
|
{
|
||||||
|
cell_t *eOff;
|
||||||
|
pCtx->LocalToPhysAddr(params[5], &eOff);
|
||||||
|
const char *err = x->mError;
|
||||||
|
*eOff = x->mErrorOffset;
|
||||||
|
pCtx->StringToLocal(params[3], params[4], err ? err:"unknown");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_pHandleSys->CreateHandle(g_RegexHandle, (void*)x, pCtx->GetIdentity(), myself->GetIdentity(), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static cell_t MatchRegex(IPluginContext *pCtx, const cell_t *params)
|
||||||
|
{
|
||||||
|
Handle_t hndl = static_cast<Handle_t>(params[1]);
|
||||||
|
HandleError err;
|
||||||
|
HandleSecurity sec;
|
||||||
|
sec.pOwner = NULL;
|
||||||
|
sec.pIdentity = myself->GetIdentity();
|
||||||
|
|
||||||
|
RegEx *x;
|
||||||
|
|
||||||
|
if ((err=g_pHandleSys->ReadHandle(hndl, g_RegexHandle, &sec, (void **)&x)) != HandleError_None)
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Invalid file handle %x (error %d)", hndl, err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!x)
|
||||||
|
{
|
||||||
|
pCtx->ThrowNativeError("Regex data not found\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *str;
|
||||||
|
pCtx->LocalToString(params[2], &str);
|
||||||
|
|
||||||
|
int e = x->Match(str);
|
||||||
|
|
||||||
|
if (e == -1)
|
||||||
|
{
|
||||||
|
/* there was a match error. move on. */
|
||||||
|
cell_t *res;
|
||||||
|
pCtx->LocalToPhysAddr(params[3], &res);
|
||||||
|
*res = x->mErrorOffset;
|
||||||
|
/* only clear the match results, since the regex object
|
||||||
|
may still be referenced later */
|
||||||
|
x->ClearMatch();
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (e == 0)
|
||||||
|
{
|
||||||
|
/* only clear the match results, since the regex object
|
||||||
|
may still be referenced later */
|
||||||
|
x->ClearMatch();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return x->mSubStrings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell_t GetRegexSubString(IPluginContext *pCtx, const cell_t *params)
|
||||||
|
{
|
||||||
|
Handle_t hndl=static_cast<Handle_t>(params[1]);
|
||||||
|
HandleError err;
|
||||||
|
HandleSecurity sec;
|
||||||
|
sec.pOwner=NULL;
|
||||||
|
sec.pIdentity=myself->GetIdentity();
|
||||||
|
|
||||||
|
RegEx *x;
|
||||||
|
|
||||||
|
if ((err=g_pHandleSys->ReadHandle(hndl, g_RegexHandle, &sec, (void **)&x)) != HandleError_None)
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Invalid file handle %x (error %d)", hndl, err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!x)
|
||||||
|
{
|
||||||
|
pCtx->ThrowNativeError("Regex data not found\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char buffer[4096];
|
||||||
|
const char *ret=x->GetSubstring(params[2], buffer, sizeof(buffer));
|
||||||
|
|
||||||
|
if(!ret)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pCtx->StringToLocalUTF8(params[3], params[4], ret, NULL);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegexHandler::OnHandleDestroy(HandleType_t type, void *object)
|
||||||
|
{
|
||||||
|
RegEx *x = (RegEx *)object;
|
||||||
|
|
||||||
|
x->Clear();
|
||||||
|
delete x;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sp_nativeinfo_t regex_natives[] =
|
||||||
|
{
|
||||||
|
{"GetRegexSubString", GetRegexSubString},
|
||||||
|
{"MatchRegex", MatchRegex},
|
||||||
|
{"CompileRegex", CompileRegex},
|
||||||
|
{NULL, NULL},
|
||||||
|
};
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file extension.h
|
||||||
|
* @brief Regex extension code header.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "smsdk_ext.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sample implementation of the SDK Extension.
|
||||||
|
* Note: Uncomment one of the pre-defined virtual functions in order to use it.
|
||||||
|
*/
|
||||||
|
class RegexExtension : public SDKExtension
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief This is called after the initial loading sequence has been processed.
|
||||||
|
*
|
||||||
|
* @param error Error message buffer.
|
||||||
|
* @param maxlength Size of error message buffer.
|
||||||
|
* @param late Whether or not the module was loaded after map load.
|
||||||
|
* @return True to succeed loading, false to fail.
|
||||||
|
*/
|
||||||
|
virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is called right before the extension is unloaded.
|
||||||
|
*/
|
||||||
|
virtual void SDK_OnUnload();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is called once all known extensions have been loaded.
|
||||||
|
* Note: It is is a good idea to add natives here, if any are provided.
|
||||||
|
*/
|
||||||
|
//virtual void SDK_OnAllLoaded();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the pause state is changed.
|
||||||
|
*/
|
||||||
|
//virtual void SDK_OnPauseChange(bool paused);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief this is called when Core wants to know if your extension is working.
|
||||||
|
*
|
||||||
|
* @param error Error message buffer.
|
||||||
|
* @param maxlength Size of error message buffer.
|
||||||
|
* @return True if working, false otherwise.
|
||||||
|
*/
|
||||||
|
//virtual bool QueryRunning(char *error, size_t maxlength);
|
||||||
|
public:
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod is attached, before the extension version is called.
|
||||||
|
*
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @param late Whether or not Metamod considers this a late load.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
//virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod is detaching, after the extension version is called.
|
||||||
|
* NOTE: By default this is blocked unless sent from SourceMod.
|
||||||
|
*
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
//virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod's pause state is changing.
|
||||||
|
* NOTE: By default this is blocked unless sent from SourceMod.
|
||||||
|
*
|
||||||
|
* @param paused Pause state being set.
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class RegexHandler: public IHandleTypeDispatch
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void OnHandleDestroy(HandleType_t type, void *object);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern RegexHandler g_RegexHandler;
|
||||||
|
extern HandleType_t g_RegexHandle;
|
||||||
|
|
||||||
|
|
||||||
|
// Natives
|
||||||
|
extern const sp_nativeinfo_t regex_natives[];
|
||||||
|
|
||||||
|
#endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
# Visual Studio 2005
|
# Visual Studio 2005
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BatSupport", "BatSupport.vcproj", "{E2FDA25A-3F36-46CE-A4EB-F4AB60011386}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regex", "regex.vcproj", "{B3E797CF-4E77-4C9D-B8A8-7589B6902206}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -9,10 +9,10 @@ Global
|
|||||||
Release|Win32 = Release|Win32
|
Release|Win32 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{E2FDA25A-3F36-46CE-A4EB-F4AB60011386}.Debug|Win32.ActiveCfg = Debug|Win32
|
{B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{E2FDA25A-3F36-46CE-A4EB-F4AB60011386}.Debug|Win32.Build.0 = Debug|Win32
|
{B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{E2FDA25A-3F36-46CE-A4EB-F4AB60011386}.Release|Win32.ActiveCfg = Release|Win32
|
{B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{E2FDA25A-3F36-46CE-A4EB-F4AB60011386}.Release|Win32.Build.0 = Release|Win32
|
{B3E797CF-4E77-4C9D-B8A8-7589B6902206}.Release|Win32.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
+33
-15
@@ -2,9 +2,9 @@
|
|||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="BatSupport"
|
Name="regex"
|
||||||
ProjectGUID="{E2FDA25A-3F36-46ce-A4EB-F4AB60011386}"
|
ProjectGUID="{B3E797CF-4E77-4C9D-B8A8-7589B6902206}"
|
||||||
RootNamespace="BatSupport"
|
RootNamespace="regex"
|
||||||
Keyword="Win32Proj"
|
Keyword="Win32Proj"
|
||||||
>
|
>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
@@ -40,11 +40,12 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="1"
|
RuntimeLibrary="1"
|
||||||
|
EnableEnhancedInstructionSet="1"
|
||||||
RuntimeTypeInfo="false"
|
RuntimeTypeInfo="false"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
@@ -62,9 +63,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="tier0.lib"
|
AdditionalDependencies="../lib_win/pcre.lib"
|
||||||
OutputFile="$(OutDir)\batsupport.ext.dll"
|
OutputFile="$(OutDir)\regex.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -119,9 +121,11 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn"
|
FavorSizeOrSpeed="1"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;"$(SOURCEMM16)\sourcehook""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
|
EnableEnhancedInstructionSet="1"
|
||||||
RuntimeTypeInfo="false"
|
RuntimeTypeInfo="false"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
@@ -139,8 +143,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
OutputFile="$(OutDir)\sample.ext.dll"
|
AdditionalDependencies="../lib_win/pcre.lib"
|
||||||
|
OutputFile="$(OutDir)\regex.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
@@ -179,8 +185,12 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
UniqueIdentifier="{863879FA-7F21-4e8c-8BCE-361A3ECB41CC}"
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CRegEx.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\extension.cpp"
|
RelativePath="..\extension.cpp"
|
||||||
>
|
>
|
||||||
@@ -189,26 +199,34 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
UniqueIdentifier="{C7385807-ED7A-4b43-9447-993597508211}"
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\BATInterface.h"
|
RelativePath="..\CRegEx.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\extension.h"
|
RelativePath="..\extension.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\pcre.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
UniqueIdentifier="{B3C3137B-2DF6-40b9-883E-EF7D84114CEA}"
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\version.rc"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="SourceMod SDK"
|
Name="SourceMod SDK"
|
||||||
UniqueIdentifier="{A47503F4-3D11-4b37-851B-34562E7425A6}"
|
UniqueIdentifier="{31958233-BB2D-4e41-A8F9-CE8A4684F436}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\sdk\smsdk_config.h"
|
RelativePath="..\sdk\smsdk_config.h"
|
||||||
@@ -0,0 +1,305 @@
|
|||||||
|
/*************************************************
|
||||||
|
* Perl-Compatible Regular Expressions *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
/* This is the public header file for the PCRE library, to be #included by
|
||||||
|
applications that call the PCRE functions.
|
||||||
|
|
||||||
|
Copyright (c) 1997-2007 University of Cambridge
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the University of Cambridge nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PCRE_H
|
||||||
|
#define _PCRE_H
|
||||||
|
|
||||||
|
/* The current PCRE version information. */
|
||||||
|
|
||||||
|
#define PCRE_MAJOR 7
|
||||||
|
#define PCRE_MINOR 4
|
||||||
|
#define PCRE_PRERELEASE
|
||||||
|
#define PCRE_DATE 2007-09-21
|
||||||
|
|
||||||
|
/* When an application links to a PCRE DLL in Windows, the symbols that are
|
||||||
|
imported have to be identified as such. When building PCRE, the appropriate
|
||||||
|
export setting is defined in pcre_internal.h, which includes this file. So we
|
||||||
|
don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */
|
||||||
|
|
||||||
|
#define PCRE_STATIC
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(PCRE_STATIC)
|
||||||
|
# ifndef PCRE_EXP_DECL
|
||||||
|
# define PCRE_EXP_DECL extern __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# ifndef PCRECPP_EXP_DECL
|
||||||
|
# define PCRECPP_EXP_DECL extern __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# ifndef PCRECPP_EXP_DEFN
|
||||||
|
# define PCRECPP_EXP_DEFN __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* By default, we use the standard "extern" declarations. */
|
||||||
|
|
||||||
|
#ifndef PCRE_EXP_DECL
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define PCRE_EXP_DECL extern "C"
|
||||||
|
# else
|
||||||
|
# define PCRE_EXP_DECL extern
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
# ifndef PCRECPP_EXP_DECL
|
||||||
|
# define PCRECPP_EXP_DECL extern
|
||||||
|
# endif
|
||||||
|
# ifndef PCRECPP_EXP_DEFN
|
||||||
|
# define PCRECPP_EXP_DEFN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Have to include stdlib.h in order to ensure that size_t is defined;
|
||||||
|
it is needed here for malloc. */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Allow for C++ users */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Options */
|
||||||
|
|
||||||
|
#define PCRE_CASELESS 0x00000001
|
||||||
|
#define PCRE_MULTILINE 0x00000002
|
||||||
|
#define PCRE_DOTALL 0x00000004
|
||||||
|
#define PCRE_EXTENDED 0x00000008
|
||||||
|
#define PCRE_ANCHORED 0x00000010
|
||||||
|
#define PCRE_DOLLAR_ENDONLY 0x00000020
|
||||||
|
#define PCRE_EXTRA 0x00000040
|
||||||
|
#define PCRE_NOTBOL 0x00000080
|
||||||
|
#define PCRE_NOTEOL 0x00000100
|
||||||
|
#define PCRE_UNGREEDY 0x00000200
|
||||||
|
#define PCRE_NOTEMPTY 0x00000400
|
||||||
|
#define PCRE_UTF8 0x00000800
|
||||||
|
#define PCRE_NO_AUTO_CAPTURE 0x00001000
|
||||||
|
#define PCRE_NO_UTF8_CHECK 0x00002000
|
||||||
|
#define PCRE_AUTO_CALLOUT 0x00004000
|
||||||
|
#define PCRE_PARTIAL 0x00008000
|
||||||
|
#define PCRE_DFA_SHORTEST 0x00010000
|
||||||
|
#define PCRE_DFA_RESTART 0x00020000
|
||||||
|
#define PCRE_FIRSTLINE 0x00040000
|
||||||
|
#define PCRE_DUPNAMES 0x00080000
|
||||||
|
#define PCRE_NEWLINE_CR 0x00100000
|
||||||
|
#define PCRE_NEWLINE_LF 0x00200000
|
||||||
|
#define PCRE_NEWLINE_CRLF 0x00300000
|
||||||
|
#define PCRE_NEWLINE_ANY 0x00400000
|
||||||
|
#define PCRE_NEWLINE_ANYCRLF 0x00500000
|
||||||
|
#define PCRE_BSR_ANYCRLF 0x00800000
|
||||||
|
#define PCRE_BSR_UNICODE 0x01000000
|
||||||
|
|
||||||
|
/* Exec-time and get/set-time error codes */
|
||||||
|
|
||||||
|
#define PCRE_ERROR_NOMATCH (-1)
|
||||||
|
#define PCRE_ERROR_NULL (-2)
|
||||||
|
#define PCRE_ERROR_BADOPTION (-3)
|
||||||
|
#define PCRE_ERROR_BADMAGIC (-4)
|
||||||
|
#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
|
||||||
|
#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
|
||||||
|
#define PCRE_ERROR_NOMEMORY (-6)
|
||||||
|
#define PCRE_ERROR_NOSUBSTRING (-7)
|
||||||
|
#define PCRE_ERROR_MATCHLIMIT (-8)
|
||||||
|
#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
|
||||||
|
#define PCRE_ERROR_BADUTF8 (-10)
|
||||||
|
#define PCRE_ERROR_BADUTF8_OFFSET (-11)
|
||||||
|
#define PCRE_ERROR_PARTIAL (-12)
|
||||||
|
#define PCRE_ERROR_BADPARTIAL (-13)
|
||||||
|
#define PCRE_ERROR_INTERNAL (-14)
|
||||||
|
#define PCRE_ERROR_BADCOUNT (-15)
|
||||||
|
#define PCRE_ERROR_DFA_UITEM (-16)
|
||||||
|
#define PCRE_ERROR_DFA_UCOND (-17)
|
||||||
|
#define PCRE_ERROR_DFA_UMLIMIT (-18)
|
||||||
|
#define PCRE_ERROR_DFA_WSSIZE (-19)
|
||||||
|
#define PCRE_ERROR_DFA_RECURSE (-20)
|
||||||
|
#define PCRE_ERROR_RECURSIONLIMIT (-21)
|
||||||
|
#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */
|
||||||
|
#define PCRE_ERROR_BADNEWLINE (-23)
|
||||||
|
|
||||||
|
/* Request types for pcre_fullinfo() */
|
||||||
|
|
||||||
|
#define PCRE_INFO_OPTIONS 0
|
||||||
|
#define PCRE_INFO_SIZE 1
|
||||||
|
#define PCRE_INFO_CAPTURECOUNT 2
|
||||||
|
#define PCRE_INFO_BACKREFMAX 3
|
||||||
|
#define PCRE_INFO_FIRSTBYTE 4
|
||||||
|
#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */
|
||||||
|
#define PCRE_INFO_FIRSTTABLE 5
|
||||||
|
#define PCRE_INFO_LASTLITERAL 6
|
||||||
|
#define PCRE_INFO_NAMEENTRYSIZE 7
|
||||||
|
#define PCRE_INFO_NAMECOUNT 8
|
||||||
|
#define PCRE_INFO_NAMETABLE 9
|
||||||
|
#define PCRE_INFO_STUDYSIZE 10
|
||||||
|
#define PCRE_INFO_DEFAULT_TABLES 11
|
||||||
|
#define PCRE_INFO_OKPARTIAL 12
|
||||||
|
#define PCRE_INFO_JCHANGED 13
|
||||||
|
#define PCRE_INFO_HASCRORLF 14
|
||||||
|
|
||||||
|
/* Request types for pcre_config(). Do not re-arrange, in order to remain
|
||||||
|
compatible. */
|
||||||
|
|
||||||
|
#define PCRE_CONFIG_UTF8 0
|
||||||
|
#define PCRE_CONFIG_NEWLINE 1
|
||||||
|
#define PCRE_CONFIG_LINK_SIZE 2
|
||||||
|
#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3
|
||||||
|
#define PCRE_CONFIG_MATCH_LIMIT 4
|
||||||
|
#define PCRE_CONFIG_STACKRECURSE 5
|
||||||
|
#define PCRE_CONFIG_UNICODE_PROPERTIES 6
|
||||||
|
#define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7
|
||||||
|
#define PCRE_CONFIG_BSR 8
|
||||||
|
|
||||||
|
/* Bit flags for the pcre_extra structure. Do not re-arrange or redefine
|
||||||
|
these bits, just add new ones on the end, in order to remain compatible. */
|
||||||
|
|
||||||
|
#define PCRE_EXTRA_STUDY_DATA 0x0001
|
||||||
|
#define PCRE_EXTRA_MATCH_LIMIT 0x0002
|
||||||
|
#define PCRE_EXTRA_CALLOUT_DATA 0x0004
|
||||||
|
#define PCRE_EXTRA_TABLES 0x0008
|
||||||
|
#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010
|
||||||
|
|
||||||
|
/* Types */
|
||||||
|
|
||||||
|
struct real_pcre; /* declaration; the definition is private */
|
||||||
|
typedef struct real_pcre pcre;
|
||||||
|
|
||||||
|
/* When PCRE is compiled as a C++ library, the subject pointer type can be
|
||||||
|
replaced with a custom type. For conventional use, the public interface is a
|
||||||
|
const char *. */
|
||||||
|
|
||||||
|
#ifndef PCRE_SPTR
|
||||||
|
#define PCRE_SPTR const char *
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The structure for passing additional data to pcre_exec(). This is defined in
|
||||||
|
such as way as to be extensible. Always add new fields at the end, in order to
|
||||||
|
remain compatible. */
|
||||||
|
|
||||||
|
typedef struct pcre_extra {
|
||||||
|
unsigned long int flags; /* Bits for which fields are set */
|
||||||
|
void *study_data; /* Opaque data from pcre_study() */
|
||||||
|
unsigned long int match_limit; /* Maximum number of calls to match() */
|
||||||
|
void *callout_data; /* Data passed back in callouts */
|
||||||
|
const unsigned char *tables; /* Pointer to character tables */
|
||||||
|
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
|
||||||
|
} pcre_extra;
|
||||||
|
|
||||||
|
/* The structure for passing out data via the pcre_callout_function. We use a
|
||||||
|
structure so that new fields can be added on the end in future versions,
|
||||||
|
without changing the API of the function, thereby allowing old clients to work
|
||||||
|
without modification. */
|
||||||
|
|
||||||
|
typedef struct pcre_callout_block {
|
||||||
|
int version; /* Identifies version of block */
|
||||||
|
/* ------------------------ Version 0 ------------------------------- */
|
||||||
|
int callout_number; /* Number compiled into pattern */
|
||||||
|
int *offset_vector; /* The offset vector */
|
||||||
|
PCRE_SPTR subject; /* The subject being matched */
|
||||||
|
int subject_length; /* The length of the subject */
|
||||||
|
int start_match; /* Offset to start of this match attempt */
|
||||||
|
int current_position; /* Where we currently are in the subject */
|
||||||
|
int capture_top; /* Max current capture */
|
||||||
|
int capture_last; /* Most recently closed capture */
|
||||||
|
void *callout_data; /* Data passed in with the call */
|
||||||
|
/* ------------------- Added for Version 1 -------------------------- */
|
||||||
|
int pattern_position; /* Offset to next item in the pattern */
|
||||||
|
int next_item_length; /* Length of next item in the pattern */
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
} pcre_callout_block;
|
||||||
|
|
||||||
|
/* Indirection for store get and free functions. These can be set to
|
||||||
|
alternative malloc/free functions if required. Special ones are used in the
|
||||||
|
non-recursive case for "frames". There is also an optional callout function
|
||||||
|
that is triggered by the (?) regex item. For Virtual Pascal, these definitions
|
||||||
|
have to take another form. */
|
||||||
|
|
||||||
|
#ifndef VPCOMPAT
|
||||||
|
PCRE_EXP_DECL void *(*pcre_malloc)(size_t);
|
||||||
|
PCRE_EXP_DECL void (*pcre_free)(void *);
|
||||||
|
PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t);
|
||||||
|
PCRE_EXP_DECL void (*pcre_stack_free)(void *);
|
||||||
|
PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *);
|
||||||
|
#else /* VPCOMPAT */
|
||||||
|
PCRE_EXP_DECL void *pcre_malloc(size_t);
|
||||||
|
PCRE_EXP_DECL void pcre_free(void *);
|
||||||
|
PCRE_EXP_DECL void *pcre_stack_malloc(size_t);
|
||||||
|
PCRE_EXP_DECL void pcre_stack_free(void *);
|
||||||
|
PCRE_EXP_DECL int pcre_callout(pcre_callout_block *);
|
||||||
|
#endif /* VPCOMPAT */
|
||||||
|
|
||||||
|
/* Exported PCRE functions */
|
||||||
|
|
||||||
|
PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *,
|
||||||
|
const unsigned char *);
|
||||||
|
PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **,
|
||||||
|
int *, const unsigned char *);
|
||||||
|
PCRE_EXP_DECL int pcre_config(int, void *);
|
||||||
|
PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *,
|
||||||
|
int *, int, const char *, char *, int);
|
||||||
|
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *,
|
||||||
|
int);
|
||||||
|
PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *,
|
||||||
|
const char *, int, int, int, int *, int , int *, int);
|
||||||
|
PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
|
||||||
|
int, int, int, int *, int);
|
||||||
|
PCRE_EXP_DECL void pcre_free_substring(const char *);
|
||||||
|
PCRE_EXP_DECL void pcre_free_substring_list(const char **);
|
||||||
|
PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int,
|
||||||
|
void *);
|
||||||
|
PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *,
|
||||||
|
int *, int, const char *, const char **);
|
||||||
|
PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *);
|
||||||
|
PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *,
|
||||||
|
char **, char **);
|
||||||
|
PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int,
|
||||||
|
const char **);
|
||||||
|
PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int,
|
||||||
|
const char ***);
|
||||||
|
PCRE_EXP_DECL int pcre_info(const pcre *, int *, int *);
|
||||||
|
PCRE_EXP_DECL const unsigned char *pcre_maketables(void);
|
||||||
|
PCRE_EXP_DECL int pcre_refcount(pcre *, int);
|
||||||
|
PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **);
|
||||||
|
PCRE_EXP_DECL const char *pcre_version(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* End of pcre.h */
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_
|
||||||
|
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file smsdk_config.h
|
||||||
|
* @brief Contains macros for configuring basic extension information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Basic information exposed publicly */
|
||||||
|
#define SMEXT_CONF_NAME "Regex"
|
||||||
|
#define SMEXT_CONF_DESCRIPTION "Provides regex natives for plugins"
|
||||||
|
#define SMEXT_CONF_VERSION SVN_FULL_VERSION
|
||||||
|
#define SMEXT_CONF_AUTHOR "AlliedModders LLC"
|
||||||
|
#define SMEXT_CONF_URL "http://www.sourcemod.net/"
|
||||||
|
#define SMEXT_CONF_LOGTAG "REGEX"
|
||||||
|
#define SMEXT_CONF_LICENSE "GPL"
|
||||||
|
#define SMEXT_CONF_DATESTRING __DATE__
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Exposes plugin's main interface.
|
||||||
|
*/
|
||||||
|
#define SMEXT_LINK(name) SDKExtension *g_pExtensionIface = name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets whether or not this plugin required Metamod.
|
||||||
|
* NOTE: Uncomment to enable, comment to disable.
|
||||||
|
*/
|
||||||
|
//#define SMEXT_CONF_METAMOD
|
||||||
|
|
||||||
|
/** Enable interfaces you want to use here by uncommenting lines */
|
||||||
|
//#define SMEXT_ENABLE_FORWARDSYS
|
||||||
|
#define SMEXT_ENABLE_HANDLESYS
|
||||||
|
//#define SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
//#define SMEXT_ENABLE_DBMANAGER
|
||||||
|
//#define SMEXT_ENABLE_GAMECONF
|
||||||
|
//#define SMEXT_ENABLE_MEMUTILS
|
||||||
|
//#define SMEXT_ENABLE_GAMEHELPERS
|
||||||
|
//#define SMEXT_ENABLE_TIMERSYS
|
||||||
|
//#define SMEXT_ENABLE_THREADER
|
||||||
|
//#define SMEXT_ENABLE_LIBSYS
|
||||||
|
//#define SMEXT_ENABLE_MENUS
|
||||||
|
//#define SMEXT_ENABLE_ADTFACTORY
|
||||||
|
//#define SMEXT_ENABLE_PLUGINSYS
|
||||||
|
//#define SMEXT_ENABLE_ADMINSYS
|
||||||
|
//#define SMEXT_ENABLE_TEXTPARSERS
|
||||||
|
//#define SMEXT_ENABLE_USERMSGS
|
||||||
|
|
||||||
|
#endif // _INCLUDE_SOURCEMOD_EXTENSION_CONFIG_H_
|
||||||
@@ -0,0 +1,455 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Base Extension Code
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include "smsdk_ext.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file smsdk_ext.cpp
|
||||||
|
* @brief Contains wrappers for making Extensions easier to write.
|
||||||
|
*/
|
||||||
|
|
||||||
|
IExtension *myself = NULL; /**< Ourself */
|
||||||
|
IShareSys *g_pShareSys = NULL; /**< Share system */
|
||||||
|
IShareSys *sharesys = NULL; /**< Share system */
|
||||||
|
ISourceMod *g_pSM = NULL; /**< SourceMod helpers */
|
||||||
|
ISourceMod *smutils = NULL; /**< SourceMod helpers */
|
||||||
|
|
||||||
|
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||||
|
IForwardManager *g_pForwards = NULL; /**< Forward system */
|
||||||
|
IForwardManager *forwards = NULL; /**< Forward system */
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_HANDLESYS
|
||||||
|
IHandleSys *g_pHandleSys = NULL; /**< Handle system */
|
||||||
|
IHandleSys *handlesys = NULL; /**< Handle system */
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
IPlayerManager *playerhelpers = NULL; /**< Player helpers */
|
||||||
|
#endif //SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
#if defined SMEXT_ENABLE_DBMANAGER
|
||||||
|
IDBManager *dbi = NULL; /**< DB Manager */
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_GAMECONF
|
||||||
|
IGameConfigManager *gameconfs = NULL; /**< Game config manager */
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_MEMUTILS
|
||||||
|
IMemoryUtils *memutils = NULL;
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||||
|
IGameHelpers *gamehelpers = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TIMERSYS
|
||||||
|
ITimerSystem *timersys = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADTFACTORY
|
||||||
|
IADTFactory *adtfactory = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_THREADER
|
||||||
|
IThreader *threader = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_LIBSYS
|
||||||
|
ILibrarySys *libsys = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||||
|
SourceMod::IPluginManager *plsys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MENUS
|
||||||
|
IMenuManager *menus = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADMINSYS
|
||||||
|
IAdminSystem *adminsys = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||||
|
ITextParsers *textparsers = NULL;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_USERMSGS
|
||||||
|
IUserMessages *usermsgs = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Exports the main interface */
|
||||||
|
PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI()
|
||||||
|
{
|
||||||
|
return g_pExtensionIface;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDKExtension::SDKExtension()
|
||||||
|
{
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
m_SourceMMLoaded = false;
|
||||||
|
m_WeAreUnloaded = false;
|
||||||
|
m_WeGotPauseChange = false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late)
|
||||||
|
{
|
||||||
|
g_pShareSys = sharesys = sys;
|
||||||
|
myself = me;
|
||||||
|
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
m_WeAreUnloaded = true;
|
||||||
|
|
||||||
|
if (!m_SourceMMLoaded)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
snprintf(error, maxlength, "Metamod attach failed");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
SM_GET_IFACE(SOURCEMOD, g_pSM);
|
||||||
|
smutils = g_pSM;
|
||||||
|
#if defined SMEXT_ENABLE_HANDLESYS
|
||||||
|
SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys);
|
||||||
|
handlesys = g_pHandleSys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||||
|
SM_GET_IFACE(FORWARDMANAGER, g_pForwards);
|
||||||
|
forwards = g_pForwards;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
SM_GET_IFACE(PLAYERMANAGER, playerhelpers);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_DBMANAGER
|
||||||
|
SM_GET_IFACE(DBI, dbi);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_GAMECONF
|
||||||
|
SM_GET_IFACE(GAMECONFIG, gameconfs);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MEMUTILS
|
||||||
|
SM_GET_IFACE(MEMORYUTILS, memutils);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||||
|
SM_GET_IFACE(GAMEHELPERS, gamehelpers);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TIMERSYS
|
||||||
|
SM_GET_IFACE(TIMERSYS, timersys);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADTFACTORY
|
||||||
|
SM_GET_IFACE(ADTFACTORY, adtfactory);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_THREADER
|
||||||
|
SM_GET_IFACE(THREADER, threader);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_LIBSYS
|
||||||
|
SM_GET_IFACE(LIBRARYSYS, libsys);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||||
|
SM_GET_IFACE(PLUGINSYSTEM, plsys);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MENUS
|
||||||
|
SM_GET_IFACE(MENUMANAGER, menus);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADMINSYS
|
||||||
|
SM_GET_IFACE(ADMINSYS, adminsys);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||||
|
SM_GET_IFACE(TEXTPARSERS, textparsers);
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_USERMSGS
|
||||||
|
SM_GET_IFACE(USERMSGS, usermsgs);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (SDK_OnLoad(error, maxlength, late))
|
||||||
|
{
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
m_WeAreUnloaded = true;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::IsMetamodExtension()
|
||||||
|
{
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::OnExtensionPauseChange(bool state)
|
||||||
|
{
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
m_WeGotPauseChange = true;
|
||||||
|
#endif
|
||||||
|
SDK_OnPauseChange(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::OnExtensionsAllLoaded()
|
||||||
|
{
|
||||||
|
SDK_OnAllLoaded();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::OnExtensionUnload()
|
||||||
|
{
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
m_WeAreUnloaded = true;
|
||||||
|
#endif
|
||||||
|
SDK_OnUnload();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionAuthor()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_AUTHOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionDateString()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_DATESTRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionDescription()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_DESCRIPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionVerString()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionName()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionTag()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_LOGTAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetExtensionURL()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::SDK_OnUnload()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::SDK_OnPauseChange(bool paused)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDKExtension::SDK_OnAllLoaded()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
|
||||||
|
PluginId g_PLID = 0; /**< Metamod plugin ID */
|
||||||
|
ISmmPlugin *g_PLAPI = NULL; /**< Metamod plugin API */
|
||||||
|
SourceHook::ISourceHook *g_SHPtr = NULL; /**< SourceHook pointer */
|
||||||
|
ISmmAPI *g_SMAPI = NULL; /**< SourceMM API pointer */
|
||||||
|
|
||||||
|
IVEngineServer *engine = NULL; /**< IVEngineServer pointer */
|
||||||
|
IServerGameDLL *gamedll = NULL; /**< IServerGameDLL pointer */
|
||||||
|
|
||||||
|
/** Exposes the extension to Metamod */
|
||||||
|
SMM_API void *PL_EXPOSURE(const char *name, int *code)
|
||||||
|
{
|
||||||
|
#if defined METAMOD_PLAPI_VERSION
|
||||||
|
if (name && !strcmp(name, METAMOD_PLAPI_NAME))
|
||||||
|
#else
|
||||||
|
if (name && !strcmp(name, PLAPI_NAME))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (code)
|
||||||
|
{
|
||||||
|
*code = IFACE_OK;
|
||||||
|
}
|
||||||
|
return static_cast<void *>(g_pExtensionIface);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code)
|
||||||
|
{
|
||||||
|
*code = IFACE_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
|
||||||
|
{
|
||||||
|
PLUGIN_SAVEVARS();
|
||||||
|
|
||||||
|
#if defined METAMOD_PLAPI_VERSION
|
||||||
|
GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
|
||||||
|
GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
|
||||||
|
#else
|
||||||
|
GET_V_IFACE_ANY(GetServerFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
|
||||||
|
GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
m_SourceMMLoaded = true;
|
||||||
|
|
||||||
|
return SDK_OnMetamodLoad(ismm, error, maxlen, late);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::Unload(char *error, size_t maxlen)
|
||||||
|
{
|
||||||
|
if (!m_WeAreUnloaded)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
snprintf(error, maxlen, "This extension must be unloaded by SourceMod.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SDK_OnMetamodUnload(error, maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::Pause(char *error, size_t maxlen)
|
||||||
|
{
|
||||||
|
if (!m_WeGotPauseChange)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
snprintf(error, maxlen, "This extension must be paused by SourceMod.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_WeGotPauseChange = false;
|
||||||
|
|
||||||
|
return SDK_OnMetamodPauseChange(true, error, maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::Unpause(char *error, size_t maxlen)
|
||||||
|
{
|
||||||
|
if (!m_WeGotPauseChange)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
snprintf(error, maxlen, "This extension must be unpaused by SourceMod.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_WeGotPauseChange = false;
|
||||||
|
|
||||||
|
return SDK_OnMetamodPauseChange(false, error, maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetAuthor()
|
||||||
|
{
|
||||||
|
return GetExtensionAuthor();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetDate()
|
||||||
|
{
|
||||||
|
return GetExtensionDateString();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetDescription()
|
||||||
|
{
|
||||||
|
return GetExtensionDescription();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetLicense()
|
||||||
|
{
|
||||||
|
return SMEXT_CONF_LICENSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetLogTag()
|
||||||
|
{
|
||||||
|
return GetExtensionTag();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetName()
|
||||||
|
{
|
||||||
|
return GetExtensionName();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetURL()
|
||||||
|
{
|
||||||
|
return GetExtensionURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SDKExtension::GetVersion()
|
||||||
|
{
|
||||||
|
return GetExtensionVerString();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t maxlength)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Overload a few things to prevent libstdc++ linking */
|
||||||
|
#if defined __linux__
|
||||||
|
extern "C" void __cxa_pure_virtual(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void *operator new(size_t size)
|
||||||
|
{
|
||||||
|
return malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *operator new[](size_t size)
|
||||||
|
{
|
||||||
|
return malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void *ptr)
|
||||||
|
{
|
||||||
|
free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete[](void * ptr)
|
||||||
|
{
|
||||||
|
free(ptr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,327 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Base Extension Code
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file smsdk_ext.h
|
||||||
|
* @brief Contains wrappers for making Extensions easier to write.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "smsdk_config.h"
|
||||||
|
#include <IExtensionSys.h>
|
||||||
|
#include <IHandleSys.h>
|
||||||
|
#include <sp_vm_api.h>
|
||||||
|
#include <sm_platform.h>
|
||||||
|
#include <ISourceMod.h>
|
||||||
|
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||||
|
#include <IForwardSys.h>
|
||||||
|
#endif //SMEXT_ENABLE_FORWARDSYS
|
||||||
|
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
#include <IPlayerHelpers.h>
|
||||||
|
#endif //SMEXT_ENABLE_PlAYERHELPERS
|
||||||
|
#if defined SMEXT_ENABLE_DBMANAGER
|
||||||
|
#include <IDBDriver.h>
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_GAMECONF
|
||||||
|
#include <IGameConfigs.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MEMUTILS
|
||||||
|
#include <IMemoryUtils.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||||
|
#include <IGameHelpers.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TIMERSYS
|
||||||
|
#include <ITimerSystem.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADTFACTORY
|
||||||
|
#include <IADTFactory.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_THREADER
|
||||||
|
#include <IThreader.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_LIBSYS
|
||||||
|
#include <ILibrarySys.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||||
|
#include <IPluginSys.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MENUS
|
||||||
|
#include <IMenuManager.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADMINSYS
|
||||||
|
#include <IAdminSystem.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TEXTPARSERS
|
||||||
|
#include <ITextParsers.h>
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_USERMSGS
|
||||||
|
#include <IUserMessages.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
#include <ISmmPlugin.h>
|
||||||
|
#include <eiface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using namespace SourceMod;
|
||||||
|
using namespace SourcePawn;
|
||||||
|
|
||||||
|
class SDKExtension :
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
public ISmmPlugin,
|
||||||
|
#endif
|
||||||
|
public IExtensionInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/** Constructor */
|
||||||
|
SDKExtension();
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief This is called after the initial loading sequence has been processed.
|
||||||
|
*
|
||||||
|
* @param error Error message buffer.
|
||||||
|
* @param maxlength Size of error message buffer.
|
||||||
|
* @param late Whether or not the module was loaded after map load.
|
||||||
|
* @return True to succeed loading, false to fail.
|
||||||
|
*/
|
||||||
|
virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is called right before the extension is unloaded.
|
||||||
|
*/
|
||||||
|
virtual void SDK_OnUnload();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is called once all known extensions have been loaded.
|
||||||
|
*/
|
||||||
|
virtual void SDK_OnAllLoaded();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the pause state is changed.
|
||||||
|
*/
|
||||||
|
virtual void SDK_OnPauseChange(bool paused);
|
||||||
|
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod is attached, before the extension version is called.
|
||||||
|
*
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @param late Whether or not Metamod considers this a late load.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod is detaching, after the extension version is called.
|
||||||
|
* NOTE: By default this is blocked unless sent from SourceMod.
|
||||||
|
*
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when Metamod's pause state is changing.
|
||||||
|
* NOTE: By default this is blocked unless sent from SourceMod.
|
||||||
|
*
|
||||||
|
* @param paused Pause state being set.
|
||||||
|
* @param error Error buffer.
|
||||||
|
* @param maxlength Maximum size of error buffer.
|
||||||
|
* @return True to succeed, false to fail.
|
||||||
|
*/
|
||||||
|
virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public: //IExtensionInterface
|
||||||
|
virtual bool OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t maxlength, bool late);
|
||||||
|
virtual void OnExtensionUnload();
|
||||||
|
virtual void OnExtensionsAllLoaded();
|
||||||
|
|
||||||
|
/** Returns whether or not this is a Metamod-based extension */
|
||||||
|
virtual bool IsMetamodExtension();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the pause state changes.
|
||||||
|
*
|
||||||
|
* @param state True if being paused, false if being unpaused.
|
||||||
|
*/
|
||||||
|
virtual void OnExtensionPauseChange(bool state);
|
||||||
|
|
||||||
|
/** Returns name */
|
||||||
|
virtual const char *GetExtensionName();
|
||||||
|
/** Returns URL */
|
||||||
|
virtual const char *GetExtensionURL();
|
||||||
|
/** Returns log tag */
|
||||||
|
virtual const char *GetExtensionTag();
|
||||||
|
/** Returns author */
|
||||||
|
virtual const char *GetExtensionAuthor();
|
||||||
|
/** Returns version string */
|
||||||
|
virtual const char *GetExtensionVerString();
|
||||||
|
/** Returns description string */
|
||||||
|
virtual const char *GetExtensionDescription();
|
||||||
|
/** Returns date string */
|
||||||
|
virtual const char *GetExtensionDateString();
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
public: //ISmmPlugin
|
||||||
|
/** Called when the extension is attached to Metamod. */
|
||||||
|
virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late);
|
||||||
|
/** Returns the author to MM */
|
||||||
|
virtual const char *GetAuthor();
|
||||||
|
/** Returns the name to MM */
|
||||||
|
virtual const char *GetName();
|
||||||
|
/** Returns the description to MM */
|
||||||
|
virtual const char *GetDescription();
|
||||||
|
/** Returns the URL to MM */
|
||||||
|
virtual const char *GetURL();
|
||||||
|
/** Returns the license to MM */
|
||||||
|
virtual const char *GetLicense();
|
||||||
|
/** Returns the version string to MM */
|
||||||
|
virtual const char *GetVersion();
|
||||||
|
/** Returns the date string to MM */
|
||||||
|
virtual const char *GetDate();
|
||||||
|
/** Returns the logtag to MM */
|
||||||
|
virtual const char *GetLogTag();
|
||||||
|
/** Called on unload */
|
||||||
|
virtual bool Unload(char *error, size_t maxlength);
|
||||||
|
/** Called on pause */
|
||||||
|
virtual bool Pause(char *error, size_t maxlength);
|
||||||
|
/** Called on unpause */
|
||||||
|
virtual bool Unpause(char *error, size_t maxlength);
|
||||||
|
private:
|
||||||
|
bool m_SourceMMLoaded;
|
||||||
|
bool m_WeAreUnloaded;
|
||||||
|
bool m_WeGotPauseChange;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SDKExtension *g_pExtensionIface;
|
||||||
|
extern IExtension *myself;
|
||||||
|
|
||||||
|
extern IShareSys *g_pShareSys;
|
||||||
|
extern IShareSys *sharesys; /* Note: Newer name */
|
||||||
|
extern ISourceMod *g_pSM;
|
||||||
|
extern ISourceMod *smutils; /* Note: Newer name */
|
||||||
|
|
||||||
|
/* Optional interfaces are below */
|
||||||
|
#if defined SMEXT_ENABLE_FORWARDSYS
|
||||||
|
extern IForwardManager *g_pForwards;
|
||||||
|
extern IForwardManager *forwards; /* Note: Newer name */
|
||||||
|
#endif //SMEXT_ENABLE_FORWARDSYS
|
||||||
|
#if defined SMEXT_ENABLE_HANDLESYS
|
||||||
|
extern IHandleSys *g_pHandleSys;
|
||||||
|
extern IHandleSys *handlesys; /* Note: Newer name */
|
||||||
|
#endif //SMEXT_ENABLE_HANDLESYS
|
||||||
|
#if defined SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
extern IPlayerManager *playerhelpers;
|
||||||
|
#endif //SMEXT_ENABLE_PLAYERHELPERS
|
||||||
|
#if defined SMEXT_ENABLE_DBMANAGER
|
||||||
|
extern IDBManager *dbi;
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_GAMECONF
|
||||||
|
extern IGameConfigManager *gameconfs;
|
||||||
|
#endif //SMEXT_ENABLE_DBMANAGER
|
||||||
|
#if defined SMEXT_ENABLE_MEMUTILS
|
||||||
|
extern IMemoryUtils *memutils;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_GAMEHELPERS
|
||||||
|
extern IGameHelpers *gamehelpers;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_TIMERSYS
|
||||||
|
extern ITimerSystem *timersys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADTFACTORY
|
||||||
|
extern IADTFactory *adtfactory;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_THREADER
|
||||||
|
extern IThreader *threader;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_LIBSYS
|
||||||
|
extern ILibrarySys *libsys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_PLUGINSYS
|
||||||
|
extern SourceMod::IPluginManager *plsys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_MENUS
|
||||||
|
extern IMenuManager *menus;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_ADMINSYS
|
||||||
|
extern IAdminSystem *adminsys;
|
||||||
|
#endif
|
||||||
|
#if defined SMEXT_ENABLE_USERMSGS
|
||||||
|
extern IUserMessages *usermsgs;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SMEXT_CONF_METAMOD
|
||||||
|
PLUGIN_GLOBALVARS();
|
||||||
|
extern IVEngineServer *engine;
|
||||||
|
extern IServerGameDLL *gamedll;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Creates a SourceMod interface macro pair */
|
||||||
|
#define SM_MKIFACE(name) SMINTERFACE_##name##_NAME, SMINTERFACE_##name##_VERSION
|
||||||
|
/** Automates retrieving SourceMod interfaces */
|
||||||
|
#define SM_GET_IFACE(prefix, addr) \
|
||||||
|
if (!g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)) \
|
||||||
|
{ \
|
||||||
|
if (error != NULL && maxlength) \
|
||||||
|
{ \
|
||||||
|
size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \
|
||||||
|
if (len >= maxlength) \
|
||||||
|
{ \
|
||||||
|
error[maxlength - 1] = '\0'; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
/** Automates retrieving SourceMod interfaces when needed outside of SDK_OnLoad() */
|
||||||
|
#define SM_GET_LATE_IFACE(prefix, addr) \
|
||||||
|
g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)
|
||||||
|
/** Validates a SourceMod interface pointer */
|
||||||
|
#define SM_CHECK_IFACE(prefix, addr) \
|
||||||
|
if (!addr) \
|
||||||
|
{ \
|
||||||
|
if (error != NULL && maxlength) \
|
||||||
|
{ \
|
||||||
|
size_t len = snprintf(error, maxlength, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \
|
||||||
|
if (len >= maxlength) \
|
||||||
|
{ \
|
||||||
|
error[maxlength - 1] = '\0'; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autogenerated by build scripts
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_REGEXEXT_VERSION_H_
|
||||||
|
#define _INCLUDE_REGEXEXT_VERSION_H_
|
||||||
|
|
||||||
|
#define SVN_FULL_VERSION "1.0.2.2236"
|
||||||
|
#define SVN_FILE_VERSION 1,0,2,2236
|
||||||
|
|
||||||
|
#endif //_INCLUDE_REGEXEXT_VERSION_H_
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod Regular Expressions Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autogenerated by build scripts
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_REGEXEXT_VERSION_H_
|
||||||
|
#define _INCLUDE_REGEXEXT_VERSION_H_
|
||||||
|
|
||||||
|
#define SVN_FULL_VERSION "$PMAJOR$.$PMINOR$.$PREVISION$.$GLOBAL_BUILD$"
|
||||||
|
#define SVN_FILE_VERSION $PMAJOR$,$PMINOR$,$PREVISION$,$GLOBAL_BUILD$
|
||||||
|
|
||||||
|
#endif //_INCLUDE_REGEXEXT_VERSION_H_
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
// Microsoft Visual C++ generated resource script.
|
||||||
|
//
|
||||||
|
//#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "winres.h"
|
||||||
|
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION SVN_FILE_VERSION
|
||||||
|
PRODUCTVERSION SVN_FILE_VERSION
|
||||||
|
FILEFLAGSMASK 0x17L
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x2L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "000004b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Comments", "SourceMod Regular Expression Extension"
|
||||||
|
VALUE "FileDescription", "SourceMod Regular Expression Extension"
|
||||||
|
VALUE "FileVersion", SVN_FULL_VERSION
|
||||||
|
VALUE "InternalName", "SourceMod Regular Expression Extension"
|
||||||
|
VALUE "LegalCopyright", "Copyright (c) 2004-2008, AlliedModders LLC"
|
||||||
|
VALUE "OriginalFilename", "regex.ext.dll"
|
||||||
|
VALUE "ProductName", "SourceMod Regular Expression Extension"
|
||||||
|
VALUE "ProductVersion", SVN_FULL_VERSION
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x0, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"#include ""winres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#endif // English (U.S.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
#(C)2004-2006 SourceMM Development Team
|
# (C)2004-2008 SourceMod Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
|
SMSDK = ../..
|
||||||
|
SRCDS_BASE = ~/srcds
|
||||||
HL2SDK_ORIG = ../../../hl2sdk
|
HL2SDK_ORIG = ../../../hl2sdk
|
||||||
HL2SDK_OB = ../../../hl2sdk-ob
|
HL2SDK_OB = ../../../hl2sdk-ob
|
||||||
SOURCEMM14 = ../../../sourcemm-1.4
|
SOURCEMM14 = ../../../sourcemm-1.4
|
||||||
SOURCEMM16 = ../../../sourcemm-1.6
|
SOURCEMM16 = ../../../sourcemm-1.6
|
||||||
SRCDS_BASE = ~/srcds
|
|
||||||
SMSDK = ../..
|
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
@@ -14,19 +14,25 @@ SMSDK = ../..
|
|||||||
|
|
||||||
PROJECT = sdktools
|
PROJECT = sdktools
|
||||||
|
|
||||||
|
#Uncomment for Metamod: Source enabled extension
|
||||||
|
USEMETA = true
|
||||||
|
|
||||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp vdecoder.cpp vcallbuilder.cpp vcaller.cpp \
|
OBJECTS = sdk/smsdk_ext.cpp extension.cpp vdecoder.cpp vcallbuilder.cpp vcaller.cpp \
|
||||||
vnatives.cpp vsound.cpp tenatives.cpp trnatives.cpp tempents.cpp vstringtable.cpp \
|
vnatives.cpp vsound.cpp tenatives.cpp trnatives.cpp tempents.cpp vstringtable.cpp \
|
||||||
vhelpers.cpp vglobals.cpp voice.cpp inputnatives.cpp teamnatives.cpp
|
vhelpers.cpp vglobals.cpp voice.cpp inputnatives.cpp teamnatives.cpp output.cpp \
|
||||||
|
outputnatives.cpp
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing
|
||||||
C_DEBUG_FLAGS = -g -ggdb3
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
CPP = gcc-4.1
|
CPP = gcc-4.1
|
||||||
|
|
||||||
|
override ENGSET = false
|
||||||
ifeq "$(ENGINE)" "original"
|
ifeq "$(ENGINE)" "original"
|
||||||
HL2SDK = $(HL2SDK_ORIG)
|
HL2SDK = $(HL2SDK_ORIG)
|
||||||
HL2PUB = $(HL2SDK_ORIG)/public
|
HL2PUB = $(HL2SDK_ORIG)/public
|
||||||
@@ -34,6 +40,7 @@ ifeq "$(ENGINE)" "original"
|
|||||||
METAMOD = $(SOURCEMM14)
|
METAMOD = $(SOURCEMM14)
|
||||||
INCLUDE += -I$(HL2SDK)/public/dlls
|
INCLUDE += -I$(HL2SDK)/public/dlls
|
||||||
SRCDS = $(SRCDS_BASE)
|
SRCDS = $(SRCDS_BASE)
|
||||||
|
override ENGSET = true
|
||||||
endif
|
endif
|
||||||
ifeq "$(ENGINE)" "orangebox"
|
ifeq "$(ENGINE)" "orangebox"
|
||||||
HL2SDK = $(HL2SDK_OB)
|
HL2SDK = $(HL2SDK_OB)
|
||||||
@@ -43,21 +50,24 @@ ifeq "$(ENGINE)" "orangebox"
|
|||||||
METAMOD = $(SOURCEMM16)
|
METAMOD = $(SOURCEMM16)
|
||||||
INCLUDE += -I$(HL2SDK)/public/game/server -I$(HL2SDK)/common
|
INCLUDE += -I$(HL2SDK)/public/game/server -I$(HL2SDK)/common
|
||||||
SRCDS = $(SRCDS_BASE)/orangebox
|
SRCDS = $(SRCDS_BASE)/orangebox
|
||||||
endif
|
override ENGSET = true
|
||||||
ifeq "$(ENGINE)" ""
|
|
||||||
echo "You must supply ENGINE=orangebox or ENGINE=original"
|
|
||||||
false
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so
|
ifeq "$(USEMETA)" "true"
|
||||||
|
LINK_HL2 = $(HL2LIB)/tier1_i486.a $(HL2LIB)/mathlib_i486.a vstdlib_i486.so tier0_i486.so
|
||||||
|
|
||||||
LINK += $(LINK_HL2) -static-libgcc
|
LINK += $(LINK_HL2)
|
||||||
|
|
||||||
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
INCLUDE += -I. -I.. -Isdk -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/mathlib -I$(HL2PUB)/tier0 \
|
||||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm \
|
-I$(HL2PUB)/tier1 -I$(METAMOD) -I$(METAMOD)/sourcehook -I$(METAMOD)/sourcemm -I$(SMSDK)/public \
|
||||||
-I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \
|
-I$(SMSDK)/public/extensions -I$(SMSDK)/public/sourcepawn
|
||||||
|
else
|
||||||
|
INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS += -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
LINK += -static-libgcc
|
||||||
|
|
||||||
|
CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
|
||||||
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \
|
-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -Wno-switch \
|
||||||
-Wno-unused -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
-Wno-unused -mfpmath=sse -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32
|
||||||
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics
|
CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-statics
|
||||||
@@ -67,15 +77,20 @@ CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti -fno-threadsafe-stat
|
|||||||
################################################
|
################################################
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug.$(ENGINE)
|
BIN_DIR = Debug
|
||||||
CFLAGS += $(C_DEBUG_FLAGS)
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release.$(ENGINE)
|
BIN_DIR = Release
|
||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(USEMETA)" "true"
|
||||||
|
BIN_DIR := $(BIN_DIR).$(ENGINE)
|
||||||
|
endif
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -86,13 +101,21 @@ OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all: check
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
mkdir -p $(BIN_DIR)/sdk
|
||||||
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so
|
if [ "$(USEMETA)" == "true" ]; then \
|
||||||
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so
|
ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so; \
|
||||||
|
ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so; \
|
||||||
|
fi
|
||||||
$(MAKE) -f Makefile extension
|
$(MAKE) -f Makefile extension
|
||||||
|
|
||||||
extension: $(OBJ_LINUX)
|
check:
|
||||||
|
if [ "$(USEMETA)" == "true" ] && [ "$(ENGSET)" == "false" ]; then \
|
||||||
|
echo "You must supply ENGINE=orangebox or ENGINE=original"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
extension: check $(OBJ_LINUX)
|
||||||
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
@@ -100,8 +123,7 @@ debug:
|
|||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean: check
|
||||||
rm -rf $(BIN_DIR)/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf $(BIN_DIR)/sdk/*.o
|
rm -rf $(BIN_DIR)/sdk/*.o
|
||||||
rm -rf $(BIN_DIR)/$(BINARY)
|
rm -rf $(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod SDKTools Extension
|
||||||
|
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_DETOURS_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_DETOURS_H_
|
||||||
|
|
||||||
|
#if defined PLATFORM_LINUX
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#define PAGE_SIZE 4096
|
||||||
|
#define ALIGN(ar) ((long)ar & ~(PAGE_SIZE-1))
|
||||||
|
#define PAGE_EXECUTE_READWRITE PROT_READ|PROT_WRITE|PROT_EXEC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct patch_t
|
||||||
|
{
|
||||||
|
patch_t()
|
||||||
|
{
|
||||||
|
patch[0] = 0;
|
||||||
|
bytes = 0;
|
||||||
|
}
|
||||||
|
unsigned char patch[20];
|
||||||
|
size_t bytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void ProtectMemory(void *addr, int length, int prot)
|
||||||
|
{
|
||||||
|
#if defined PLATFORM_LINUX
|
||||||
|
void *addr2 = (void *)ALIGN(addr);
|
||||||
|
mprotect(addr2, sysconf(_SC_PAGESIZE), prot);
|
||||||
|
#elif defined PLATFORM_WINDOWS
|
||||||
|
DWORD old_prot;
|
||||||
|
VirtualProtect(addr, length, prot, &old_prot);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetMemPatchable(void *address, size_t size)
|
||||||
|
{
|
||||||
|
ProtectMemory(address, (int)size, PAGE_EXECUTE_READWRITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void DoGatePatch(unsigned char *target, void *callback)
|
||||||
|
{
|
||||||
|
SetMemPatchable(target, 20);
|
||||||
|
|
||||||
|
target[0] = 0xFF; /* JMP */
|
||||||
|
target[1] = 0x25; /* MEM32 */
|
||||||
|
*(void **)(&target[2]) = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ApplyPatch(void *address, int offset, const patch_t *patch, patch_t *restore)
|
||||||
|
{
|
||||||
|
ProtectMemory(address, 20, PAGE_EXECUTE_READWRITE);
|
||||||
|
|
||||||
|
unsigned char *addr = (unsigned char *)address + offset;
|
||||||
|
if (restore)
|
||||||
|
{
|
||||||
|
for (size_t i=0; i<patch->bytes; i++)
|
||||||
|
{
|
||||||
|
restore->patch[i] = addr[i];
|
||||||
|
}
|
||||||
|
restore->bytes = patch->bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i=0; i<patch->bytes; i++)
|
||||||
|
{
|
||||||
|
addr[i] = patch->patch[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SOURCEMOD_DETOURS_H_
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod SDKTools Extension
|
* SourceMod SDKTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "vglobals.h"
|
#include "vglobals.h"
|
||||||
#include "tempents.h"
|
#include "tempents.h"
|
||||||
#include "vsound.h"
|
#include "vsound.h"
|
||||||
|
#include "output.h"
|
||||||
|
|
||||||
#if defined ORANGEBOX_BUILD
|
#if defined ORANGEBOX_BUILD
|
||||||
#define SDKTOOLS_GAME_FILE "sdktools.games.ep2"
|
#define SDKTOOLS_GAME_FILE "sdktools.games.ep2"
|
||||||
@@ -49,7 +50,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool);
|
SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool);
|
||||||
SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int);
|
|
||||||
|
|
||||||
SDKTools g_SdkTools; /**< Global singleton for extension's main interface */
|
SDKTools g_SdkTools; /**< Global singleton for extension's main interface */
|
||||||
IServerGameEnts *gameents = NULL;
|
IServerGameEnts *gameents = NULL;
|
||||||
@@ -92,6 +92,7 @@ bool SDKTools::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
|||||||
sharesys->AddNatives(myself, g_VoiceNatives);
|
sharesys->AddNatives(myself, g_VoiceNatives);
|
||||||
sharesys->AddNatives(myself, g_EntInputNatives);
|
sharesys->AddNatives(myself, g_EntInputNatives);
|
||||||
sharesys->AddNatives(myself, g_TeamNatives);
|
sharesys->AddNatives(myself, g_TeamNatives);
|
||||||
|
sharesys->AddNatives(myself, g_EntOutputNatives);
|
||||||
|
|
||||||
SM_GET_IFACE(GAMEHELPERS, g_pGameHelpers);
|
SM_GET_IFACE(GAMEHELPERS, g_pGameHelpers);
|
||||||
|
|
||||||
@@ -110,12 +111,17 @@ bool SDKTools::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
|||||||
CONVAR_REGISTER(this);
|
CONVAR_REGISTER(this);
|
||||||
|
|
||||||
SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelInit, gamedll, this, &SDKTools::LevelInit, true);
|
SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelInit, gamedll, this, &SDKTools::LevelInit, true);
|
||||||
SH_ADD_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, gamedll, this, &SDKTools::OnServerActivate, false);
|
|
||||||
|
|
||||||
playerhelpers->RegisterCommandTargetProcessor(this);
|
playerhelpers->RegisterCommandTargetProcessor(this);
|
||||||
|
|
||||||
MathLib_Init(2.2f, 2.2f, 0.0f, 2);
|
MathLib_Init(2.2f, 2.2f, 0.0f, 2);
|
||||||
|
|
||||||
|
spengine = g_pSM->GetScriptingEngine();
|
||||||
|
|
||||||
|
plsys->AddPluginsListener(&g_OutputManager);
|
||||||
|
|
||||||
|
g_OutputManager.Init();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,9 +164,9 @@ void SDKTools::SDK_OnUnload()
|
|||||||
gameconfs->CloseGameConfigFile(g_pGameConf);
|
gameconfs->CloseGameConfigFile(g_pGameConf);
|
||||||
playerhelpers->RemoveClientListener(&g_SdkTools);
|
playerhelpers->RemoveClientListener(&g_SdkTools);
|
||||||
playerhelpers->UnregisterCommandTargetProcessor(this);
|
playerhelpers->UnregisterCommandTargetProcessor(this);
|
||||||
|
plsys->RemovePluginsListener(&g_OutputManager);
|
||||||
|
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelInit, gamedll, this, &SDKTools::LevelInit, true);
|
SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelInit, gamedll, this, &SDKTools::LevelInit, true);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, gamedll, this, &SDKTools::OnServerActivate, false);
|
|
||||||
|
|
||||||
if (enginePatch)
|
if (enginePatch)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod SDKTools Extension
|
* SourceMod SDKTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -45,6 +45,8 @@
|
|||||||
#include <IEngineSound.h>
|
#include <IEngineSound.h>
|
||||||
#include <ivoiceserver.h>
|
#include <ivoiceserver.h>
|
||||||
#include <iplayerinfo.h>
|
#include <iplayerinfo.h>
|
||||||
|
#include <server_class.h>
|
||||||
|
#include <datamap.h>
|
||||||
#include <convar.h>
|
#include <convar.h>
|
||||||
#include <iserver.h>
|
#include <iserver.h>
|
||||||
#include <cdll_int.h>
|
#include <cdll_int.h>
|
||||||
@@ -71,6 +73,7 @@ public: //public SDKExtension
|
|||||||
virtual bool QueryRunning(char *error, size_t maxlength);
|
virtual bool QueryRunning(char *error, size_t maxlength);
|
||||||
virtual bool QueryInterfaceDrop(SMInterface *pInterface);
|
virtual bool QueryInterfaceDrop(SMInterface *pInterface);
|
||||||
virtual void NotifyInterfaceDrop(SMInterface *pInterface);
|
virtual void NotifyInterfaceDrop(SMInterface *pInterface);
|
||||||
|
virtual void OnCoreMapStart(edict_t *pEdictList, int edictCount, int clientMax);
|
||||||
public:
|
public:
|
||||||
#if defined SMEXT_CONF_METAMOD
|
#if defined SMEXT_CONF_METAMOD
|
||||||
virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late);
|
virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* vim: set ts=4 :
|
* vim: set ts=4 :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod SDKTools Extension
|
* SourceMod SDKTools Extension
|
||||||
* Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug - Old Metamod|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="2"
|
ConfigurationType="2"
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -63,10 +63,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="vstdlib.lib tier0.lib tier1.lib mathlib.lib"
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
IgnoreDefaultLibraryNames="LIBCMT"
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release - Old Metamod|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="2"
|
ConfigurationType="2"
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn"
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableEnhancedInstructionSet="1"
|
EnableEnhancedInstructionSet="1"
|
||||||
@@ -143,9 +143,10 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="vstdlib.lib tier0.lib tier1.lib mathlib.lib"
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
@@ -202,7 +203,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common""
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -228,169 +229,7 @@
|
|||||||
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
IgnoreDefaultLibraryNames="LIBCMT"
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug - Episode 1|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
IgnoreDefaultLibraryNames="LIBCMT"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug - Old Metamod|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
IgnoreDefaultLibraryNames="LIBCMT"
|
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -446,7 +285,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\dlls";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(HL2SDKOB)\public\vstdlib";"$(HL2SDKOB)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\common""
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDKOB)\common";"$(HL2SDKOB)\public";"$(HL2SDKOB)\public\engine";"$(HL2SDKOB)\public\game\server";"$(HL2SDKOB)\public\mathlib";"$(HL2SDKOB)\public\tier0";"$(HL2SDKOB)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD;ORANGEBOX_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableEnhancedInstructionSet="1"
|
EnableEnhancedInstructionSet="1"
|
||||||
@@ -470,6 +309,7 @@
|
|||||||
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
AdditionalDependencies=""$(HL2SDKOB)\lib\public\tier0.lib" "$(HL2SDKOB)\lib\public\tier1.lib" "$(HL2SDKOB)\lib\public\vstdlib.lib" "$(HL2SDKOB)\lib\public\mathlib.lib""
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
@@ -501,6 +341,87 @@
|
|||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug - Episode 1|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
EnableEnhancedInstructionSet="1"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
||||||
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMT"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release - Episode 1|Win32"
|
Name="Release - Episode 1|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
@@ -527,88 +448,7 @@
|
|||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
FavorSizeOrSpeed="1"
|
FavorSizeOrSpeed="1"
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\extensions;..\..\..\public\sourcepawn;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\mathlib";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(SOURCEMM16)";"$(SOURCEMM16)\sourcemm";"$(SOURCEMM16)\sourcehook""
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableEnhancedInstructionSet="1"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
Detect64BitPortabilityProblems="false"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
SubSystem="2"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release - Old Metamod|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="2"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
AdditionalIncludeDirectories="..;..\sdk;..\..\..\public;..\..\..\public\sourcepawn;..\..\..\public\extensions;"$(HL2SDK)\public";"$(HL2SDK)\public\dlls";"$(HL2SDK)\public\engine";"$(HL2SDK)\public\tier0";"$(HL2SDK)\public\tier1";"$(HL2SDK)\public\vstdlib";"$(HL2SDK)\tier1";"$(SOURCEMM14)";"$(SOURCEMM14)\sourcemm";"$(SOURCEMM14)\sourcehook""
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDK_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCEMOD_BUILD"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
EnableEnhancedInstructionSet="1"
|
EnableEnhancedInstructionSet="1"
|
||||||
@@ -632,6 +472,7 @@
|
|||||||
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
AdditionalDependencies=""$(HL2SDK)\lib\public\tier0.lib" "$(HL2SDK)\lib\public\tier1.lib" "$(HL2SDK)\lib\public\vstdlib.lib" "$(HL2SDK)\lib\public\mathlib.lib""
|
||||||
OutputFile="$(OutDir)\sdktools.ext.dll"
|
OutputFile="$(OutDir)\sdktools.ext.dll"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
|
IgnoreDefaultLibraryNames="LIBC;LIBCD;LIBCMTD"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
@@ -680,6 +521,14 @@
|
|||||||
RelativePath="..\inputnatives.cpp"
|
RelativePath="..\inputnatives.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\output.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\outputnatives.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\teamnatives.cpp"
|
RelativePath="..\teamnatives.cpp"
|
||||||
>
|
>
|
||||||
@@ -742,10 +591,18 @@
|
|||||||
RelativePath="..\CellRecipientFilter.h"
|
RelativePath="..\CellRecipientFilter.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\detours.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\extension.h"
|
RelativePath="..\extension.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\output.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\tempents.h"
|
RelativePath="..\tempents.h"
|
||||||
>
|
>
|
||||||
@@ -796,78 +653,6 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath="..\sdk\smsdk_ext.cpp"
|
RelativePath="..\sdk\smsdk_ext.cpp"
|
||||||
>
|
>
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug - Orange Box|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug - Episode 1|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug - Old Metamod|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release - Orange Box|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release - Episode 1|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release - Old Metamod|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
|
||||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\sdk\smsdk_ext.h"
|
RelativePath="..\sdk\smsdk_ext.h"
|
||||||
|
|||||||
@@ -0,0 +1,485 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod SDKTools Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "extension.h"
|
||||||
|
#include "output.h"
|
||||||
|
|
||||||
|
ISourcePawnEngine *spengine = NULL;
|
||||||
|
EntityOutputManager g_OutputManager;
|
||||||
|
|
||||||
|
EntityOutputManager::EntityOutputManager()
|
||||||
|
{
|
||||||
|
info_address = NULL;
|
||||||
|
info_callback = NULL;
|
||||||
|
HookCount = 0;
|
||||||
|
is_detoured = false;
|
||||||
|
enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityOutputManager::~EntityOutputManager()
|
||||||
|
{
|
||||||
|
if (!enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityOutputs->Destroy();
|
||||||
|
ClassNames->Destroy();
|
||||||
|
ShutdownFireEventDetour();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::Init()
|
||||||
|
{
|
||||||
|
enabled = CreateFireEventDetour();
|
||||||
|
|
||||||
|
if (!enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityOutputs = adtfactory->CreateBasicTrie();
|
||||||
|
ClassNames = adtfactory->CreateBasicTrie();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EntityOutputManager::IsEnabled()
|
||||||
|
{
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EntityOutputManager::CreateFireEventDetour()
|
||||||
|
{
|
||||||
|
if (!g_pGameConf->GetMemSig("FireOutput", &info_address) || !info_address)
|
||||||
|
{
|
||||||
|
g_pSM->LogError(myself, "Could not locate FireOutput - Disabling Entity Outputs");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_pGameConf->GetOffset("FireOutputBackup", (int *)&(info_restore.bytes)))
|
||||||
|
{
|
||||||
|
g_pSM->LogError(myself, "Could not locate FireOutputBackup - Disabling Entity Outputs");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First, save restore bits */
|
||||||
|
for (size_t i=0; i<info_restore.bytes; i++)
|
||||||
|
{
|
||||||
|
info_restore.patch[i] = ((unsigned char *)info_address)[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
info_callback = spengine->ExecAlloc(100);
|
||||||
|
JitWriter wr;
|
||||||
|
JitWriter *jit = ≀
|
||||||
|
wr.outbase = (jitcode_t)info_callback;
|
||||||
|
wr.outptr = wr.outbase;
|
||||||
|
|
||||||
|
/* Function we are detouring into is
|
||||||
|
*
|
||||||
|
* void FireEventDetour(CBaseEntityOutput(void *) *pOutput, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay = 0 )
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* push fDelay [esp+20h]
|
||||||
|
* push pCaller [esp+1Ch]
|
||||||
|
* push pActivator [esp+18h]
|
||||||
|
* push pOutput [ecx]
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if defined PLATFORM_WINDOWS
|
||||||
|
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 32);
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 32);
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 32);
|
||||||
|
|
||||||
|
IA32_Push_Reg(jit, REG_ECX);
|
||||||
|
|
||||||
|
#elif defined PLATFORM_LINUX
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 20);
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 20);
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 20);
|
||||||
|
|
||||||
|
IA32_Push_Rm_Disp8_ESP(jit, 16);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
jitoffs_t call = IA32_Call_Imm32(jit, 0);
|
||||||
|
IA32_Write_Jump32_Abs(jit, call, (void *)TempDetour);
|
||||||
|
|
||||||
|
|
||||||
|
#if defined PLATFORM_LINUX
|
||||||
|
IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG); //add esp, 4
|
||||||
|
#elif defined PLATFORM_WINDOWS
|
||||||
|
IA32_Pop_Reg(jit, REG_ECX);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
IA32_Add_Rm_Imm8(jit, REG_ESP, 12, MOD_REG); //add esp, 12 (0Ch)
|
||||||
|
|
||||||
|
|
||||||
|
/* Patch old bytes in */
|
||||||
|
for (size_t i=0; i<info_restore.bytes; i++)
|
||||||
|
{
|
||||||
|
jit->write_ubyte(info_restore.patch[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return to the original function */
|
||||||
|
call = IA32_Jump_Imm32(jit, 0);
|
||||||
|
IA32_Write_Jump32_Abs(jit, call, (unsigned char *)info_address + info_restore.bytes);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::InitFireEventDetour()
|
||||||
|
{
|
||||||
|
if (!is_detoured)
|
||||||
|
{
|
||||||
|
DoGatePatch((unsigned char *)info_address, &info_callback);
|
||||||
|
is_detoured = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::DeleteFireEventDetour()
|
||||||
|
{
|
||||||
|
if (is_detoured)
|
||||||
|
{
|
||||||
|
ShutdownFireEventDetour();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info_callback)
|
||||||
|
{
|
||||||
|
/* Free the gate */
|
||||||
|
spengine->ExecFree(info_callback);
|
||||||
|
info_callback = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TempDetour(void *pOutput, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay)
|
||||||
|
{
|
||||||
|
g_OutputManager.FireEventDetour(pOutput, pActivator, pCaller, fDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::ShutdownFireEventDetour()
|
||||||
|
{
|
||||||
|
if (info_callback)
|
||||||
|
{
|
||||||
|
/* Remove the patch */
|
||||||
|
ApplyPatch(info_address, 0, &info_restore, NULL);
|
||||||
|
is_detoured = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::FireEventDetour(void *pOutput, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay)
|
||||||
|
{
|
||||||
|
char sOutput[20];
|
||||||
|
Q_snprintf(sOutput, sizeof(sOutput), "%x", pOutput);
|
||||||
|
|
||||||
|
// attempt to directly lookup a hook using the pOutput pointer
|
||||||
|
OutputNameStruct *pOutputName = NULL;
|
||||||
|
|
||||||
|
edict_t *pEdict = gameents->BaseEntityToEdict(pCaller);
|
||||||
|
|
||||||
|
/* TODO: Add support for entities without an edict */
|
||||||
|
if (pEdict == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool fastLookup = false;
|
||||||
|
|
||||||
|
// Fast lookup failed - check the slow way for hooks that havn't fired yet
|
||||||
|
if ((fastLookup = EntityOutputs->Retrieve(sOutput, (void **)&pOutputName)) == false)
|
||||||
|
{
|
||||||
|
const char *classname = pEdict->GetClassName();
|
||||||
|
const char *outputname = FindOutputName(pOutput, pCaller);
|
||||||
|
|
||||||
|
pOutputName = FindOutputPointer(classname, outputname, false);
|
||||||
|
|
||||||
|
if (!pOutputName)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pOutputName->hooks.empty())
|
||||||
|
{
|
||||||
|
if (!fastLookup)
|
||||||
|
{
|
||||||
|
// hook exists on this classname and output - map it into our quick find trie
|
||||||
|
EntityOutputs->Insert(sOutput, pOutputName);
|
||||||
|
}
|
||||||
|
|
||||||
|
SourceHook::List<omg_hooks *>::iterator _iter;
|
||||||
|
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
_iter = pOutputName->hooks.begin();
|
||||||
|
|
||||||
|
while (_iter != pOutputName->hooks.end())
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*_iter;
|
||||||
|
|
||||||
|
hook->in_use = true;
|
||||||
|
|
||||||
|
int serial = pEdict->m_NetworkSerialNumber;
|
||||||
|
|
||||||
|
if (serial != hook->entity_filter && hook->entity_index == engine->IndexOfEdict(pEdict))
|
||||||
|
{
|
||||||
|
// same entity index but different serial number. Entity has changed, kill the hook.
|
||||||
|
_iter = pOutputName->hooks.erase(_iter);
|
||||||
|
CleanUpHook(hook);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hook->entity_filter == -1 || hook->entity_filter == serial) // Global classname hook
|
||||||
|
{
|
||||||
|
//fire the forward to hook->pf
|
||||||
|
hook->pf->PushString(pOutputName->Name);
|
||||||
|
hook->pf->PushCell(engine->IndexOfEdict(pEdict));
|
||||||
|
|
||||||
|
edict_t *pEdictActivator = gameents->BaseEntityToEdict(pActivator);
|
||||||
|
if (!pEdictActivator)
|
||||||
|
{
|
||||||
|
hook->pf->PushCell(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hook->pf->PushCell(engine->IndexOfEdict(pEdictActivator));
|
||||||
|
}
|
||||||
|
//hook->pf->PushCell(handle);
|
||||||
|
hook->pf->PushFloat(fDelay);
|
||||||
|
hook->pf->Execute(NULL);
|
||||||
|
|
||||||
|
if ((hook->entity_filter != -1) && hook->only_once)
|
||||||
|
{
|
||||||
|
_iter = pOutputName->hooks.erase(_iter);
|
||||||
|
CleanUpHook(hook);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hook->delete_me)
|
||||||
|
{
|
||||||
|
_iter = pOutputName->hooks.erase(_iter);
|
||||||
|
CleanUpHook(hook);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hook->in_use = false;
|
||||||
|
_iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
omg_hooks *EntityOutputManager::NewHook()
|
||||||
|
{
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
if (FreeHooks.empty())
|
||||||
|
{
|
||||||
|
hook = new omg_hooks;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hook = g_OutputManager.FreeHooks.front();
|
||||||
|
g_OutputManager.FreeHooks.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::OnHookAdded()
|
||||||
|
{
|
||||||
|
HookCount++;
|
||||||
|
|
||||||
|
if (HookCount == 1)
|
||||||
|
{
|
||||||
|
// This is the first hook created
|
||||||
|
InitFireEventDetour();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::OnHookRemoved()
|
||||||
|
{
|
||||||
|
HookCount--;
|
||||||
|
|
||||||
|
if (HookCount == 0)
|
||||||
|
{
|
||||||
|
ShutdownFireEventDetour();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::CleanUpHook(omg_hooks *hook)
|
||||||
|
{
|
||||||
|
FreeHooks.push(hook);
|
||||||
|
|
||||||
|
OnHookRemoved();
|
||||||
|
|
||||||
|
IPlugin *pPlugin = plsys->FindPluginByContext(hook->pf->GetParentContext()->GetContext());
|
||||||
|
SourceHook::List<omg_hooks *> *pList = NULL;
|
||||||
|
|
||||||
|
if (!pPlugin->GetProperty("OutputHookList", (void **)&pList, false) || !pList)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SourceHook::List<omg_hooks *>::iterator p_iter = pList->begin();
|
||||||
|
|
||||||
|
omg_hooks *pluginHook;
|
||||||
|
|
||||||
|
while (p_iter != pList->end())
|
||||||
|
{
|
||||||
|
pluginHook = (omg_hooks *)*p_iter;
|
||||||
|
if (pluginHook == hook)
|
||||||
|
{
|
||||||
|
p_iter = pList->erase(p_iter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p_iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityOutputManager::OnPluginDestroyed(IPlugin *plugin)
|
||||||
|
{
|
||||||
|
SourceHook::List<omg_hooks *> *pList = NULL;
|
||||||
|
|
||||||
|
if (plugin->GetProperty("OutputHookList", (void **)&pList, true))
|
||||||
|
{
|
||||||
|
SourceHook::List<omg_hooks *>::iterator p_iter = pList->begin();
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
while (p_iter != pList->end())
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*p_iter;
|
||||||
|
|
||||||
|
p_iter = pList->erase(p_iter); //remove from this plugins list
|
||||||
|
hook->m_parent->hooks.remove(hook); // remove from the y's list
|
||||||
|
|
||||||
|
FreeHooks.push(hook); //save the omg_hook
|
||||||
|
|
||||||
|
OnHookRemoved();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputNameStruct *EntityOutputManager::FindOutputPointer(const char *classname, const char *outputname, bool create)
|
||||||
|
{
|
||||||
|
ClassNameStruct *pClassname;
|
||||||
|
|
||||||
|
if (!ClassNames->Retrieve(classname, (void **)&pClassname))
|
||||||
|
{
|
||||||
|
if (create)
|
||||||
|
{
|
||||||
|
pClassname = new ClassNameStruct;
|
||||||
|
ClassNames->Insert(classname, pClassname);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputNameStruct *pOutputName;
|
||||||
|
|
||||||
|
if (!pClassname->OutputList->Retrieve(outputname, (void **)&pOutputName))
|
||||||
|
{
|
||||||
|
if (create)
|
||||||
|
{
|
||||||
|
pOutputName = new OutputNameStruct;
|
||||||
|
pClassname->OutputList->Insert(outputname, pOutputName);
|
||||||
|
strncpy(pOutputName->Name, outputname, sizeof(pOutputName->Name));
|
||||||
|
pOutputName->Name[49] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pOutputName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iterate the datamap of pCaller and look for output pointers with the same address as pOutput
|
||||||
|
const char *EntityOutputManager::FindOutputName(void *pOutput, CBaseEntity *pCaller)
|
||||||
|
{
|
||||||
|
datamap_t *pMap = gamehelpers->GetDataMap(pCaller);
|
||||||
|
|
||||||
|
while (pMap)
|
||||||
|
{
|
||||||
|
for (int i=0; i<pMap->dataNumFields; i++)
|
||||||
|
{
|
||||||
|
if (pMap->dataDesc[i].flags & FTYPEDESC_OUTPUT)
|
||||||
|
{
|
||||||
|
if ((char *)pCaller + pMap->dataDesc[i].fieldOffset[0] == pOutput)
|
||||||
|
{
|
||||||
|
return pMap->dataDesc[i].externalName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pMap = pMap->baseMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thanks SM core
|
||||||
|
edict_t *EntityOutputManager::BaseHandleToEdict(CBaseHandle &hndl)
|
||||||
|
{
|
||||||
|
if (!hndl.IsValid())
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = hndl.GetEntryIndex();
|
||||||
|
|
||||||
|
edict_t *pStoredEdict;
|
||||||
|
|
||||||
|
pStoredEdict = engine->PEntityOfEntIndex(index);
|
||||||
|
|
||||||
|
if (pStoredEdict == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
IServerEntity *pSE = pStoredEdict->GetIServerEntity();
|
||||||
|
|
||||||
|
if (pSE == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pSE->GetRefEHandle() != hndl)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pStoredEdict;
|
||||||
|
}
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod SDKTools Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_SOURCEMOD_OUTPUT_H_
|
||||||
|
#define _INCLUDE_SOURCEMOD_OUTPUT_H_
|
||||||
|
|
||||||
|
#include <jit/jit_helpers.h>
|
||||||
|
#include <jit/x86/x86_macros.h>
|
||||||
|
#include "sh_list.h"
|
||||||
|
#include "sh_stack.h"
|
||||||
|
#include "sm_trie_tpl.h"
|
||||||
|
#include "detours.h"
|
||||||
|
|
||||||
|
extern ISourcePawnEngine *spengine;
|
||||||
|
|
||||||
|
struct OutputNameStruct;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a function specific hook that corresponds to an entity classname
|
||||||
|
* and outputname. There can be many of these for each classname/output combo
|
||||||
|
*/
|
||||||
|
struct omg_hooks
|
||||||
|
{
|
||||||
|
int entity_filter; // if not -1 is an entity signature
|
||||||
|
int entity_index;
|
||||||
|
bool only_once;
|
||||||
|
IPluginFunction *pf;
|
||||||
|
OutputNameStruct *m_parent;
|
||||||
|
bool in_use;
|
||||||
|
bool delete_me;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This represents an output belonging to a specific classname
|
||||||
|
*/
|
||||||
|
struct OutputNameStruct
|
||||||
|
{
|
||||||
|
SourceHook::List<omg_hooks *> hooks;
|
||||||
|
char Name[50];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This represents an entity classname
|
||||||
|
*/
|
||||||
|
struct ClassNameStruct
|
||||||
|
{
|
||||||
|
//Trie mapping outputname to a OutputNameStruct
|
||||||
|
//KTrie<OutputNameStruct *> OutputList;
|
||||||
|
IBasicTrie *OutputList;
|
||||||
|
|
||||||
|
ClassNameStruct()
|
||||||
|
{
|
||||||
|
OutputList = adtfactory->CreateBasicTrie();
|
||||||
|
}
|
||||||
|
|
||||||
|
~ClassNameStruct()
|
||||||
|
{
|
||||||
|
OutputList->Destroy();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class EntityOutputManager : public IPluginsListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EntityOutputManager();
|
||||||
|
~EntityOutputManager();
|
||||||
|
public:
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
bool IsEnabled();
|
||||||
|
|
||||||
|
void FireEventDetour(void *pOutput, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay);
|
||||||
|
|
||||||
|
void OnPluginDestroyed(IPlugin *plugin);
|
||||||
|
|
||||||
|
OutputNameStruct *FindOutputPointer(const char *classname, const char *outputname, bool create);
|
||||||
|
|
||||||
|
void CleanUpHook(omg_hooks *hook);
|
||||||
|
|
||||||
|
omg_hooks *NewHook();
|
||||||
|
|
||||||
|
void OnHookAdded();
|
||||||
|
void OnHookRemoved();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool enabled;
|
||||||
|
|
||||||
|
// Patch/unpatch the server dll
|
||||||
|
void InitFireEventDetour();
|
||||||
|
void ShutdownFireEventDetour();
|
||||||
|
bool is_detoured;
|
||||||
|
|
||||||
|
//These create/delete the allocated memory and write into it
|
||||||
|
bool CreateFireEventDetour();
|
||||||
|
void DeleteFireEventDetour();
|
||||||
|
|
||||||
|
const char *FindOutputName(void *pOutput, CBaseEntity *pCaller);
|
||||||
|
edict_t *BaseHandleToEdict(CBaseHandle &hndl);
|
||||||
|
|
||||||
|
//Maps CEntityOutput * to a OutputNameStruct
|
||||||
|
IBasicTrie *EntityOutputs;
|
||||||
|
// Maps classname to a ClassNameStruct
|
||||||
|
IBasicTrie *ClassNames;
|
||||||
|
|
||||||
|
SourceHook::CStack<omg_hooks *> FreeHooks; //Stores hook pointers to avoid calls to new
|
||||||
|
|
||||||
|
int HookCount;
|
||||||
|
|
||||||
|
patch_t info_restore;
|
||||||
|
void *info_address;
|
||||||
|
void *info_callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
void TempDetour(void *pOutput, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay);
|
||||||
|
|
||||||
|
extern EntityOutputManager g_OutputManager;
|
||||||
|
|
||||||
|
extern sp_nativeinfo_t g_EntOutputNatives[];
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SOURCEMOD_OUTPUT_H_
|
||||||
@@ -0,0 +1,278 @@
|
|||||||
|
/**
|
||||||
|
* vim: set ts=4 :
|
||||||
|
* =============================================================================
|
||||||
|
* SourceMod SDKTools Extension
|
||||||
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
|
* =============================================================================
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||||
|
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||||
|
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||||
|
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||||
|
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||||
|
* this exception to all derivative works. AlliedModders LLC defines further
|
||||||
|
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||||
|
* or <http://www.sourcemod.net/license.php>.
|
||||||
|
*
|
||||||
|
* Version: $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "extension.h"
|
||||||
|
#include "output.h"
|
||||||
|
|
||||||
|
// HookSingleEntityOutput(ent, const String:output[], function, bool:once);
|
||||||
|
cell_t HookSingleEntityOutput(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
if (!g_OutputManager.IsEnabled())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity Outputs are disabled - See error logs for details");
|
||||||
|
}
|
||||||
|
|
||||||
|
edict_t *pEdict = engine->PEntityOfEntIndex(params[1]);
|
||||||
|
if (!pEdict)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid Entity index %i", params[1]);
|
||||||
|
}
|
||||||
|
const char *classname = pEdict->GetClassName();
|
||||||
|
|
||||||
|
char *outputname;
|
||||||
|
pContext->LocalToString(params[2], &outputname);
|
||||||
|
|
||||||
|
OutputNameStruct *pOutputName = g_OutputManager.FindOutputPointer((const char *)classname, outputname, true);
|
||||||
|
|
||||||
|
//Check for an existing identical hook
|
||||||
|
SourceHook::List<omg_hooks *>::iterator _iter;
|
||||||
|
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
IPluginFunction *pFunction;
|
||||||
|
pFunction = pContext->GetFunctionById(params[3]);
|
||||||
|
|
||||||
|
for (_iter=pOutputName->hooks.begin(); _iter!=pOutputName->hooks.end(); _iter++)
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*_iter;
|
||||||
|
if (hook->pf == pFunction && hook->entity_filter == pEdict->m_NetworkSerialNumber)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hook = g_OutputManager.NewHook();
|
||||||
|
|
||||||
|
hook->entity_filter = pEdict->m_NetworkSerialNumber;
|
||||||
|
hook->entity_index = engine->IndexOfEdict(pEdict);
|
||||||
|
hook->only_once= !!params[4];
|
||||||
|
hook->pf = pFunction;
|
||||||
|
hook->m_parent = pOutputName;
|
||||||
|
hook->in_use = false;
|
||||||
|
hook->delete_me = false;
|
||||||
|
|
||||||
|
pOutputName->hooks.push_back(hook);
|
||||||
|
|
||||||
|
g_OutputManager.OnHookAdded();
|
||||||
|
|
||||||
|
IPlugin *pPlugin = plsys->FindPluginByContext(pContext->GetContext());
|
||||||
|
SourceHook::List<omg_hooks *> *pList = NULL;
|
||||||
|
|
||||||
|
if (!pPlugin->GetProperty("OutputHookList", (void **)&pList, false) || !pList)
|
||||||
|
{
|
||||||
|
pList = new SourceHook::List<omg_hooks *>;
|
||||||
|
pPlugin->SetProperty("OutputHookList", pList);
|
||||||
|
}
|
||||||
|
|
||||||
|
pList->push_back(hook);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// HookEntityOutput(const String:classname[], const String:output[], function);
|
||||||
|
cell_t HookEntityOutput(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
if (!g_OutputManager.IsEnabled())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity Outputs are disabled - See error logs for details");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Find or create the base structures for this classname and the output
|
||||||
|
char *classname;
|
||||||
|
pContext->LocalToString(params[1], &classname);
|
||||||
|
|
||||||
|
char *outputname;
|
||||||
|
pContext->LocalToString(params[2], &outputname);
|
||||||
|
|
||||||
|
OutputNameStruct *pOutputName = g_OutputManager.FindOutputPointer((const char *)classname, outputname, true);
|
||||||
|
|
||||||
|
//Check for an existing identical hook
|
||||||
|
SourceHook::List<omg_hooks *>::iterator _iter;
|
||||||
|
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
IPluginFunction *pFunction;
|
||||||
|
pFunction = pContext->GetFunctionById(params[3]);
|
||||||
|
|
||||||
|
for (_iter=pOutputName->hooks.begin(); _iter!=pOutputName->hooks.end(); _iter++)
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*_iter;
|
||||||
|
if (hook->pf == pFunction && hook->entity_filter == -1)
|
||||||
|
{
|
||||||
|
//already hooked to this function...
|
||||||
|
//throw an error or just let them get away with stupidity?
|
||||||
|
// seems like poor coding if they dont know if something is hooked or not
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hook = g_OutputManager.NewHook();
|
||||||
|
|
||||||
|
hook->entity_filter = -1;
|
||||||
|
hook->pf = pFunction;
|
||||||
|
hook->m_parent = pOutputName;
|
||||||
|
hook->in_use = false;
|
||||||
|
hook->delete_me = false;
|
||||||
|
|
||||||
|
pOutputName->hooks.push_back(hook);
|
||||||
|
|
||||||
|
g_OutputManager.OnHookAdded();
|
||||||
|
|
||||||
|
IPlugin *pPlugin = plsys->FindPluginByContext(pContext->GetContext());
|
||||||
|
SourceHook::List<omg_hooks *> *pList = NULL;
|
||||||
|
|
||||||
|
if (!pPlugin->GetProperty("OutputHookList", (void **)&pList, false) || !pList)
|
||||||
|
{
|
||||||
|
pList = new SourceHook::List<omg_hooks *>;
|
||||||
|
pPlugin->SetProperty("OutputHookList", pList);
|
||||||
|
}
|
||||||
|
|
||||||
|
pList->push_back(hook);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnHookEntityOutput(const String:classname[], const String:output[], EntityOutput:callback);
|
||||||
|
cell_t UnHookEntityOutput(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
if (!g_OutputManager.IsEnabled())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity Outputs are disabled - See error logs for details");
|
||||||
|
}
|
||||||
|
|
||||||
|
char *classname;
|
||||||
|
pContext->LocalToString(params[1], &classname);
|
||||||
|
|
||||||
|
char *outputname;
|
||||||
|
pContext->LocalToString(params[2], &outputname);
|
||||||
|
|
||||||
|
OutputNameStruct *pOutputName = g_OutputManager.FindOutputPointer((const char *)classname, outputname, false);
|
||||||
|
|
||||||
|
if (!pOutputName)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check for an existing identical hook
|
||||||
|
SourceHook::List<omg_hooks *>::iterator _iter;
|
||||||
|
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
IPluginFunction *pFunction;
|
||||||
|
pFunction = pContext->GetFunctionById(params[3]);
|
||||||
|
|
||||||
|
for (_iter=pOutputName->hooks.begin(); _iter!=pOutputName->hooks.end(); _iter++)
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*_iter;
|
||||||
|
if (hook->pf == pFunction && hook->entity_filter == -1)
|
||||||
|
{
|
||||||
|
// remove this hook.
|
||||||
|
if (hook->in_use)
|
||||||
|
{
|
||||||
|
hook->delete_me = true;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pOutputName->hooks.erase(_iter);
|
||||||
|
g_OutputManager.CleanUpHook(hook);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnHookSingleEntityOutput(entity, const String:output[], EntityOutput:callback);
|
||||||
|
cell_t UnHookSingleEntityOutput(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
if (!g_OutputManager.IsEnabled())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Entity Outputs are disabled - See error logs for details");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the classname of the entity and lookup the classname and output structures
|
||||||
|
edict_t *pEdict = engine->PEntityOfEntIndex(params[1]);
|
||||||
|
if (!pEdict)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid Entity index %i", params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *classname = pEdict->GetClassName();
|
||||||
|
|
||||||
|
char *outputname;
|
||||||
|
pContext->LocalToString(params[2], &outputname);
|
||||||
|
|
||||||
|
OutputNameStruct *pOutputName = g_OutputManager.FindOutputPointer((const char *)classname, outputname, false);
|
||||||
|
|
||||||
|
if (!pOutputName)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check for an existing identical hook
|
||||||
|
SourceHook::List<omg_hooks *>::iterator _iter;
|
||||||
|
|
||||||
|
omg_hooks *hook;
|
||||||
|
|
||||||
|
IPluginFunction *pFunction;
|
||||||
|
pFunction = pContext->GetFunctionById(params[3]);
|
||||||
|
|
||||||
|
for (_iter=pOutputName->hooks.begin(); _iter!=pOutputName->hooks.end(); _iter++)
|
||||||
|
{
|
||||||
|
hook = (omg_hooks *)*_iter;
|
||||||
|
if (hook->pf == pFunction && hook->entity_index == engine->IndexOfEdict(pEdict))
|
||||||
|
{
|
||||||
|
// remove this hook.
|
||||||
|
if (hook->in_use)
|
||||||
|
{
|
||||||
|
hook->delete_me = true;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pOutputName->hooks.erase(_iter);
|
||||||
|
g_OutputManager.CleanUpHook(hook);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp_nativeinfo_t g_EntOutputNatives[] =
|
||||||
|
{
|
||||||
|
{"HookEntityOutput", HookEntityOutput},
|
||||||
|
{"UnhookEntityOutput", UnHookEntityOutput},
|
||||||
|
{"HookSingleEntityOutput", HookSingleEntityOutput},
|
||||||
|
{"UnhookSingleEntityOutput", UnHookSingleEntityOutput},
|
||||||
|
{NULL, NULL},
|
||||||
|
};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user