diff --git a/dlls/cstrike/cstrike/AMBuilder b/dlls/cstrike/cstrike/AMBuilder
index 5efeb1d0..fc243e71 100644
--- a/dlls/cstrike/cstrike/AMBuilder
+++ b/dlls/cstrike/cstrike/AMBuilder
@@ -9,6 +9,7 @@ binary.sources = [
'CstrikePlayer.cpp',
'CstrikeNatives.cpp',
'CstrikeHacks.cpp',
+ 'CstrikeUtils.cpp',
'../../../public/memtools/MemoryUtils.cpp',
'../../../public/memtools/CDetour/detours.cpp',
'../../../public/memtools/CDetour/asm/asm.c',
diff --git a/dlls/cstrike/cstrike/CstrikeNatives.cpp b/dlls/cstrike/cstrike/CstrikeNatives.cpp
index ed581af2..980f2cc1 100644
--- a/dlls/cstrike/cstrike/CstrikeNatives.cpp
+++ b/dlls/cstrike/cstrike/CstrikeNatives.cpp
@@ -30,43 +30,15 @@
* you do not wish to do so, delete this exception statement from your
* version.
*/
-#include "CstrikeNatives.h"
#include "CstrikeDatas.h"
+#include "CstrikePlayer.h"
+#include "CstrikeUtils.h"
CCstrikePlayer g_players[33];
int g_zooming[33] = {0};
bool g_precachedknife = false;
bool g_noknives = false;
-// Utils first
-
-bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer) {
- bool player = false;
-
- if (strcmp(STRING(pPlayer->v.classname), "player") == 0)
- player = true;
-
- return player;
-}
-
-void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message)
-{
- MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "TextMsg", NULL), NULL, pPlayer);
- WRITE_BYTE(HUD_PRINTCENTER); // 1 = console, 2 = console, 3 = chat, 4 = center
- WRITE_STRING(message);
- MESSAGE_END();
- /*
- The byte above seems to use these:
- #define HUD_PRINTNOTIFY 1
- #define HUD_PRINTCONSOLE 2
- #define HUD_PRINTTALK 3
- #define HUD_PRINTCENTER 4
- However both 1 and 2 seems to go to console with Steam CS.
- */
-}
-
-// Then natives
-
static cell AMX_NATIVE_CALL cs_set_user_money(AMX *amx, cell *params) // cs_set_user_money(index, money, flash = 1); = 3 arguments
{
// Give money to user
diff --git a/dlls/cstrike/cstrike/CstrikeNatives.h b/dlls/cstrike/cstrike/CstrikeNatives.h
deleted file mode 100644
index 1d39bc41..00000000
--- a/dlls/cstrike/cstrike/CstrikeNatives.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* AMX Mod X
- * Counter-Strike Module
- *
- * by the AMX Mod X Development Team
- *
- * This file is part of AMX Mod X.
- *
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * 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, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * In addition, as a special exception, the author gives permission to
- * link the code of this program with the Half-Life Game Engine ("HL
- * Engine") and Modified Game Libraries ("MODs") developed by Valve,
- * L.L.C ("Valve"). You must obey the GNU General Public License in all
- * respects for all of the code used other than the HL Engine and MODs
- * from Valve. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version.
- */
-
-// cstrike MODULE TO DO HERE: http://www.amxmodx.org/forums/viewtopic.php?t=45
-// This implementation uses Vexd's way (lightly modified) of setting models on players.
-
-#include "amxxmodule.h"
-#include "CstrikePlayer.h"
-
-#define GETINFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
-#define SETCLIENTKEYVALUE (*g_engfuncs.pfnSetClientKeyValue)
-#define GETCLIENTKEYVALUE (*g_engfuncs.pfnInfoKeyValue)
-#define CREATENAMEDENTITY (*g_engfuncs.pfnCreateNamedEntity)
-
-extern CCstrikePlayer g_players[33];
-extern int g_zooming[33];
-extern bool g_precachedknife;
-extern bool g_noknives;
-// Globals above
-
-#define CHECK_ENTITY(x) \
- if (x < 0 || x > gpGlobals->maxEntities) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \
- return 0; \
- } else { \
- if (x <= gpGlobals->maxClients) { \
- if (!MF_IsPlayerIngame(x)) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Invalid player %d (not in-game)", x); \
- return 0; \
- } \
- } else { \
- if (x != 0 && FNullEnt(INDEXENT(x))) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \
- return 0; \
- } \
- } \
- }
-
-#define CHECK_PLAYER(x) \
- if (x < 1 || x > gpGlobals->maxClients) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Player out of range (%d)", x); \
- return 0; \
- } else { \
- if (!MF_IsPlayerIngame(x) || FNullEnt(MF_GetPlayerEdict(x))) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Invalid player %d", x); \
- return 0; \
- } \
- }
-
-#define CHECK_NONPLAYER(x) \
- if (x < 1 || x <= gpGlobals->maxClients || x > gpGlobals->maxEntities) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Non-player entity %d out of range", x); \
- return 0; \
- } else { \
- if (FNullEnt(INDEXENT(x))) { \
- MF_LogError(amx, AMX_ERR_NATIVE, "Invalid non-player entity %d", x); \
- return 0; \
- } \
- }
-
-#define GETEDICT(n) \
- ((n >= 1 && n <= gpGlobals->maxClients) ? MF_GetPlayerEdict(n) : INDEXENT(n))
-
diff --git a/dlls/cstrike/cstrike/CstrikeUtils.cpp b/dlls/cstrike/cstrike/CstrikeUtils.cpp
new file mode 100644
index 00000000..3f8de77f
--- /dev/null
+++ b/dlls/cstrike/cstrike/CstrikeUtils.cpp
@@ -0,0 +1,62 @@
+/* AMX Mod X
+* Counter-Strike Module
+*
+* by the AMX Mod X Development Team
+*
+* This file is part of AMX Mod X.
+*
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at
+* your option) any later version.
+*
+* 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, write to the Free Software Foundation,
+* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+* In addition, as a special exception, the author gives permission to
+* link the code of this program with the Half-Life Game Engine ("HL
+* Engine") and Modified Game Libraries ("MODs") developed by Valve,
+* L.L.C ("Valve"). You must obey the GNU General Public License in all
+* respects for all of the code used other than the HL Engine and MODs
+* from Valve. If you modify this file, you may extend this exception
+* to your version of the file, but you are not obligated to do so. If
+* you do not wish to do so, delete this exception statement from your
+* version.
+*/
+#include "amxxmodule.h"
+
+bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer)
+{
+ bool player = false;
+
+ if (strcmp(STRING(pPlayer->v.classname), "player") == 0)
+ {
+ player = true;
+ }
+
+ return player;
+}
+
+void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message)
+{
+ MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "TextMsg", NULL), NULL, pPlayer);
+ WRITE_BYTE(HUD_PRINTCENTER); // 1 = console, 2 = console, 3 = chat, 4 = center, 5 = radio
+ WRITE_STRING(message);
+ MESSAGE_END();
+ /*
+ The byte above seems to use these:
+ #define HUD_PRINTNOTIFY 1
+ #define HUD_PRINTCONSOLE 2
+ #define HUD_PRINTTALK 3
+ #define HUD_PRINTCENTER 4
+ #define HUD_PRINTRADIO 5
+ However both 1 and 2 seems to go to console with Steam CS.
+ */
+}
\ No newline at end of file
diff --git a/dlls/cstrike/cstrike/CstrikeUtils.h b/dlls/cstrike/cstrike/CstrikeUtils.h
new file mode 100644
index 00000000..0cdd0f95
--- /dev/null
+++ b/dlls/cstrike/cstrike/CstrikeUtils.h
@@ -0,0 +1,87 @@
+/* AMX Mod X
+* Counter-Strike Module
+*
+* by the AMX Mod X Development Team
+*
+* This file is part of AMX Mod X.
+*
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at
+* your option) any later version.
+*
+* 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, write to the Free Software Foundation,
+* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+* In addition, as a special exception, the author gives permission to
+* link the code of this program with the Half-Life Game Engine ("HL
+* Engine") and Modified Game Libraries ("MODs") developed by Valve,
+* L.L.C ("Valve"). You must obey the GNU General Public License in all
+* respects for all of the code used other than the HL Engine and MODs
+* from Valve. If you modify this file, you may extend this exception
+* to your version of the file, but you are not obligated to do so. If
+* you do not wish to do so, delete this exception statement from your
+* version.
+*/
+#ifndef CSTRIKE_UTILS_H
+#define CSTRIKE_UTILS_H
+
+bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer);
+void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message);
+
+#define GETINFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
+#define SETCLIENTKEYVALUE (*g_engfuncs.pfnSetClientKeyValue)
+#define GETCLIENTKEYVALUE (*g_engfuncs.pfnInfoKeyValue)
+#define CREATENAMEDENTITY (*g_engfuncs.pfnCreateNamedEntity)
+
+#define CHECK_ENTITY(x) \
+ if (x < 0 || x > gpGlobals->maxEntities) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \
+ return 0; \
+ } else { \
+ if (x <= gpGlobals->maxClients) { \
+ if (!MF_IsPlayerIngame(x)) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid player %d (not in-game)", x); \
+ return 0; \
+ } \
+ } else { \
+ if (x != 0 && FNullEnt(INDEXENT(x))) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \
+ return 0; \
+ } \
+ } \
+ }
+
+#define CHECK_PLAYER(x) \
+ if (x < 1 || x > gpGlobals->maxClients) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Player out of range (%d)", x); \
+ return 0; \
+ } else { \
+ if (!MF_IsPlayerIngame(x) || FNullEnt(MF_GetPlayerEdict(x))) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid player %d", x); \
+ return 0; \
+ } \
+ }
+
+#define CHECK_NONPLAYER(x) \
+ if (x < 1 || x <= gpGlobals->maxClients || x > gpGlobals->maxEntities) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Non-player entity %d out of range", x); \
+ return 0; \
+ } else { \
+ if (FNullEnt(INDEXENT(x))) { \
+ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid non-player entity %d", x); \
+ return 0; \
+ } \
+ }
+
+#define GETEDICT(n) \
+ ((n >= 1 && n <= gpGlobals->maxClients) ? MF_GetPlayerEdict(n) : INDEXENT(n))
+
+#endif // CSTRIKE_UTILS_H
\ No newline at end of file
diff --git a/dlls/cstrike/cstrike/Makefile b/dlls/cstrike/cstrike/Makefile
index dae7b5ac..4e0e9403 100755
--- a/dlls/cstrike/cstrike/Makefile
+++ b/dlls/cstrike/cstrike/Makefile
@@ -14,8 +14,9 @@ MM_ROOT = ../../../../metamod/metamod
PROJECT = cstrike
-OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp CstrikePlayer.cpp CstrikeNatives.cpp CstrikeHacks.cpp \
- ../../../public/memtools/MemoryUtils.cpp ../../../public/memtools/CDetour/detours.cpp \
+OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp CstrikePlayer.cpp CstrikeNatives.cpp CstrikeHacks.cpp CstrikeUtils.cpp \
+ ../../../public/memtools/MemoryUtils.cpp \
+ ../../../public/memtools/CDetour/detours.cpp \
../../../public/memtools/CDetour/asm/asm.c
##############################################
diff --git a/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj b/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj
index 355ccb75..c19e1bda 100644
--- a/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj
+++ b/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj
@@ -139,9 +139,10 @@
-
+
+
@@ -150,14 +151,13 @@
-
-
+
-
+
diff --git a/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj.filters b/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj.filters
index c73b5ac0..cdf8c9fa 100644
--- a/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj.filters
+++ b/dlls/cstrike/cstrike/msvc10/cstrike.vcxproj.filters
@@ -41,9 +41,6 @@
Source Files
-
- Source Files
-
Memtools
@@ -53,23 +50,23 @@
Memtools\CDetour\asm
+
+ Source Files
+
+
+ Source Files
+
Header Files
-
- Header Files
-
Module SDK
Module SDK\SDK Base
-
- Header Files
-
Header Files
@@ -85,9 +82,12 @@
Memtools\CDetour\asm
+
+ Header Files
+
-
+
Pawn Includes