Move dlls/ to modules/
This commit is contained in:
		
							
								
								
									
										26
									
								
								modules/cstrike/cstrike/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/cstrike/cstrike/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'cstrike')
 | 
			
		||||
 | 
			
		||||
binary.compiler.defines += [
 | 
			
		||||
  'HAVE_STDINT_H',
 | 
			
		||||
]
 | 
			
		||||
  
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'amxx_api.cpp',
 | 
			
		||||
  'CstrikePlayer.cpp',
 | 
			
		||||
  'CstrikeNatives.cpp',
 | 
			
		||||
  'CstrikeHacks.cpp',
 | 
			
		||||
  'CstrikeUtils.cpp',
 | 
			
		||||
  'CstrikeHLTypeConversion.cpp',
 | 
			
		||||
  '../../../public/memtools/MemoryUtils.cpp',
 | 
			
		||||
  '../../../public/memtools/CDetour/detours.cpp',
 | 
			
		||||
  '../../../public/memtools/CDetour/asm/asm.c',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										358
									
								
								modules/cstrike/cstrike/CstrikeDatas.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								modules/cstrike/cstrike/CstrikeDatas.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,358 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CSTRIKE_DATA_H
 | 
			
		||||
#define CSTRIKE_DATA_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__) || defined (__APPLE__)
 | 
			
		||||
	#define EXTRAOFFSET					5 // offsets 5 higher in Linux builds
 | 
			
		||||
	#define EXTRAOFFSET_WEAPONS			4 // weapon offsets are obviously only 4 steps higher on Linux!
 | 
			
		||||
	#define ACTUAL_EXTRA_OFFSET			20 // actual, byte-addressable offset
 | 
			
		||||
#else
 | 
			
		||||
	#define EXTRAOFFSET					0 // no change in Windows builds
 | 
			
		||||
	#define EXTRAOFFSET_WEAPONS			0
 | 
			
		||||
	#define ACTUAL_EXTRA_OFFSET			0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Offset history:
 | 
			
		||||
	041029:
 | 
			
		||||
	Confirmed (pretty much) ALL offsets for 32 bit Windows, 32 bit Linux and amd64 (yes that's all of them).
 | 
			
		||||
	Found out that weapon offsets are only +4 higher on Linux.
 | 
			
		||||
	Also backpack ammo offsets were all obviously 5 steps too high since unknown time...
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
// "player" entities
 | 
			
		||||
#if !defined __amd64__
 | 
			
		||||
	// 32 bit offsets here
 | 
			
		||||
	#define OFFSET_ARMORTYPE			112 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_TEAM					114 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_CSMONEY				115 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_PRIMARYWEAPON		116 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_LASTACTIVITY			124 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_INTERNALMODEL		126 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_NVGOGGLES			129 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_DEFUSE_PLANT			193 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_MENU					205 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_VIP					209 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_TK					216 + EXTRAOFFSET // 040926
 | 
			
		||||
	#define OFFSET_HOSTAGEKILLS			217 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_MAPZONE				235 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_ISDRIVING			350 + EXTRAOFFSET // 040926
 | 
			
		||||
	#define OFFSET_STATIONARY			362 + EXTRAOFFSET // 040927 (363 works also!)
 | 
			
		||||
	#define OFFSET_ZOOMTYPE				363 + EXTRAOFFSET
 | 
			
		||||
 | 
			
		||||
	#define OFFSET_AWM_AMMO				377 + EXTRAOFFSET // 041029: All of these *_AMMO:s were changed -5
 | 
			
		||||
	#define OFFSET_SCOUT_AMMO			378 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_PARA_AMMO			379 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_FAMAS_AMMO			380 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_M3_AMMO				381 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_USP_AMMO				382 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_FIVESEVEN_AMMO		383 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_DEAGLE_AMMO			384 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_P228_AMMO			385 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_GLOCK_AMMO			386 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_FLASH_AMMO			387 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_HE_AMMO				388 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_SMOKE_AMMO			389 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_C4_AMMO				390	+ EXTRAOFFSET
 | 
			
		||||
 | 
			
		||||
	#define OFFSET_CSDEATHS				444 + EXTRAOFFSET // 040926
 | 
			
		||||
	#define OFFSET_SHIELD				510 + EXTRAOFFSET
 | 
			
		||||
	// "weapon_*" entities
 | 
			
		||||
	#define OFFSET_WEAPONTYPE			43 + EXTRAOFFSET_WEAPONS
 | 
			
		||||
	#define OFFSET_CLIPAMMO				51 + EXTRAOFFSET_WEAPONS
 | 
			
		||||
	#define OFFSET_SILENCER_FIREMODE	74 + EXTRAOFFSET_WEAPONS
 | 
			
		||||
	// "hostage_entity" entities
 | 
			
		||||
	#define OFFSET_HOSTAGEFOLLOW		86 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_HOSTAGE_NEXTUSE		100 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_HOSTAGE_LASTUSE		483 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_HOSTAGEID			487 + EXTRAOFFSET
 | 
			
		||||
	// "armoury_entity"
 | 
			
		||||
	#define OFFSET_ARMOURY_TYPE			34 + EXTRAOFFSET_WEAPONS
 | 
			
		||||
	// C4 offsets
 | 
			
		||||
	#define OFFSET_C4_EXPLODE_TIME		100 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_C4_DEFUSING			0x181 + ACTUAL_EXTRA_OFFSET
 | 
			
		||||
#else
 | 
			
		||||
	// Amd64 offsets here
 | 
			
		||||
	#define OFFSET_ARMORTYPE			137 + EXTRAOFFSET
 | 
			
		||||
	#define OFFSET_TEAM					139 + EXTRAOFFSET // +25
 | 
			
		||||
	#define OFFSET_CSMONEY				140 + EXTRAOFFSET // +25
 | 
			
		||||
	#define OFFSET_PRIMARYWEAPON		141 + EXTRAOFFSET // +25
 | 
			
		||||
	#define OFFSET_INTERNALMODEL		152 + EXTRAOFFSET // +26
 | 
			
		||||
	#define OFFSET_NVGOGGLES			155 + EXTRAOFFSET // +26
 | 
			
		||||
	#define OFFSET_DEFUSE_PLANT			219 + EXTRAOFFSET // +26
 | 
			
		||||
	#define OFFSET_VIP					242 + EXTRAOFFSET // +27
 | 
			
		||||
	#define OFFSET_TK					249 + EXTRAOFFSET // +33 040927
 | 
			
		||||
	#define OFFSET_MAPZONE				268 + EXTRAOFFSET // +27
 | 
			
		||||
	#define OFFSET_ISDRIVING			386 + EXTRAOFFSET // 040927
 | 
			
		||||
	#define OFFSET_STATIONARY			400 + EXTRAOFFSET // 040927 (401 works also)
 | 
			
		||||
	#define OFFSET_ZOOMTYPE				402 + EXTRAOFFSET
 | 
			
		||||
 | 
			
		||||
	#define OFFSET_AWM_AMMO				426 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_SCOUT_AMMO			427 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_PARA_AMMO			428 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_FAMAS_AMMO			429 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_M3_AMMO				430 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_USP_AMMO				431 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_FIVESEVEN_AMMO		432 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_DEAGLE_AMMO			433 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_P228_AMMO			434 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_GLOCK_AMMO			435 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_FLASH_AMMO			436 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_HE_AMMO				437 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_SMOKE_AMMO			438 + EXTRAOFFSET // +44
 | 
			
		||||
	#define OFFSET_C4_AMMO				439	+ EXTRAOFFSET // +44
 | 
			
		||||
 | 
			
		||||
	#define OFFSET_CSDEATHS				493 + EXTRAOFFSET // +49
 | 
			
		||||
	#define OFFSET_SHIELD				559 + EXTRAOFFSET
 | 
			
		||||
	// "weapon_*" entities
 | 
			
		||||
	#define OFFSET_WEAPONTYPE			57 + EXTRAOFFSET // +14
 | 
			
		||||
	#define OFFSET_CLIPAMMO				65 + EXTRAOFFSET // +14
 | 
			
		||||
	#define OFFSET_SILENCER_FIREMODE	88 + EXTRAOFFSET // +14
 | 
			
		||||
	// "hostage_entity" entities
 | 
			
		||||
	#define OFFSET_HOSTAGEFOLLOW		51 + EXTRAOFFSET // +21, long=51, int=107! (must use the long* offset because pointers on amd64 are stored the size of longs, 8 bytes, instead of the usual int 4 bytes.)
 | 
			
		||||
	#define OFFSET_HOSTAGEID			516 + EXTRAOFFSET // +29
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
	#define CS_IDENT_USEBOTARGS					"UseBotArgs"
 | 
			
		||||
	#define CS_IDENT_BOTARGS					"BotArgs"
 | 
			
		||||
	#define CS_IDENT_HIDDEN_STATE				false
 | 
			
		||||
#elif defined(__APPLE__)
 | 
			
		||||
	#define CS_IDENT_USEBOTARGS					"UseBotArgs"
 | 
			
		||||
	#define CS_IDENT_BOTARGS					"BotArgs"
 | 
			
		||||
	#define CS_IDENT_HIDDEN_STATE				true
 | 
			
		||||
#else
 | 
			
		||||
	#define CS_CLICMD_OFFS_USEBOTARGS			2
 | 
			
		||||
	#define CS_CLICMD_OFFS_BOTARGS				22
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
	#define CS_IDENT_GIVENSHIELD              "_ZN11CBasePlayer10GiveShieldEb"                  // CS_OnBuy forward 
 | 
			
		||||
	#define CS_IDENT_GIVENAMEDITEM		      "_ZN11CBasePlayer13GiveNamedItemEPKc"             // CS_OnBuy forward 
 | 
			
		||||
	#define CS_IDENT_ADDACCOUNT			      "_ZN11CBasePlayer10AddAccountEib"                 // CS_OnBuy forward 
 | 
			
		||||
	#define CS_IDENT_CREATENAMEDENTITY        "_Z19CREATE_NAMED_ENTITYj"                        // cs_create_entity
 | 
			
		||||
	#define CS_IDENT_UTIL_FINDENTITYBYSTRING  "_Z23UTIL_FindEntityByStringP11CBaseEntityPKcS2_" // cs_create_entity
 | 
			
		||||
	#define CS_IDENT_HIDDEN_STATE		      false
 | 
			
		||||
#elif defined(__APPLE__)
 | 
			
		||||
	#define CS_IDENT_GIVENSHIELD              "_ZN11CBasePlayer10GiveShieldEb"
 | 
			
		||||
	#define CS_IDENT_GIVENAMEDITEM		      "_ZN11CBasePlayer13GiveNamedItemEPKc"
 | 
			
		||||
	#define CS_IDENT_ADDACCOUNT			      "_ZN11CBasePlayer10AddAccountEib"
 | 
			
		||||
	#define CS_IDENT_CREATENAMEDENTITY        "_Z19CREATE_NAMED_ENTITYj"
 | 
			
		||||
	#define CS_IDENT_UTIL_FINDENTITYBYSTRING  "_Z23UTIL_FindEntityByStringP11CBaseEntityPKcS2_"
 | 
			
		||||
	#define CS_IDENT_HIDDEN_STATE		      true
 | 
			
		||||
#elif defined(WIN32)
 | 
			
		||||
	#define CS_IDENT_GIVENSHIELD              "\\x56\\x8B\\x2A\\x57\\x33\\x2A\\x8B\\x2A\\x2A\\x2A\\x2A\\x2A\\xB0"
 | 
			
		||||
	#define CS_IDENT_GIVENAMEDITEM            "\\x8B\\x2A\\x2A\\x2A\\x56\\x57\\x8B\\x2A\\x8B\\x2A\\x2A\\x2A\\x2A\\x2A\\x2B"
 | 
			
		||||
	#define CS_IDENT_ADDACCOUNT               "\\x8B\\x2A\\x2A\\x2A\\x56\\x8B\\x2A\\x8B\\x2A\\x2A\\x2A\\x2A\\x2A\\x03"
 | 
			
		||||
	#define CS_IDENT_CREATENAMEDENTITY        "\\x56\\x57\\x8B\\x2A\\x2A\\x2A\\x57\\xFF\\x2A\\x2A\\x2A\\x2A\\x2A\\x8B"
 | 
			
		||||
	#define CS_IDENT_UTIL_FINDENTITYBYSTRING  "\\x51\\x8B\\x2A\\x2A\\x2A\\x53\\x55\\x56\\x85\\x2A\\x57"
 | 
			
		||||
	#define CS_IDENT_HIDDEN_STATE		      false
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CSI_P228						CSW_P228
 | 
			
		||||
#define CSI_SCOUT						CSW_SCOUT
 | 
			
		||||
#define CSI_HEGRENADE					CSW_HEGRENADE
 | 
			
		||||
#define CSI_XM1014						CSW_XM1014
 | 
			
		||||
#define CSI_C4							CSW_C4
 | 
			
		||||
#define CSI_MAC10						CSW_MAC10
 | 
			
		||||
#define CSI_AUG							CSW_AUG
 | 
			
		||||
#define CSI_SMOKEGRENADE				CSW_SMOKEGRENADE
 | 
			
		||||
#define CSI_ELITE						CSW_ELITE
 | 
			
		||||
#define CSI_FIVESEVEN					CSW_FIVESEVEN
 | 
			
		||||
#define CSI_UMP45						CSW_UMP45
 | 
			
		||||
#define CSI_SG550						CSW_SG550
 | 
			
		||||
#define CSI_GALI						CSW_GALI
 | 
			
		||||
#define CSI_FAMAS						CSW_FAMAS
 | 
			
		||||
#define CSI_USP							CSW_USP
 | 
			
		||||
#define CSI_GLOCK18						CSW_GLOCK18
 | 
			
		||||
#define CSI_AWP							CSW_AWP
 | 
			
		||||
#define CSI_MP5NAVY						CSW_MP5NAVY
 | 
			
		||||
#define CSI_M249						CSW_M249
 | 
			
		||||
#define CSI_M3							CSW_M3
 | 
			
		||||
#define CSI_M4A1						CSW_M4A1
 | 
			
		||||
#define CSI_TMP							CSW_TMP
 | 
			
		||||
#define CSI_G3SG1						CSW_G3SG1
 | 
			
		||||
#define CSI_FLASHBANG					CSW_FLASHBANG
 | 
			
		||||
#define CSI_DEAGLE						CSW_DEAGLE
 | 
			
		||||
#define CSI_SG552						CSW_SG552
 | 
			
		||||
#define CSI_AK47						CSW_AK47
 | 
			
		||||
#define CSI_KNIFE						CSW_KNIFE
 | 
			
		||||
#define CSI_P90							CSW_P90
 | 
			
		||||
#define CSI_SHIELDGUN					CSW_SHIELDGUN
 | 
			
		||||
#define CSI_VEST						CSW_VEST		 // Custom
 | 
			
		||||
#define CSI_VESTHELM					CSW_VESTHELM	 // Custom
 | 
			
		||||
#define CSI_DEFUSER						33				 // Custom
 | 
			
		||||
#define CSI_NVGS						34				 // Custom
 | 
			
		||||
#define CSI_PRIMAMMO					36				 // Custom
 | 
			
		||||
#define CSI_SECAMMO						37				 // Custom
 | 
			
		||||
 | 
			
		||||
#define BITS_PISTOLS					(1<<CSI_GLOCK18 | 1<<CSI_USP | 1<<CSI_P228 | 1<<CSI_DEAGLE | 1<<CSI_ELITE | 1<<CSI_FIVESEVEN)
 | 
			
		||||
 | 
			
		||||
// Ids of weapons in CS
 | 
			
		||||
#define CSW_P228						1
 | 
			
		||||
#define CSW_SCOUT						3
 | 
			
		||||
#define CSW_HEGRENADE					4
 | 
			
		||||
#define CSW_XM1014						5
 | 
			
		||||
#define CSW_C4							6
 | 
			
		||||
#define CSW_MAC10						7
 | 
			
		||||
#define CSW_AUG							8
 | 
			
		||||
#define CSW_SMOKEGRENADE				9
 | 
			
		||||
#define CSW_ELITE						10
 | 
			
		||||
#define CSW_FIVESEVEN					11
 | 
			
		||||
#define CSW_UMP45						12
 | 
			
		||||
#define CSW_SG550						13
 | 
			
		||||
#define CSW_GALI						14
 | 
			
		||||
#define CSW_FAMAS						15
 | 
			
		||||
#define CSW_USP							16
 | 
			
		||||
#define CSW_GLOCK18						17
 | 
			
		||||
#define CSW_AWP							18
 | 
			
		||||
#define CSW_MP5NAVY						19
 | 
			
		||||
#define CSW_M249						20
 | 
			
		||||
#define CSW_M3							21
 | 
			
		||||
#define CSW_M4A1						22
 | 
			
		||||
#define CSW_TMP							23
 | 
			
		||||
#define CSW_G3SG1						24
 | 
			
		||||
#define CSW_FLASHBANG					25
 | 
			
		||||
#define CSW_DEAGLE						26
 | 
			
		||||
#define CSW_SG552						27
 | 
			
		||||
#define CSW_AK47						28
 | 
			
		||||
//#define CSW_KNIFE						29
 | 
			
		||||
#define CSW_P90							30
 | 
			
		||||
#define CSW_VEST						31 // Brand new invention!
 | 
			
		||||
#define CSW_VESTHELM					32 // Brand new invention!
 | 
			
		||||
#define CSW_SHIELDGUN					99
 | 
			
		||||
 | 
			
		||||
// These are used with armoury_entity:s.
 | 
			
		||||
#define CSA_MP5NAVY						0
 | 
			
		||||
#define CSA_TMP							1
 | 
			
		||||
#define CSA_P90							2
 | 
			
		||||
#define CSA_MAC10						3
 | 
			
		||||
#define CSA_AK47						4
 | 
			
		||||
#define CSA_SG552						5
 | 
			
		||||
#define CSA_M4A1						6
 | 
			
		||||
#define CSA_AUG							7
 | 
			
		||||
#define CSA_SCOUT						8
 | 
			
		||||
#define CSA_G3SG1						9
 | 
			
		||||
#define CSA_AWP							10
 | 
			
		||||
#define CSA_M3							11
 | 
			
		||||
#define CSA_XM1014						12
 | 
			
		||||
#define CSA_M249						13
 | 
			
		||||
#define CSA_FLASHBANG					14
 | 
			
		||||
#define CSA_HEGRENADE					15
 | 
			
		||||
#define CSA_VEST						16
 | 
			
		||||
#define CSA_VESTHELM					17
 | 
			
		||||
#define CSA_SMOKEGRENADE				18
 | 
			
		||||
 | 
			
		||||
#define M4A1_SILENCED					(1<<2)
 | 
			
		||||
#define M4A1_ATTACHSILENCEANIM			6
 | 
			
		||||
#define M4A1_DETACHSILENCEANIM			13
 | 
			
		||||
#define USP_SILENCED					(1<<0)
 | 
			
		||||
#define USP_ATTACHSILENCEANIM			7
 | 
			
		||||
#define USP_DETACHSILENCEANIM			15
 | 
			
		||||
 | 
			
		||||
#define GLOCK_SEMIAUTOMATIC				0
 | 
			
		||||
#define GLOCK_BURSTMODE					2
 | 
			
		||||
#define FAMAS_AUTOMATIC					0
 | 
			
		||||
#define FAMAS_BURSTMODE					16
 | 
			
		||||
 | 
			
		||||
#define PLAYER_IS_VIP					(1<<8)
 | 
			
		||||
 | 
			
		||||
#define PLAYER_IN_BUYZONE				(1<<0)
 | 
			
		||||
 | 
			
		||||
#define TEAM_UNASSIGNED					0
 | 
			
		||||
#define TEAM_T							1
 | 
			
		||||
#define TEAM_CT							2
 | 
			
		||||
#define TEAM_SPECTATOR					3
 | 
			
		||||
 | 
			
		||||
#define CAN_PLANT_BOMB					(1<<8) // 256
 | 
			
		||||
#define HAS_DEFUSE_KIT					(1<<16) // 65536
 | 
			
		||||
 | 
			
		||||
#define DEFUSER_COLOUR_R				0
 | 
			
		||||
#define DEFUSER_COLOUR_G				160
 | 
			
		||||
#define DEFUSER_COLOUR_B				0
 | 
			
		||||
 | 
			
		||||
#define HAS_NVGOGGLES					(1<<0)
 | 
			
		||||
 | 
			
		||||
#define SCOREATTRIB_NOTHING				0
 | 
			
		||||
#define SCOREATTRIB_DEAD				1
 | 
			
		||||
#define SCOREATTRIB_BOMB				2 // t only
 | 
			
		||||
#define SCOREATTRIB_VIP					4 // ct only
 | 
			
		||||
 | 
			
		||||
#define AMD64_STATIONARY_NO				2
 | 
			
		||||
#define AMD64_STATIONARY_YES			3
 | 
			
		||||
 | 
			
		||||
#define CS_ARMOR_NONE					0
 | 
			
		||||
#define CS_ARMOR_KEVLAR					1
 | 
			
		||||
#define CS_ARMOR_ASSAULTSUIT			2
 | 
			
		||||
 | 
			
		||||
#define CS_FIRST_ZOOM					0x28
 | 
			
		||||
#define CS_SECOND_AWP_ZOOM				0xA
 | 
			
		||||
#define CS_SECOND_NONAWP_ZOOM			0xF
 | 
			
		||||
#define CS_AUGSG552_ZOOM				0x37
 | 
			
		||||
#define CS_NO_ZOOM						0x5A
 | 
			
		||||
 | 
			
		||||
#define HAS_SHIELD						(1<<24) //16777216 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum CS_Internal_Models {
 | 
			
		||||
	CS_DONTCHANGE = 0,
 | 
			
		||||
	CS_CT_URBAN = 1,
 | 
			
		||||
	CS_T_TERROR = 2,
 | 
			
		||||
	CS_T_LEET = 3,
 | 
			
		||||
	CS_T_ARCTIC = 4,
 | 
			
		||||
	CS_CT_GSG9 = 5,
 | 
			
		||||
	CS_CT_GIGN = 6,
 | 
			
		||||
	CS_CT_SAS = 7,
 | 
			
		||||
	CS_T_GUERILLA = 8,
 | 
			
		||||
	CS_CT_VIP = 9,
 | 
			
		||||
	CZ_T_MILITIA = 10,
 | 
			
		||||
	CZ_CT_SPETSNAZ = 11
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	CS_RESET_ZOOM = 0,
 | 
			
		||||
	CS_SET_NO_ZOOM,
 | 
			
		||||
	CS_SET_FIRST_ZOOM,
 | 
			
		||||
	CS_SET_SECOND_ZOOM,
 | 
			
		||||
	CS_SET_AUGSG552_ZOOM,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
	Menu_OFF,
 | 
			
		||||
	Menu_ChooseTeam,
 | 
			
		||||
	Menu_IGChooseTeam,
 | 
			
		||||
	Menu_ChooseAppearance,
 | 
			
		||||
	Menu_Buy,
 | 
			
		||||
	Menu_BuyPistol,
 | 
			
		||||
	Menu_BuyRifle,
 | 
			
		||||
	Menu_BuyMachineGun,
 | 
			
		||||
	Menu_BuyShotgun,
 | 
			
		||||
	Menu_BuySubMachineGun,
 | 
			
		||||
	Menu_BuyItem,
 | 
			
		||||
	Menu_Radio1,
 | 
			
		||||
	Menu_Radio2,
 | 
			
		||||
	Menu_Radio3,
 | 
			
		||||
	Menu_ClientBuy
 | 
			
		||||
 | 
			
		||||
} Menu;
 | 
			
		||||
 | 
			
		||||
typedef edict_t* (*CreateNamedEntityFunc)(string_t iszClassname);
 | 
			
		||||
typedef void*    (*UTIL_FindEntityByStringFunc)(void* pStartEntity, const char *szKeyword, const char *szValue);
 | 
			
		||||
 | 
			
		||||
#endif // CSTRIKE_DATA_H
 | 
			
		||||
							
								
								
									
										118
									
								
								modules/cstrike/cstrike/CstrikeHLTypeConversion.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								modules/cstrike/cstrike/CstrikeHLTypeConversion.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "CstrikeHLTypeConversion.h"
 | 
			
		||||
 | 
			
		||||
OffsetHandler*     G_OffsetHandler;
 | 
			
		||||
HL_TypeConversion  G_HL_TypeConversion;
 | 
			
		||||
 | 
			
		||||
void OffsetHandler::search_pev()
 | 
			
		||||
{
 | 
			
		||||
	edict_t* edict = INDEXENT(0);
 | 
			
		||||
	entvars_t* entvars = &edict->v;
 | 
			
		||||
 | 
			
		||||
	byte* private_c = (byte*)edict->pvPrivateData;
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < 0xFFF; i++)
 | 
			
		||||
	{
 | 
			
		||||
		uintptr_t val = *((uintptr_t*)(private_c + i));
 | 
			
		||||
 | 
			
		||||
		if (val == (uintptr_t)entvars)
 | 
			
		||||
		{
 | 
			
		||||
			this->pev = i;
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// This should not happen.
 | 
			
		||||
	this->pev = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline edict_t* HL_TypeConversion::INDEXENT2(int iEdictNum)
 | 
			
		||||
{
 | 
			
		||||
	if (iEdictNum >= 1 && iEdictNum <= gpGlobals->maxClients)
 | 
			
		||||
	{
 | 
			
		||||
		return MF_GetPlayerEdict(iEdictNum);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
edict_t* HL_TypeConversion::entvar_to_edict(entvars_t *pev)
 | 
			
		||||
{
 | 
			
		||||
	if (!pev)
 | 
			
		||||
	{
 | 
			
		||||
		return nullptr;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pev->pContainingEntity;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int HL_TypeConversion::entvar_to_id(entvars_t *pev)
 | 
			
		||||
{
 | 
			
		||||
	if (!pev)
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!pev->pContainingEntity)
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ENTINDEX(pev->pContainingEntity);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* HL_TypeConversion::id_to_cbase(int index)
 | 
			
		||||
{
 | 
			
		||||
	edict_t* edict = INDEXENT2(index);
 | 
			
		||||
	return edict ? edict->pvPrivateData : nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
entvars_t* HL_TypeConversion::id_to_entvar(int index)
 | 
			
		||||
{
 | 
			
		||||
	return &(INDEXENT2(index)->v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
entvars_t* HL_TypeConversion::cbase_to_entvar(void* cbase)
 | 
			
		||||
{
 | 
			
		||||
	if (!cbase)
 | 
			
		||||
	{
 | 
			
		||||
		return nullptr;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return *(entvars_t **)((char *)(cbase) + G_OffsetHandler->pev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int HL_TypeConversion::cbase_to_id(void *cbase)
 | 
			
		||||
{
 | 
			
		||||
	if (!cbase)
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	entvars_t* pev = this->cbase_to_entvar(cbase);
 | 
			
		||||
 | 
			
		||||
	if (!pev)
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!pev->pContainingEntity || FNullEnt(pev->pContainingEntity))
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ENTINDEX(pev->pContainingEntity);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								modules/cstrike/cstrike/CstrikeHLTypeConversion.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								modules/cstrike/cstrike/CstrikeHLTypeConversion.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef HL_TYPE_CONVERSION_H
 | 
			
		||||
#define HL_TYPE_CONVERSION_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
 | 
			
		||||
struct OffsetHandler
 | 
			
		||||
{
 | 
			
		||||
	int pev;
 | 
			
		||||
 | 
			
		||||
	void search_pev();
 | 
			
		||||
 | 
			
		||||
	OffsetHandler()
 | 
			
		||||
	{
 | 
			
		||||
		search_pev();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class HL_TypeConversion
 | 
			
		||||
{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		inline edict_t* INDEXENT2(int iEdictNum);
 | 
			
		||||
 | 
			
		||||
		edict_t* entvar_to_edict(entvars_t *pev);
 | 
			
		||||
		int entvar_to_id(entvars_t *pev);
 | 
			
		||||
 | 
			
		||||
		void* id_to_cbase(int index);
 | 
			
		||||
		int cbase_to_id(void *cbase);
 | 
			
		||||
 | 
			
		||||
		entvars_t* id_to_entvar(int index);
 | 
			
		||||
		entvars_t* cbase_to_entvar(void* cbase);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern OffsetHandler*     G_OffsetHandler;
 | 
			
		||||
extern HL_TypeConversion  G_HL_TypeConversion;
 | 
			
		||||
 | 
			
		||||
#endif // HL_TYPE_CONVERSION_H
 | 
			
		||||
							
								
								
									
										385
									
								
								modules/cstrike/cstrike/CstrikeHacks.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								modules/cstrike/cstrike/CstrikeHacks.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,385 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "CstrikeDatas.h"
 | 
			
		||||
#include "CstrikeUtils.h"
 | 
			
		||||
#include "CDetour/detours.h"
 | 
			
		||||
#include <sm_stringhashmap.h>
 | 
			
		||||
 | 
			
		||||
void CtrlDetours_ClientCommand(bool set);
 | 
			
		||||
void CtrlDetours_BuyCommands(bool set);
 | 
			
		||||
 | 
			
		||||
int ForwardInternalCommand = -1;
 | 
			
		||||
int ForwardOnBuy = -1;
 | 
			
		||||
int ForwardOnBuyAttempt = -1;
 | 
			
		||||
 | 
			
		||||
int *UseBotArgs      = NULL;
 | 
			
		||||
const char **BotArgs = NULL;
 | 
			
		||||
 | 
			
		||||
CDetour *ClientCommandDetour = NULL;
 | 
			
		||||
CDetour *GiveShieldDetour    = NULL;
 | 
			
		||||
CDetour *GiveNamedItemDetour = NULL;
 | 
			
		||||
CDetour *AddAccountDetour    = NULL;
 | 
			
		||||
 | 
			
		||||
int CurrentItemId = 0;
 | 
			
		||||
StringHashMap<int> ItemAliasList;
 | 
			
		||||
 | 
			
		||||
extern enginefuncs_t *g_pengfuncsTable;
 | 
			
		||||
 | 
			
		||||
void InitializeHacks()
 | 
			
		||||
{
 | 
			
		||||
#if defined AMD64
 | 
			
		||||
	#error UNSUPPORTED
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	CtrlDetours_ClientCommand(true);
 | 
			
		||||
	CtrlDetours_BuyCommands(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ShutdownHacks()
 | 
			
		||||
{
 | 
			
		||||
	CtrlDetours_ClientCommand(false);
 | 
			
		||||
	CtrlDetours_BuyCommands(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef CMD_ARGV
 | 
			
		||||
 | 
			
		||||
const char *CMD_ARGV(int i)
 | 
			
		||||
{
 | 
			
		||||
	if (*UseBotArgs)
 | 
			
		||||
	{
 | 
			
		||||
		if (i < 4)
 | 
			
		||||
		{
 | 
			
		||||
			return BotArgs[i];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return g_engfuncs.pfnCmd_Argv(i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnEmitSound(edict_t *entity, int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch)
 | 
			
		||||
{
 | 
			
		||||
	// If shield is blocked with CS_OnBuy, we need to block the pickup sound ("items/gunpickup2.wav") 
 | 
			
		||||
	// as well played right after. Why this sound is not contained in GiveShield()?
 | 
			
		||||
 | 
			
		||||
	g_pengfuncsTable->pfnEmitSound = NULL;
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientCommand(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	const char *command = CMD_ARGV(0);
 | 
			
		||||
	
 | 
			
		||||
	// A new command is triggered, reset variable, always.
 | 
			
		||||
	CurrentItemId = 0;
 | 
			
		||||
 | 
			
		||||
	// Purpose is to retrieve an item id based on alias name or selected item from menu,
 | 
			
		||||
	// to be used in OnBuy* forwards.
 | 
			
		||||
	if ((ForwardOnBuyAttempt != -1 || ForwardOnBuy != -1) && command && *command)
 | 
			
		||||
	{
 | 
			
		||||
		int itemId = 0;
 | 
			
		||||
		
 | 
			
		||||
		// Handling buy via menu.
 | 
			
		||||
		if (!strcmp(command, "menuselect")) 
 | 
			
		||||
		{
 | 
			
		||||
			int slot = atoi(CMD_ARGV(1));
 | 
			
		||||
 | 
			
		||||
			if (slot > 0 && slot < 9)
 | 
			
		||||
			{
 | 
			
		||||
			    static const int menuItemsTe[][9] = 
 | 
			
		||||
				{
 | 
			
		||||
					/* Menu_Buy              */ { 0, 0, 0, 0, 0, 0, CSI_PRIMAMMO, CSI_SECAMMO, 0 },
 | 
			
		||||
					/* Menu_BuyPistol        */ { 0, CSI_GLOCK18, CSI_USP, CSI_P228, CSI_DEAGLE, CSI_ELITE, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyRifle         */ { 0, CSI_GALI, CSI_AK47, CSI_SCOUT, CSI_SG552, CSI_AWP, CSI_G3SG1, 0, 0 },
 | 
			
		||||
					/* Menu_BuyMachineGun    */ { 0, CSI_M249, 0, 0, 0, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyShotgun       */ { 0, CSI_M3, CSI_XM1014, 0, 0, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuySubMachineGun */ { 0, CSI_MAC10, CSI_MP5NAVY, CSI_UMP45, CSI_P90, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyItem          */ { 0, CSI_VEST, CSI_VESTHELM, CSI_FLASHBANG, CSI_HEGRENADE, CSI_SMOKEGRENADE, CSI_NVGS, 0, 0 }
 | 
			
		||||
				};
 | 
			
		||||
 | 
			
		||||
				static const int menuItemsCt[][9] = 
 | 
			
		||||
				{
 | 
			
		||||
					/* Menu_Buy              */ { 0, 0, 0, 0, 0, 0, CSI_PRIMAMMO, CSI_SECAMMO, 0 },
 | 
			
		||||
					/* Menu_BuyPistol        */ { 0, CSI_GLOCK18, CSI_USP, CSI_P228, CSI_DEAGLE, CSI_FIVESEVEN, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyRifle         */ { 0, CSI_FAMAS, CSI_SCOUT, CSI_M4A1, CSI_AUG, CSI_SG550, CSI_AWP, 0, 0 },
 | 
			
		||||
					/* Menu_BuyMachineGun    */ { 0, CSI_M249, 0, 0, 0, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyShotgun       */ { 0, CSI_M3, CSI_XM1014, 0, 0, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuySubMachineGun */ { 0, CSI_TMP, CSI_MP5NAVY, CSI_UMP45, CSI_P90, 0, 0, 0, 0 },
 | 
			
		||||
					/* Menu_BuyItem          */ { 0, CSI_VEST, CSI_VESTHELM, CSI_FLASHBANG, CSI_HEGRENADE, CSI_SMOKEGRENADE, CSI_NVGS, CSI_DEFUSER, CSI_SHIELDGUN }
 | 
			
		||||
				};
 | 
			
		||||
 | 
			
		||||
				int menuId = *((int *)pEdict->pvPrivateData + OFFSET_MENU);
 | 
			
		||||
				if (menuId >= Menu_Buy && menuId <= Menu_BuyItem)
 | 
			
		||||
				{
 | 
			
		||||
					int team = *((int *)pEdict->pvPrivateData + OFFSET_TEAM);
 | 
			
		||||
					switch (team)
 | 
			
		||||
					{
 | 
			
		||||
						case TEAM_T: itemId = menuItemsTe[menuId - 4][slot]; break; // -4 because array is zero-based and Menu_Buy* constants starts from 4.
 | 
			
		||||
						case TEAM_CT:itemId = menuItemsCt[menuId - 4][slot]; break;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if (itemId)
 | 
			
		||||
					{
 | 
			
		||||
						CurrentItemId = itemId;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else // Handling buy via alias
 | 
			
		||||
		{
 | 
			
		||||
			if (ItemAliasList.retrieve(command, &itemId))
 | 
			
		||||
			{
 | 
			
		||||
				CurrentItemId = itemId;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int client = ENTINDEX(pEdict);
 | 
			
		||||
 | 
			
		||||
	if (ForwardInternalCommand != -1 && *UseBotArgs)
 | 
			
		||||
	{
 | 
			
		||||
		const char *args = *BotArgs;
 | 
			
		||||
 | 
			
		||||
		if (MF_ExecuteForward(ForwardInternalCommand, static_cast<cell>(client), args) > 0)
 | 
			
		||||
		{
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (ForwardOnBuyAttempt != -1 && 
 | 
			
		||||
		CurrentItemId             && 
 | 
			
		||||
		MF_IsPlayerAlive(client)  && 
 | 
			
		||||
		MF_ExecuteForward(ForwardOnBuyAttempt, static_cast<cell>(client), static_cast<cell>(CurrentItemId)) > 0)
 | 
			
		||||
	{
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	DETOUR_STATIC_CALL(C_ClientCommand)(pEdict);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DETOUR_DECL_MEMBER1(GiveNamedItem, void, const char*, pszName) // void CBasePlayer::GiveNamedItem(const char *pszName)
 | 
			
		||||
{
 | 
			
		||||
	// If the current item id is not null, this means player has triggers a buy command.
 | 
			
		||||
	if (CurrentItemId)
 | 
			
		||||
	{
 | 
			
		||||
		int client = PrivateToIndex(this);
 | 
			
		||||
 | 
			
		||||
		if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), static_cast<cell>(CurrentItemId)) > 0)
 | 
			
		||||
		{
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// From here, forward is not blocked, resetting this
 | 
			
		||||
	// to ignore code in AddAccount which is called right after.
 | 
			
		||||
	CurrentItemId = 0;
 | 
			
		||||
 | 
			
		||||
	// Give me my item!
 | 
			
		||||
	DETOUR_MEMBER_CALL(GiveNamedItem)(pszName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DETOUR_DECL_MEMBER1(GiveShield, void, bool, bRetire) // void CBasePlayer::GiveShield(bool bRetire)
 | 
			
		||||
{
 | 
			
		||||
	// Special case for shield. Game doesn't use GiveNamedItem() to give a shield.
 | 
			
		||||
	if (CurrentItemId == CSI_SHIELDGUN)
 | 
			
		||||
	{
 | 
			
		||||
		int client = PrivateToIndex(this);
 | 
			
		||||
 | 
			
		||||
		if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), CSI_SHIELDGUN) > 0)
 | 
			
		||||
		{
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// From here, forward is not blocked, resetting this
 | 
			
		||||
	// to ignore code in AddAccount which is called right after.
 | 
			
		||||
	CurrentItemId = 0;
 | 
			
		||||
 | 
			
		||||
	// Give me my shield!
 | 
			
		||||
	DETOUR_MEMBER_CALL(GiveShield)(bRetire);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DETOUR_DECL_MEMBER2(AddAccount, void, int, amount, bool, bTrackChange) // void CBasePlayer::AddAccount(int amount, bool bTrackChange)
 | 
			
		||||
{
 | 
			
		||||
	// No buy command or forward not blocked.
 | 
			
		||||
	// Resuming game flow.
 | 
			
		||||
	if (!CurrentItemId)
 | 
			
		||||
	{
 | 
			
		||||
		DETOUR_MEMBER_CALL(AddAccount)(amount, bTrackChange);
 | 
			
		||||
	}
 | 
			
		||||
	// Shield is blocked.
 | 
			
		||||
	// We need to hook EmitSound to block pickup sound played right after.
 | 
			
		||||
	else if (CurrentItemId == CSI_SHIELDGUN)
 | 
			
		||||
	{
 | 
			
		||||
		g_pengfuncsTable->pfnEmitSound = OnEmitSound;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Let's reset this right away to avoid issues.
 | 
			
		||||
	CurrentItemId = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CtrlDetours_ClientCommand(bool set)
 | 
			
		||||
{
 | 
			
		||||
	if (set)
 | 
			
		||||
	{
 | 
			
		||||
		void *target = (void *)MDLL_ClientCommand;
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
 | 
			
		||||
		UseBotArgs = *(int **)((unsigned char *)target + CS_CLICMD_OFFS_USEBOTARGS);
 | 
			
		||||
		BotArgs = (const char **)*(const char **)((unsigned char *)target + CS_CLICMD_OFFS_BOTARGS);
 | 
			
		||||
 | 
			
		||||
#elif defined(__linux__) || defined(__APPLE__)
 | 
			
		||||
 | 
			
		||||
		UseBotArgs = (int *)UTIL_FindAddressFromEntry(CS_IDENT_USEBOTARGS, CS_IDENT_HIDDEN_STATE);
 | 
			
		||||
		BotArgs = (const char **)UTIL_FindAddressFromEntry(CS_IDENT_BOTARGS, CS_IDENT_HIDDEN_STATE);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		ClientCommandDetour = DETOUR_CREATE_STATIC_FIXED(C_ClientCommand, target);
 | 
			
		||||
 | 
			
		||||
		if (!ClientCommandDetour)
 | 
			
		||||
		{
 | 
			
		||||
			MF_Log("ClientCommand is not available - forward client_command has been disabled");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (ClientCommandDetour) 
 | 
			
		||||
			ClientCommandDetour->Destroy();
 | 
			
		||||
 | 
			
		||||
		ItemAliasList.clear();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ToggleDetour_ClientCommands(bool enable)
 | 
			
		||||
{
 | 
			
		||||
	if (ClientCommandDetour)
 | 
			
		||||
		(enable) ? ClientCommandDetour->EnableDetour() : ClientCommandDetour->DisableDetour();
 | 
			
		||||
 | 
			
		||||
	if (enable)
 | 
			
		||||
	{
 | 
			
		||||
		// Build the item alias list.
 | 
			
		||||
		// Used in ClientCommand to check and get fastly item id from alias name.
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
			const char *alias;
 | 
			
		||||
			int id;
 | 
			
		||||
 | 
			
		||||
		} itemBuyAliasInfo;
 | 
			
		||||
		
 | 
			
		||||
		itemBuyAliasInfo aliasToId[] =
 | 
			
		||||
		{
 | 
			
		||||
			{ "p228"       , CSI_P228       }, { "228compact" , CSI_P228         },
 | 
			
		||||
			{ "scout"      , CSI_SCOUT      }, { "hegren"     , CSI_HEGRENADE    },           
 | 
			
		||||
			{ "xm1014"     , CSI_XM1014     }, { "autoshotgun", CSI_XM1014       },
 | 
			
		||||
			{ "mac10"      , CSI_MAC10      }, { "aug"        , CSI_AUG          },
 | 
			
		||||
			{ "bullpup"    , CSI_AUG        }, { "sgren"      , CSI_SMOKEGRENADE },
 | 
			
		||||
			{ "elites"     , CSI_ELITE      }, { "fn57"       , CSI_FIVESEVEN    },
 | 
			
		||||
			{ "fiveseven"  , CSI_FIVESEVEN  }, { "ump45"      , CSI_UMP45        },
 | 
			
		||||
			{ "sg550"      , CSI_SG550      }, { "krieg550"   , CSI_SG550        },
 | 
			
		||||
			{ "galil"      , CSI_GALI       }, { "defender"   , CSI_GALI         },
 | 
			
		||||
			{ "famas"      , CSI_FAMAS      }, { "clarion"    , CSI_FAMAS        },
 | 
			
		||||
			{ "usp"        , CSI_USP        }, { "km45"       , CSI_USP          },
 | 
			
		||||
			{ "glock"      , CSI_GLOCK18    }, { "9x19mm"     , CSI_GLOCK18      },
 | 
			
		||||
			{ "awp"        , CSI_AWP        }, { "magnum"     , CSI_AWP          },
 | 
			
		||||
			{ "mp5"        , CSI_MP5NAVY    }, { "smg"        , CSI_MP5NAVY      },
 | 
			
		||||
			{ "m249"       , CSI_M249       }, { "m3"         , CSI_M3           },
 | 
			
		||||
			{ "12gauge"    , CSI_M3         }, { "m4a1"       , CSI_M4A1         },
 | 
			
		||||
			{ "tmp"        , CSI_TMP        }, { "mp"         , CSI_TMP          },
 | 
			
		||||
			{ "g3sg1"      , CSI_G3SG1      }, { "d3au1"      , CSI_G3SG1        },
 | 
			
		||||
			{ "flash"      , CSI_FLASHBANG  }, { "deagle"     , CSI_DEAGLE       },
 | 
			
		||||
			{ "nighthawk"  , CSI_DEAGLE     }, { "sg552"      , CSI_SG552        },
 | 
			
		||||
			{ "krieg552"   , CSI_SG552      }, { "ak47"       , CSI_AK47         },
 | 
			
		||||
			{ "cv47"       , CSI_AK47       }, { "p90"        , CSI_P90          },
 | 
			
		||||
			{ "c90"        , CSI_P90        }, { "vest"       , CSI_VEST         },
 | 
			
		||||
			{ "vesthelm"   , CSI_VESTHELM   }, { "defuser"    , CSI_DEFUSER      },
 | 
			
		||||
			{ "nvgs"       , CSI_NVGS       }, { "shield"     , CSI_SHIELDGUN    },
 | 
			
		||||
			{ "buyammo1"   , CSI_PRIMAMMO   }, { "primammo"   , CSI_PRIMAMMO     },
 | 
			
		||||
			{ "buyammo2"   , CSI_SECAMMO    }, { "secammo"    , CSI_SECAMMO      },
 | 
			
		||||
			{ NULL         , 0 }
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		for (size_t i = 0; aliasToId[i].alias != NULL; ++i)
 | 
			
		||||
		{
 | 
			
		||||
			ItemAliasList.insert(aliasToId[i].alias, aliasToId[i].id);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		ItemAliasList.clear();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CtrlDetours_BuyCommands(bool set)
 | 
			
		||||
{
 | 
			
		||||
	if (set)
 | 
			
		||||
	{
 | 
			
		||||
		void *giveShieldAddress    = UTIL_FindAddressFromEntry(CS_IDENT_GIVENSHIELD  , CS_IDENT_HIDDEN_STATE);
 | 
			
		||||
		void *giveNamedItemAddress = UTIL_FindAddressFromEntry(CS_IDENT_GIVENAMEDITEM, CS_IDENT_HIDDEN_STATE);
 | 
			
		||||
		void *addAccountAddress    = UTIL_FindAddressFromEntry(CS_IDENT_ADDACCOUNT   , CS_IDENT_HIDDEN_STATE);
 | 
			
		||||
 | 
			
		||||
		GiveShieldDetour    = DETOUR_CREATE_MEMBER_FIXED(GiveShield, giveShieldAddress);
 | 
			
		||||
		GiveNamedItemDetour = DETOUR_CREATE_MEMBER_FIXED(GiveNamedItem, giveNamedItemAddress);
 | 
			
		||||
		AddAccountDetour    = DETOUR_CREATE_MEMBER_FIXED(AddAccount, addAccountAddress);
 | 
			
		||||
 | 
			
		||||
		if (!GiveShieldDetour || !GiveNamedItemDetour || !AddAccountDetour)
 | 
			
		||||
		{
 | 
			
		||||
			if (!GiveShieldDetour)
 | 
			
		||||
			{
 | 
			
		||||
				MF_Log("GiveShield is not available");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!GiveNamedItemDetour)
 | 
			
		||||
			{
 | 
			
		||||
				MF_Log("GiveNamedItem is not available");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!AddAccountDetour)
 | 
			
		||||
			{
 | 
			
		||||
				MF_Log("AddAccount is not available");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			MF_Log("Some functions are not available - forward CS_OnBuyAttempt and CS_OnBuy have been disabled");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (GiveShieldDetour)
 | 
			
		||||
			GiveShieldDetour->Destroy();
 | 
			
		||||
 | 
			
		||||
		if (GiveNamedItemDetour)
 | 
			
		||||
			GiveNamedItemDetour->Destroy();
 | 
			
		||||
 | 
			
		||||
		if (AddAccountDetour)
 | 
			
		||||
			AddAccountDetour->Destroy();
 | 
			
		||||
 | 
			
		||||
		ItemAliasList.clear();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ToggleDetour_BuyCommands(bool enable)
 | 
			
		||||
{
 | 
			
		||||
	if (GiveShieldDetour)
 | 
			
		||||
		(enable) ? GiveShieldDetour->EnableDetour() : GiveShieldDetour->DisableDetour();
 | 
			
		||||
 | 
			
		||||
	if (GiveNamedItemDetour)
 | 
			
		||||
		(enable) ? GiveNamedItemDetour->EnableDetour() : GiveNamedItemDetour->DisableDetour();
 | 
			
		||||
 | 
			
		||||
	if (AddAccountDetour)
 | 
			
		||||
		(enable) ? AddAccountDetour->EnableDetour() : AddAccountDetour->DisableDetour();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1926
									
								
								modules/cstrike/cstrike/CstrikeNatives.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1926
									
								
								modules/cstrike/cstrike/CstrikeNatives.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										58
									
								
								modules/cstrike/cstrike/CstrikePlayer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								modules/cstrike/cstrike/CstrikePlayer.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "CstrikePlayer.h"
 | 
			
		||||
#include <string.h> // strcpy()
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Construction/Destruction
 | 
			
		||||
//////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
CCstrikePlayer::CCstrikePlayer()
 | 
			
		||||
{
 | 
			
		||||
	modelled = false;
 | 
			
		||||
	inspectModel = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CCstrikePlayer::GetModelled()
 | 
			
		||||
{
 | 
			
		||||
	return modelled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CCstrikePlayer::SetModelled(bool modelledIn)
 | 
			
		||||
{
 | 
			
		||||
	if (!modelledIn)
 | 
			
		||||
		SetInspectModel(false);
 | 
			
		||||
 | 
			
		||||
	return modelled = modelledIn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* CCstrikePlayer::GetModel()
 | 
			
		||||
{
 | 
			
		||||
	return model;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CCstrikePlayer::SetModel(const char* modelIn)
 | 
			
		||||
{
 | 
			
		||||
	strcpy(model, modelIn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CCstrikePlayer::GetInspectModel()
 | 
			
		||||
{
 | 
			
		||||
	return inspectModel;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CCstrikePlayer::SetInspectModel(bool inspectModelIn)
 | 
			
		||||
{
 | 
			
		||||
	inspectModel = inspectModelIn;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								modules/cstrike/cstrike/CstrikePlayer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								modules/cstrike/cstrike/CstrikePlayer.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#if !defined(INCLUDED_CCSTRIKEPLAYER)
 | 
			
		||||
#define INCLUDED_CCSTRIKEPLAYER
 | 
			
		||||
 | 
			
		||||
class CCstrikePlayer  
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	CCstrikePlayer();
 | 
			
		||||
 | 
			
		||||
	bool GetModelled();
 | 
			
		||||
	bool SetModelled(bool modelledIn);
 | 
			
		||||
	const char* GetModel();
 | 
			
		||||
	void SetModel(const char* modelIn);
 | 
			
		||||
 | 
			
		||||
	bool GetInspectModel();
 | 
			
		||||
	void SetInspectModel(bool inspectModelIn);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	bool inspectModel;
 | 
			
		||||
	bool modelled;
 | 
			
		||||
	char model[32];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // !defined(INCLUDED_CCSTRIKEPLAYER)
 | 
			
		||||
							
								
								
									
										123
									
								
								modules/cstrike/cstrike/CstrikeUtils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								modules/cstrike/cstrike/CstrikeUtils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "MemoryUtils.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.
 | 
			
		||||
	*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *UTIL_FindAddressFromEntry(const char *entry, bool isHidden, const char *library)
 | 
			
		||||
{
 | 
			
		||||
	void *addressInBase = NULL;
 | 
			
		||||
	void *finalAddress;
 | 
			
		||||
 | 
			
		||||
	if (strcmp(library, "mod") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		addressInBase = (void *)MDLL_Spawn;
 | 
			
		||||
	}
 | 
			
		||||
	else if (strcmp(library, "engine") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		addressInBase = (void *)gpGlobals;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	finalAddress = NULL;
 | 
			
		||||
 | 
			
		||||
	if (*entry != '\\')
 | 
			
		||||
	{
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
 | 
			
		||||
		MEMORY_BASIC_INFORMATION mem;
 | 
			
		||||
 | 
			
		||||
		if (VirtualQuery(addressInBase, &mem, sizeof(mem)))
 | 
			
		||||
		{
 | 
			
		||||
			finalAddress = g_MemUtils.ResolveSymbol(mem.AllocationBase, entry);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#elif defined(__linux__) || defined(__APPLE__)
 | 
			
		||||
 | 
			
		||||
		Dl_info info;
 | 
			
		||||
 | 
			
		||||
		if (dladdr(addressInBase, &info) != 0)
 | 
			
		||||
		{
 | 
			
		||||
			void *handle = dlopen(info.dli_fname, RTLD_NOW);
 | 
			
		||||
			if (handle)
 | 
			
		||||
			{
 | 
			
		||||
				if (isHidden)
 | 
			
		||||
				{
 | 
			
		||||
					finalAddress = g_MemUtils.ResolveSymbol(handle, entry);
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					finalAddress = dlsym(handle, entry);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				dlclose(handle);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		finalAddress = g_MemUtils.DecodeAndFindPattern(addressInBase, entry);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return finalAddress != NULL ? finalAddress : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool UTIL_CheckForPublic(const char *publicname)
 | 
			
		||||
{
 | 
			
		||||
	AMX* amx;
 | 
			
		||||
	int iFunctionIndex;
 | 
			
		||||
	int i = 0;
 | 
			
		||||
	char blah[64];
 | 
			
		||||
 | 
			
		||||
	strncpy(blah, publicname, sizeof(blah)-  1);
 | 
			
		||||
 | 
			
		||||
	while ((amx = MF_GetScriptAmx(i++)) != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		if (MF_AmxFindPublic(amx, blah, &iFunctionIndex) == AMX_ERR_NONE)
 | 
			
		||||
		{
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								modules/cstrike/cstrike/CstrikeUtils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								modules/cstrike/cstrike/CstrikeUtils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#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);
 | 
			
		||||
void *UTIL_FindAddressFromEntry(const char *entry, bool isHidden = false, const char *library = "mod");
 | 
			
		||||
bool UTIL_CheckForPublic(const char *publicname);
 | 
			
		||||
char *UTIL_StringToLower(char *str);
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline edict_t *PrivateToEdict(const void *pdata)
 | 
			
		||||
{
 | 
			
		||||
	if (!pdata)
 | 
			
		||||
	{
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	char *ptr = (char*)pdata;
 | 
			
		||||
	ptr += 4;
 | 
			
		||||
	entvars_t *pev = *(entvars_t **)ptr;
 | 
			
		||||
 | 
			
		||||
	if (!pev)
 | 
			
		||||
	{
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pev->pContainingEntity;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
inline int PrivateToIndex(const void *pdata)
 | 
			
		||||
{
 | 
			
		||||
	edict_t *pEntity = PrivateToEdict(pdata);
 | 
			
		||||
 | 
			
		||||
	if (!pEntity)
 | 
			
		||||
	{
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ENTINDEX(pEntity);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // CSTRIKE_UTILS_H
 | 
			
		||||
							
								
								
									
										128
									
								
								modules/cstrike/cstrike/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								modules/cstrike/cstrike/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../../metamod/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = cstrike
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp amxx_api.cpp CstrikePlayer.cpp CstrikeNatives.cpp CstrikeHacks.cpp CstrikeUtils.cpp CstrikeHLTypeConversion.cpp \
 | 
			
		||||
			MemoryUtils.cpp detours.cpp asm.c
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/memtools -I$(PUBLIC_ROOT)/memtools/CDetour -I$(PUBLIC_ROOT)/memtools/CDetour/asm -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror -Wno-invalid-offsetof
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/memtools/MemoryUtils.cpp
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/memtools/CDetour/detours.cpp
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/memtools/CDetour/asm/asm.c
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										92
									
								
								modules/cstrike/cstrike/amxx_api.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								modules/cstrike/cstrike/amxx_api.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Counter-Strike Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CstrikeUtils.h"
 | 
			
		||||
#include "CstrikeDatas.h"
 | 
			
		||||
#include "CstrikeHLTypeConversion.h"
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO CstrikeNatives[];
 | 
			
		||||
 | 
			
		||||
extern int ForwardInternalCommand;
 | 
			
		||||
extern int ForwardOnBuy;
 | 
			
		||||
extern int ForwardOnBuyAttempt;
 | 
			
		||||
 | 
			
		||||
void InitializeHacks();
 | 
			
		||||
void ShutdownHacks();
 | 
			
		||||
void ToggleDetour_ClientCommands(bool enable);
 | 
			
		||||
void ToggleDetour_BuyCommands(bool enable);
 | 
			
		||||
 | 
			
		||||
CreateNamedEntityFunc CS_CreateNamedEntity = nullptr;
 | 
			
		||||
UTIL_FindEntityByStringFunc CS_UTIL_FindEntityByString = nullptr;
 | 
			
		||||
 | 
			
		||||
int AmxxCheckGame(const char *game)
 | 
			
		||||
{
 | 
			
		||||
	if (strcasecmp(game, "cstrike") == 0 ||
 | 
			
		||||
		strcasecmp(game, "czero") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		return AMXX_GAME_OK;
 | 
			
		||||
	}
 | 
			
		||||
	return AMXX_GAME_BAD;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnAmxxAttach()
 | 
			
		||||
{
 | 
			
		||||
	MF_AddNatives(CstrikeNatives);
 | 
			
		||||
 | 
			
		||||
	InitializeHacks();
 | 
			
		||||
 | 
			
		||||
	// cs_create_entity()
 | 
			
		||||
	CS_CreateNamedEntity = reinterpret_cast<CreateNamedEntityFunc>(UTIL_FindAddressFromEntry(CS_IDENT_CREATENAMEDENTITY, CS_IDENT_HIDDEN_STATE));
 | 
			
		||||
 | 
			
		||||
	if (CS_CreateNamedEntity <= 0)
 | 
			
		||||
	{
 | 
			
		||||
		MF_Log("CREATE_NAMED_ENITTY is not available - native cs_create_entity() has been disabled");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// cs_find_ent_by_class()
 | 
			
		||||
	CS_UTIL_FindEntityByString = reinterpret_cast<UTIL_FindEntityByStringFunc>(UTIL_FindAddressFromEntry(CS_IDENT_UTIL_FINDENTITYBYSTRING, CS_IDENT_HIDDEN_STATE));
 | 
			
		||||
	
 | 
			
		||||
	if (CS_UTIL_FindEntityByString <= 0)
 | 
			
		||||
	{
 | 
			
		||||
		MF_Log("UTIL_FindEntByString is not available - native cs_find_ent_by_class() has been disabled");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnPluginsLoaded()
 | 
			
		||||
{
 | 
			
		||||
	ForwardInternalCommand = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
 | 
			
		||||
	ForwardOnBuy           = MF_RegisterForward("CS_OnBuy"          , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
 | 
			
		||||
	ForwardOnBuyAttempt    = MF_RegisterForward("CS_OnBuyAttempt"   , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
 | 
			
		||||
 | 
			
		||||
	// Checking whether such public forwards are used in plugins.
 | 
			
		||||
	// Resetting variable to -1 to avoid running unnecessary code in ClientCommand.
 | 
			
		||||
	if (!UTIL_CheckForPublic("CS_InternalCommand"))   { ForwardInternalCommand = -1; }
 | 
			
		||||
	if (!UTIL_CheckForPublic("CS_OnBuy"))             { ForwardOnBuy = -1; }
 | 
			
		||||
	if (!UTIL_CheckForPublic("CS_OnBuyAttempt"))      { ForwardOnBuyAttempt = -1; }
 | 
			
		||||
 | 
			
		||||
	// And enable/disable detours when necessary.
 | 
			
		||||
	ToggleDetour_ClientCommands(ForwardInternalCommand != -1 || ForwardOnBuy != -1 || ForwardOnBuy != -1);
 | 
			
		||||
	ToggleDetour_BuyCommands(ForwardOnBuy != -1);
 | 
			
		||||
 | 
			
		||||
	// Search pev offset automatically.
 | 
			
		||||
	if (!G_OffsetHandler)
 | 
			
		||||
	{
 | 
			
		||||
		G_OffsetHandler = new OffsetHandler;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnAmxxDetach()
 | 
			
		||||
{
 | 
			
		||||
	ShutdownHacks();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										511
									
								
								modules/cstrike/cstrike/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										511
									
								
								modules/cstrike/cstrike/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,511 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
#include <amxmodx_version.h>
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "CStrike"
 | 
			
		||||
#define MODULE_VERSION AMXX_VERSION
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org"
 | 
			
		||||
#define MODULE_LOGTAG "CSTRIKE"
 | 
			
		||||
#define MODULE_LIBRARY "cstrike"
 | 
			
		||||
#define MODULE_LIBCLASS ""
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * AMXX Init functions
 | 
			
		||||
 * Also consider using FN_META_*
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** AMXX query */
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
 | 
			
		||||
/** AMXX Check Game - module API is NOT available here.
 | 
			
		||||
 * Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
 | 
			
		||||
 * syntax: int AmxxCheckGame(const char *game)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_CHECKGAME AmxxCheckGame
 | 
			
		||||
 | 
			
		||||
/** AMXX attach
 | 
			
		||||
 * Do native functions init here (MF_AddNatives)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
 | 
			
		||||
/** AMXX Detach (unload) */
 | 
			
		||||
#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
 | 
			
		||||
/** All plugins loaded
 | 
			
		||||
 * Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/** All plugins are about to be unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADING OnPluginsUnloading
 | 
			
		||||
 | 
			
		||||
/** All plugins are now unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADED OnPluginsUnloaded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
//#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta detach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				DispatchSpawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				DispatchThink				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				DispatchUse					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				DispatchTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			DispatchKeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
// #define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
#define FN_ClientDisconnect				ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
#define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
// #define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
#define FN_ServerDeactivate				ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
#define FN_PlayerPreThink				PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
#define FN_PlayerPostThink				PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
// #define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
// #define FN_ClientConnect_Post				ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
// #define FN_ClientKill_Post					ClientKill_Post
 | 
			
		||||
// #define FN_ClientPutInServer_Post			ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
// #define FN_ClientUserInfoChanged_Post		ClientUserInfoChanged_Post
 | 
			
		||||
// #define FN_ServerActivate_Post				ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
// #define FN_PlayerPreThink_Post				PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
// #define FN_StartFrame_Post					StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
// #define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
#define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
// #define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
#define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
// #define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
// #define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
// #define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
// #define FN_EmitSound_Post					EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
// #define FN_TraceLine_Post					TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post					TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
// #define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
// #define FN_MessageEnd_Post					MessageEnd_Post
 | 
			
		||||
// #define FN_WriteByte_Post					WriteByte_Post
 | 
			
		||||
// #define FN_WriteChar_Post					WriteChar_Post
 | 
			
		||||
// #define FN_WriteShort_Post					WriteShort_Post
 | 
			
		||||
// #define FN_WriteLong_Post					WriteLong_Post
 | 
			
		||||
// #define FN_WriteAngle_Post					WriteAngle_Post
 | 
			
		||||
// #define FN_WriteCoord_Post					WriteCoord_Post
 | 
			
		||||
// #define FN_WriteString_Post					WriteString_Post
 | 
			
		||||
// #define FN_WriteEntity_Post					WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
// #define FN_RegUserMsg_Post					RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/cstrike/cstrike/msvc12/cstrike.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/cstrike/cstrike/msvc12/cstrike.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cstrike", "cstrike.vcxproj", "{AB148B92-4F47-42E6-8268-AB4E588EC6A2}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{AB148B92-4F47-42E6-8268-AB4E588EC6A2}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{AB148B92-4F47-42E6-8268-AB4E588EC6A2}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{AB148B92-4F47-42E6-8268-AB4E588EC6A2}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{AB148B92-4F47-42E6-8268-AB4E588EC6A2}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										172
									
								
								modules/cstrike/cstrike/msvc12/cstrike.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								modules/cstrike/cstrike/msvc12/cstrike.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,172 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{AB148B92-4F47-42E6-8268-AB4E588EC6A2}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>cstrike</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Debug/cstrike.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;..\..\..\..\public\memtools;..\sdk;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_STDINT_H;_CRT_SECURE_NO_DEPRECATE;CSTRIKE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Debug/cstrike.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Debug/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x041d</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <ModuleDefinitionFile>
 | 
			
		||||
      </ModuleDefinitionFile>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>.\Debug/cstrike_amx_debug.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Debug/cstrike_amx_debug.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Release/cstrike.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;..\..\..\..\public\memtools;..\sdk;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_STDINT_H;_CRT_SECURE_NO_DEPRECATE;CSTRIKE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Release/cstrike.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Release/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x041d</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <ModuleDefinitionFile>
 | 
			
		||||
      </ModuleDefinitionFile>
 | 
			
		||||
      <ProgramDatabaseFile>.\Release/cstrike_amx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Release/cstrike_amx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\CDetour\asm\asm.c" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\CDetour\detours.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\MemoryUtils.cpp" />
 | 
			
		||||
    <ClCompile Include="..\amxx_api.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CstrikeHacks.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CstrikeHLTypeConversion.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CstrikeNatives.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CstrikePlayer.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CstrikeUtils.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\asm\asm.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\detourhelpers.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\detours.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\MemoryUtils.h" />
 | 
			
		||||
    <ClInclude Include="..\CstrikeDatas.h" />
 | 
			
		||||
    <ClInclude Include="..\CstrikePlayer.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h" />
 | 
			
		||||
    <ClInclude Include="..\CstrikeUtils.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\cstrike.inc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										97
									
								
								modules/cstrike/cstrike/msvc12/cstrike.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								modules/cstrike/cstrike/msvc12/cstrike.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{0615a998-49c8-4f57-bec7-1532d54df188}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{29a813c3-e469-4be4-94ed-392e8a22ab00}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK">
 | 
			
		||||
      <UniqueIdentifier>{5decfda1-68e2-4607-9b10-8264a6435b9f}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK\SDK Base">
 | 
			
		||||
      <UniqueIdentifier>{d4b7660b-944c-4ef2-8142-36eb222dbc28}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Pawn Includes">
 | 
			
		||||
      <UniqueIdentifier>{7be12e0f-47b1-4d7e-880c-83e5d1c378d1}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Memtools">
 | 
			
		||||
      <UniqueIdentifier>{bbcd1d67-4670-423d-912f-695737e76bad}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Memtools\CDetour">
 | 
			
		||||
      <UniqueIdentifier>{074d4da1-d1be-40ba-8417-1fc388d85568}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Memtools\CDetour\asm">
 | 
			
		||||
      <UniqueIdentifier>{4f3c4a13-065a-49b1-83a1-f646a3ec3678}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CstrikeHacks.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CstrikePlayer.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\amxx_api.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\MemoryUtils.cpp">
 | 
			
		||||
      <Filter>Memtools</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\CDetour\detours.cpp">
 | 
			
		||||
      <Filter>Memtools\CDetour</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\memtools\CDetour\asm\asm.c">
 | 
			
		||||
      <Filter>Memtools\CDetour\asm</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CstrikeNatives.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CstrikeUtils.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CstrikeHLTypeConversion.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CstrikePlayer.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\CstrikeDatas.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\MemoryUtils.h">
 | 
			
		||||
      <Filter>Memtools</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\detourhelpers.h">
 | 
			
		||||
      <Filter>Memtools\CDetour</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\detours.h">
 | 
			
		||||
      <Filter>Memtools\CDetour</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\memtools\CDetour\asm\asm.h">
 | 
			
		||||
      <Filter>Memtools\CDetour\asm</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\CstrikeUtils.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>Module SDK</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\cstrike.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										101
									
								
								modules/cstrike/cstrike/version.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								modules/cstrike/cstrike/version.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#include <winresrc.h>
 | 
			
		||||
#include "moduleconfig.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 AMXX_VERSION_FILE
 | 
			
		||||
 PRODUCTVERSION AMXX_VERSION_FILE
 | 
			
		||||
 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", "AMX Mod X"
 | 
			
		||||
            VALUE "FileDescription", "AMX Mod X"
 | 
			
		||||
            VALUE "FileVersion", AMXX_VERSION
 | 
			
		||||
            VALUE "InternalName", MODULE_LIBRARY
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright (c) AMX Mod X Dev Team"
 | 
			
		||||
            VALUE "OriginalFilename", MODULE_LIBRARY "_amxx.dll"
 | 
			
		||||
            VALUE "ProductName", MODULE_NAME
 | 
			
		||||
            VALUE "ProductVersion", AMXX_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								modules/cstrike/csx/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/cstrike/csx/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'csx')
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'CRank.cpp',
 | 
			
		||||
  'CMisc.cpp',
 | 
			
		||||
  'meta_api.cpp',
 | 
			
		||||
  'rank.cpp',
 | 
			
		||||
  'usermsg.cpp',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										316
									
								
								modules/cstrike/csx/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										316
									
								
								modules/cstrike/csx/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,316 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
#include "rank.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Grenades
 | 
			
		||||
// *****************************************************
 | 
			
		||||
void Grenades::put( edict_t* grenade, float time, int type, CPlayer* player  )
 | 
			
		||||
{
 | 
			
		||||
  Obj* a = new Obj;
 | 
			
		||||
  if ( a == 0 ) return;
 | 
			
		||||
  a->player = player;
 | 
			
		||||
  a->grenade = grenade;
 | 
			
		||||
  a->time = gpGlobals->time + time;
 | 
			
		||||
  a->type = type;
 | 
			
		||||
  a->prev = 0;
 | 
			
		||||
  a->next = head;
 | 
			
		||||
  if ( head ) head->prev = a;
 | 
			
		||||
  head = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Grenades::find( edict_t* enemy, CPlayer** p, int* type )
 | 
			
		||||
{
 | 
			
		||||
  bool found = false;
 | 
			
		||||
  Obj* a = head;
 | 
			
		||||
  while ( a ){
 | 
			
		||||
    if ( a->time > gpGlobals->time && !found ) {
 | 
			
		||||
      if ( a->grenade == enemy ) {
 | 
			
		||||
        found = true;
 | 
			
		||||
        *p = a->player;
 | 
			
		||||
        *type = a->type;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      Obj* next = a->next;
 | 
			
		||||
      if (a->prev)  a->prev->next = next;
 | 
			
		||||
      else  head = next;
 | 
			
		||||
      if (next) next->prev = a->prev;
 | 
			
		||||
      delete a;
 | 
			
		||||
      a = next;
 | 
			
		||||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
    a = a->next;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Grenades::clear()
 | 
			
		||||
{
 | 
			
		||||
  while(head){
 | 
			
		||||
    Obj* a = head->next;
 | 
			
		||||
    delete head;
 | 
			
		||||
    head = a;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
void CPlayer::Disconnect(){
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) || !isModuleActive() ) // ignore if he is bot and bots rank is disabled or module is paused
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (rank != 0) // Just a sanity check, FL_FAKECLIENT is notoriously unreliable.
 | 
			
		||||
	{
 | 
			
		||||
		rank->updatePosition( &life );
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
	rank = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::PutInServer(){
 | 
			
		||||
 | 
			
		||||
	//if ( ignoreBots(pEdict) )
 | 
			
		||||
	if ( (int)csstats_rankbots->value == 0 &&
 | 
			
		||||
		 IsBot() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	restartStats();
 | 
			
		||||
	const char* name = STRING(pEdict->v.netname);
 | 
			
		||||
	const char* unique = name;
 | 
			
		||||
	bool isip = false;
 | 
			
		||||
	switch((int)csstats_rank->value) {
 | 
			
		||||
	case 1: 
 | 
			
		||||
		if ( (unique = GETPLAYERAUTHID(pEdict)) == 0 )
 | 
			
		||||
			unique = name; // failed to get authid
 | 
			
		||||
		break;
 | 
			
		||||
	case 2:
 | 
			
		||||
		unique = ip;
 | 
			
		||||
		isip = true;
 | 
			
		||||
	}
 | 
			
		||||
	rank = g_rank.findEntryInRank( unique , name , isip);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Connect(const char* address ){
 | 
			
		||||
	bot = IsBot();
 | 
			
		||||
	strcpy(ip,address);
 | 
			
		||||
	// Strip the port from the ip
 | 
			
		||||
	for (size_t i = 0; i < sizeof(ip); i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (ip[i] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			ip[i] = '\0';
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	rank = 0;
 | 
			
		||||
	clearStats = 0.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::restartStats(bool all)
 | 
			
		||||
{
 | 
			
		||||
	if ( all ) memset(weapons,0,sizeof(weapons));
 | 
			
		||||
	memset(weaponsRnd,0,sizeof(weaponsRnd));   //DEC-Weapon (Round) stats
 | 
			
		||||
	memset(attackers,0,sizeof(attackers));
 | 
			
		||||
	memset(victims,0,sizeof(victims));
 | 
			
		||||
	memset(&life,0,sizeof(life));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Init( int pi, edict_t* pe )
 | 
			
		||||
{
 | 
			
		||||
    pEdict = pe;
 | 
			
		||||
    index = pi;
 | 
			
		||||
	current = 0;
 | 
			
		||||
	clearStats = 0.0f;
 | 
			
		||||
	rank = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveKill(CPlayer* pVictim, int wweapon, int hhs, int ttk)
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict,pVictim->pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( pVictim->index == index ){ // killed self
 | 
			
		||||
		pVictim->weapons[0].deaths++;
 | 
			
		||||
		pVictim->life.deaths++;
 | 
			
		||||
		pVictim->weaponsRnd[0].deaths++;       // DEC-Weapon (round) stats
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pVictim->attackers[index].name = weaponData[wweapon].name;
 | 
			
		||||
	pVictim->attackers[index].kills++;
 | 
			
		||||
	pVictim->attackers[index].hs += hhs;
 | 
			
		||||
	pVictim->attackers[index].tks += ttk;
 | 
			
		||||
	pVictim->attackers[0].kills++;
 | 
			
		||||
	pVictim->attackers[0].hs += hhs;
 | 
			
		||||
	pVictim->attackers[0].tks += ttk;
 | 
			
		||||
	pVictim->weapons[pVictim->current].deaths++;
 | 
			
		||||
	pVictim->weapons[0].deaths++;
 | 
			
		||||
	pVictim->life.deaths++;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	pVictim->weaponsRnd[pVictim->current].deaths++; // DEC-Weapon (round) stats
 | 
			
		||||
	pVictim->weaponsRnd[0].deaths++;                   // DEC-Weapon (round) stats
 | 
			
		||||
	
 | 
			
		||||
	int vi = pVictim->index;
 | 
			
		||||
	victims[vi].name = weaponData[wweapon].name;
 | 
			
		||||
	victims[vi].deaths++;
 | 
			
		||||
	victims[vi].hs += hhs;
 | 
			
		||||
	victims[vi].tks += ttk;
 | 
			
		||||
	victims[0].deaths++;
 | 
			
		||||
	victims[0].hs += hhs;
 | 
			
		||||
	victims[0].tks += ttk;
 | 
			
		||||
	
 | 
			
		||||
	weaponsRnd[wweapon].kills++;                // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].hs += hhs;         // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].tks += ttk;     // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].kills++;                     // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].hs += hhs;              // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].tks += ttk;          // DEC-Weapon (round) stats
 | 
			
		||||
	
 | 
			
		||||
	weapons[wweapon].kills++;
 | 
			
		||||
	weapons[wweapon].hs += hhs;
 | 
			
		||||
	weapons[wweapon].tks += ttk;
 | 
			
		||||
	weapons[0].kills++;
 | 
			
		||||
	weapons[0].hs += hhs;
 | 
			
		||||
	weapons[0].tks += ttk;
 | 
			
		||||
	life.kills++;
 | 
			
		||||
	life.hs += hhs;
 | 
			
		||||
	life.tks += ttk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveHit(CPlayer* pVictim, int wweapon, int ddamage, int bbody)
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict,pVictim->pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( index == pVictim->index ) return;
 | 
			
		||||
 | 
			
		||||
	pVictim->attackers[index].hits++;
 | 
			
		||||
	pVictim->attackers[index].damage += ddamage;
 | 
			
		||||
	pVictim->attackers[index].bodyHits[bbody]++;
 | 
			
		||||
	pVictim->attackers[0].hits++;
 | 
			
		||||
	pVictim->attackers[0].damage += ddamage;
 | 
			
		||||
	pVictim->attackers[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	int vi = pVictim->index;
 | 
			
		||||
	victims[vi].hits++;
 | 
			
		||||
	victims[vi].damage += ddamage;
 | 
			
		||||
	victims[vi].bodyHits[bbody]++;
 | 
			
		||||
	victims[0].hits++;
 | 
			
		||||
	victims[0].damage += ddamage;
 | 
			
		||||
	victims[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	weaponsRnd[wweapon].hits++;              // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].damage += ddamage;    // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].bodyHits[bbody]++;   // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].hits++;                   // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].damage += ddamage;         // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].bodyHits[bbody]++;        // DEC-Weapon (round) stats
 | 
			
		||||
 | 
			
		||||
	weapons[wweapon].hits++;
 | 
			
		||||
	weapons[wweapon].damage += ddamage;
 | 
			
		||||
	weapons[wweapon].bodyHits[bbody]++;
 | 
			
		||||
	weapons[0].hits++;
 | 
			
		||||
	weapons[0].damage += ddamage;
 | 
			
		||||
	weapons[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	life.hits++;
 | 
			
		||||
	life.damage += ddamage;
 | 
			
		||||
	life.bodyHits[bbody]++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveShot(int weapon)
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	victims[0].shots++;
 | 
			
		||||
	weapons[weapon].shots++;
 | 
			
		||||
	weapons[0].shots++;
 | 
			
		||||
	life.shots++;
 | 
			
		||||
	weaponsRnd[weapon].shots++;       // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].shots++;            // DEC-Weapon (round) stats
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveBPlant()
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	life.bPlants++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveBExplode()
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	life.bExplosions++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveBDefusing()
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	life.bDefusions++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveBDefused()
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	life.bDefused++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
bool ignoreBots(edict_t *pEnt, edict_t *pOther)
 | 
			
		||||
{
 | 
			
		||||
	rankBots = (int)csstats_rankbots->value ? true : false;
 | 
			
		||||
	if (!rankBots && (pEnt->v.flags & FL_FAKECLIENT || (pOther && pOther->v.flags & FL_FAKECLIENT)))
 | 
			
		||||
	{
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool isModuleActive(){
 | 
			
		||||
	if ( !(int)csstats_pause->value )
 | 
			
		||||
		return true;
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										107
									
								
								modules/cstrike/csx/CMisc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								modules/cstrike/csx/CMisc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CMISC_H
 | 
			
		||||
#define CMISC_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
 | 
			
		||||
#define MAX_CWEAPONS		6
 | 
			
		||||
 | 
			
		||||
#define CSW_HEGRENADE		4
 | 
			
		||||
#define CSW_C4				6
 | 
			
		||||
#define CSW_SMOKEGRENADE	9
 | 
			
		||||
#define CSW_KNIFE			29
 | 
			
		||||
#define CSW_FLASHBANG		25
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
struct CPlayer {
 | 
			
		||||
	edict_t* pEdict;
 | 
			
		||||
	char ip[32];
 | 
			
		||||
	int index;
 | 
			
		||||
	int aiming;
 | 
			
		||||
	int current;
 | 
			
		||||
	bool bot;
 | 
			
		||||
	float clearStats;
 | 
			
		||||
	RankSystem::RankStats*	rank;
 | 
			
		||||
 | 
			
		||||
	struct PlayerWeapon : Stats {
 | 
			
		||||
		const char* name;
 | 
			
		||||
		int	ammo;
 | 
			
		||||
		int	clip;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	PlayerWeapon	weapons[MAX_WEAPONS+MAX_CWEAPONS];
 | 
			
		||||
	PlayerWeapon	attackers[33];
 | 
			
		||||
	PlayerWeapon	victims[33];
 | 
			
		||||
	Stats			weaponsRnd[MAX_WEAPONS+MAX_CWEAPONS]; // DEC-Weapon (Round) stats
 | 
			
		||||
	Stats			life;
 | 
			
		||||
 | 
			
		||||
	int teamId;
 | 
			
		||||
 | 
			
		||||
	void Init(  int pi, edict_t* pe );
 | 
			
		||||
	void Connect(const char* ip );
 | 
			
		||||
	void PutInServer();
 | 
			
		||||
	void Disconnect();
 | 
			
		||||
	void saveKill(CPlayer* pVictim, int weapon, int hs, int tk);
 | 
			
		||||
	void saveHit(CPlayer* pVictim, int weapon, int damage, int aiming);
 | 
			
		||||
	void saveShot(int weapon);
 | 
			
		||||
 | 
			
		||||
	void saveBPlant();
 | 
			
		||||
	void saveBExplode();
 | 
			
		||||
	void saveBDefusing();
 | 
			
		||||
	void saveBDefused();
 | 
			
		||||
 | 
			
		||||
	void restartStats(bool all = true);
 | 
			
		||||
	inline bool IsBot(){
 | 
			
		||||
		const char* auth= (*g_engfuncs.pfnGetPlayerAuthId)(pEdict);
 | 
			
		||||
		return ( (auth && !strcmp( auth , "BOT" )) || // AuthID of "BOT"
 | 
			
		||||
				 (pEdict->v.flags & FL_FAKECLIENT));  // FL_FAKECLIENT flag set
 | 
			
		||||
	}
 | 
			
		||||
	inline bool IsAlive(){
 | 
			
		||||
		return ((pEdict->v.deadflag==DEAD_NO)&&(pEdict->v.health>0));
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Grenades
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class Grenades
 | 
			
		||||
{
 | 
			
		||||
  struct Obj 
 | 
			
		||||
  {
 | 
			
		||||
    CPlayer* player;
 | 
			
		||||
    edict_t* grenade;
 | 
			
		||||
    float time;
 | 
			
		||||
    int type;
 | 
			
		||||
    Obj* next;
 | 
			
		||||
    Obj* prev;
 | 
			
		||||
  } *head;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  Grenades() { head = 0; }
 | 
			
		||||
  ~Grenades() { clear(); }
 | 
			
		||||
  void put( edict_t* grenade, float time, int type, CPlayer* player  );
 | 
			
		||||
  bool find( edict_t* enemy, CPlayer** p, int* type );
 | 
			
		||||
  void clear();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // CMISC_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										375
									
								
								modules/cstrike/csx/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								modules/cstrike/csx/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,375 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
#include "rank.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
Stats::Stats(){
 | 
			
		||||
	hits = shots = damage = hs = tks = kills = deaths = bDefusions = bDefused = bPlants = bExplosions = 0;
 | 
			
		||||
	memset( bodyHits , 0 ,sizeof( bodyHits ) );
 | 
			
		||||
}
 | 
			
		||||
void Stats::commit(Stats* a){
 | 
			
		||||
	hits += a->hits;
 | 
			
		||||
	shots += a->shots;
 | 
			
		||||
	damage += a->damage;
 | 
			
		||||
	hs += a->hs;
 | 
			
		||||
	tks += a->tks;
 | 
			
		||||
	kills += a->kills;
 | 
			
		||||
	deaths += a->deaths;
 | 
			
		||||
 | 
			
		||||
	bDefusions += a->bDefusions;
 | 
			
		||||
	bDefused += a->bDefused;
 | 
			
		||||
	bPlants += a->bPlants;
 | 
			
		||||
	bExplosions += a->bExplosions;
 | 
			
		||||
 | 
			
		||||
	for(int i = 1; i < 8; ++i)
 | 
			
		||||
		bodyHits[i] += a->bodyHits[i];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
RankSystem::RankStats::RankStats( const char* uu, const char* nn, RankSystem* pp ) {
 | 
			
		||||
	name = 0;
 | 
			
		||||
	namelen = 0;
 | 
			
		||||
	unique = 0;
 | 
			
		||||
	uniquelen = 0;
 | 
			
		||||
	score = 0;
 | 
			
		||||
	parent = pp;
 | 
			
		||||
	id = ++parent->rankNum;
 | 
			
		||||
	next = prev = 0;
 | 
			
		||||
	setName( nn );
 | 
			
		||||
	setUnique( uu );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankStats::~RankStats() {
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	--parent->rankNum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::RankStats::setName( const char* nn  )	{
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	namelen = strlen(nn) + 1;
 | 
			
		||||
	name = new char[namelen];
 | 
			
		||||
	if ( name )
 | 
			
		||||
		strcpy( name , nn );
 | 
			
		||||
	else
 | 
			
		||||
		namelen = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::RankStats::setUnique( const char* nn  )	{
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	uniquelen = strlen(nn) + 1;
 | 
			
		||||
	unique = new char[uniquelen];
 | 
			
		||||
	if ( unique )
 | 
			
		||||
		strcpy( unique , nn );	
 | 
			
		||||
	else
 | 
			
		||||
		uniquelen = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankSystem() { 
 | 
			
		||||
	head = 0; 
 | 
			
		||||
	tail = 0; 
 | 
			
		||||
	rankNum = 0;
 | 
			
		||||
	calc.code = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::~RankSystem() {
 | 
			
		||||
	clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::put_before( RankStats* a, RankStats* ptr ){
 | 
			
		||||
	a->next = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->prev = ptr->prev;
 | 
			
		||||
		ptr->prev = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->prev = head;
 | 
			
		||||
		head = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->prev )	a->prev->next = a;
 | 
			
		||||
	else tail = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void  RankSystem::put_after( RankStats* a, RankStats* ptr ) {
 | 
			
		||||
	a->prev = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->next = ptr->next;
 | 
			
		||||
		ptr->next = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->next = tail;
 | 
			
		||||
		tail = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->next )	a->next->prev = a;
 | 
			
		||||
	else head = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unlink( RankStats* ptr ){
 | 
			
		||||
	if (ptr->prev) ptr->prev->next = ptr->next;
 | 
			
		||||
	else tail = ptr->next;
 | 
			
		||||
	if (ptr->next) ptr->next->prev = ptr->prev;
 | 
			
		||||
	else head = ptr->prev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::clear(){
 | 
			
		||||
	while( tail ){
 | 
			
		||||
		head = tail->next;
 | 
			
		||||
		delete tail;
 | 
			
		||||
		tail = head;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool RankSystem::loadCalc(const char* filename, char* error)
 | 
			
		||||
{
 | 
			
		||||
	if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error,0)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 11 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){
 | 
			
		||||
		LOG_CONSOLE( PLID, "Couldn't load plugin (file \"%s\")",filename);
 | 
			
		||||
		MF_UnloadAmxScript(&calc.amx, &calc.code);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unloadCalc()
 | 
			
		||||
{
 | 
			
		||||
	MF_UnloadAmxScript(&calc.amx , &calc.code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankStats* RankSystem::findEntryInRank(const char* unique, const char* name, bool isip)
 | 
			
		||||
{
 | 
			
		||||
	RankStats* a = head;
 | 
			
		||||
	
 | 
			
		||||
	if (isip) // IP lookups need to strip the port from already saved instances.
 | 
			
		||||
	{         // Otherwise the stats file would be essentially reset.
 | 
			
		||||
	
 | 
			
		||||
		// The IP passed does not contain the port any more for unique
 | 
			
		||||
		size_t iplen = strlen(unique);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		while ( a )
 | 
			
		||||
		{
 | 
			
		||||
			const char* targetUnique = a->getUnique();
 | 
			
		||||
			if ( strncmp( targetUnique, unique, iplen) == 0 )
 | 
			
		||||
			{
 | 
			
		||||
				// It mostly matches, make sure this isn't a false match
 | 
			
		||||
				// eg: checking 4.2.2.2 would match 4.2.2.24 here.
 | 
			
		||||
				
 | 
			
		||||
				// Get the next character stored in targetUnique
 | 
			
		||||
				char c = targetUnique[iplen];
 | 
			
		||||
				
 | 
			
		||||
				// If c is either a colon or end of line, then this
 | 
			
		||||
				// is a valid match.
 | 
			
		||||
				if (c == ':' ||
 | 
			
		||||
					c == '\0')
 | 
			
		||||
				{
 | 
			
		||||
					// Yes, this is a match.
 | 
			
		||||
					return a;
 | 
			
		||||
				}
 | 
			
		||||
				// Any other case was a false match.
 | 
			
		||||
				
 | 
			
		||||
			}
 | 
			
		||||
			a = a->prev;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else // No special case
 | 
			
		||||
	{
 | 
			
		||||
		while ( a )
 | 
			
		||||
		{
 | 
			
		||||
			if (  strcmp( a->getUnique() ,unique ) == 0 )
 | 
			
		||||
				return a;
 | 
			
		||||
 | 
			
		||||
			a = a->prev;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	a = new RankStats( unique ,name,this );
 | 
			
		||||
	if ( a == 0 ) return 0;
 | 
			
		||||
	put_after( a  , 0 );
 | 
			
		||||
	return a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::updatePos(  RankStats* rr ,  Stats* s )
 | 
			
		||||
{
 | 
			
		||||
	rr->addStats( s );
 | 
			
		||||
	if ( calc.code ) {
 | 
			
		||||
		calc.physAddr1[0] = rr->kills;
 | 
			
		||||
		calc.physAddr1[1] = rr->deaths;
 | 
			
		||||
		calc.physAddr1[2] = rr->hs;
 | 
			
		||||
		calc.physAddr1[3] = rr->tks;
 | 
			
		||||
		calc.physAddr1[4] = rr->shots;
 | 
			
		||||
		calc.physAddr1[5] = rr->hits;
 | 
			
		||||
		calc.physAddr1[6] = rr->damage;
 | 
			
		||||
 | 
			
		||||
		calc.physAddr1[7] = rr->bDefusions;
 | 
			
		||||
		calc.physAddr1[8] = rr->bDefused;
 | 
			
		||||
		calc.physAddr1[9] = rr->bPlants;
 | 
			
		||||
		calc.physAddr1[10] = rr->bExplosions;
 | 
			
		||||
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			calc.physAddr2[i] = rr->bodyHits[i];
 | 
			
		||||
		cell result = 0;
 | 
			
		||||
		int err;
 | 
			
		||||
		MF_AmxPush(&calc.amx, calc.amxAddr2);
 | 
			
		||||
		MF_AmxPush(&calc.amx, calc.amxAddr1);
 | 
			
		||||
		if ((err = MF_AmxExec(&calc.amx,&result, calc.func)) != AMX_ERR_NONE)
 | 
			
		||||
			MF_LogError(&calc.amx, err, "Error encountered in stats routine");
 | 
			
		||||
		rr->score = result;
 | 
			
		||||
	}
 | 
			
		||||
	else rr->score = rr->kills - rr->deaths;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	RankStats* aa = rr->next;
 | 
			
		||||
	while ( aa && (aa->score <= rr->score) ) { // try to nominate
 | 
			
		||||
		rr->goUp();
 | 
			
		||||
		aa->goDown();
 | 
			
		||||
		aa = aa->next;		// go to next rank
 | 
			
		||||
	}
 | 
			
		||||
	if ( aa != rr->next )
 | 
			
		||||
	{
 | 
			
		||||
		unlink( rr );
 | 
			
		||||
		put_before( rr, aa );
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		aa = rr->prev;
 | 
			
		||||
		while ( aa && (aa->score > rr->score) ) { // go down
 | 
			
		||||
			rr->goDown();
 | 
			
		||||
			aa->goUp();
 | 
			
		||||
			aa = aa->prev;	// go to prev rank
 | 
			
		||||
		}
 | 
			
		||||
		if ( aa != rr->prev ){
 | 
			
		||||
			unlink( rr );
 | 
			
		||||
			put_after( rr, aa );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * Who put these backwards...
 | 
			
		||||
 */
 | 
			
		||||
#define TRYREAD(t_var, t_num, t_size, t_file) \
 | 
			
		||||
	if (fread(t_var, t_size, t_num, t_file) != static_cast<size_t>(t_num)) { \
 | 
			
		||||
		break; \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void RankSystem::loadRank( const char* filename )
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen( filename , "rb" );
 | 
			
		||||
	
 | 
			
		||||
	if (!bfp) 
 | 
			
		||||
	{
 | 
			
		||||
		MF_Log("Could not load csstats file: %s", filename);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	short int i = 0;
 | 
			
		||||
	if (fread(&i, sizeof(short int), 1, bfp) != 1)
 | 
			
		||||
	{
 | 
			
		||||
		fclose(bfp);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (i == RANK_VERSION)
 | 
			
		||||
	{
 | 
			
		||||
		Stats d;
 | 
			
		||||
		char unique[64], name[64];
 | 
			
		||||
		if (fread(&i, sizeof(short int), 1, bfp) != 1)
 | 
			
		||||
		{
 | 
			
		||||
			fclose(bfp);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		while(i && !feof(bfp))
 | 
			
		||||
		{
 | 
			
		||||
			TRYREAD(name, i, sizeof(char), bfp);
 | 
			
		||||
			TRYREAD(&i, 1, sizeof(short int), bfp);
 | 
			
		||||
			TRYREAD(unique , i, sizeof(char) , bfp);
 | 
			
		||||
			TRYREAD(&d.tks, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.damage, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.deaths, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.kills, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.shots, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.hits, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.hs, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.bDefusions, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.bDefused, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.bPlants, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.bExplosions, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(d.bodyHits, 1, sizeof(d.bodyHits), bfp);
 | 
			
		||||
			TRYREAD(&i, 1, sizeof(short int), bfp);
 | 
			
		||||
 | 
			
		||||
			RankSystem::RankStats* a = findEntryInRank( unique , name );
 | 
			
		||||
 | 
			
		||||
			if ( a ) a->updatePosition( &d );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::saveRank( const char* filename )
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen(filename, "wb");
 | 
			
		||||
	
 | 
			
		||||
	if ( !bfp ) return;
 | 
			
		||||
 | 
			
		||||
	short int i = RANK_VERSION;
 | 
			
		||||
	
 | 
			
		||||
	fwrite(&i, 1, sizeof(short int) , bfp);
 | 
			
		||||
	
 | 
			
		||||
	RankSystem::iterator a = front();
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if ( (*a).score != (1<<31) ) // score must be different than mincell
 | 
			
		||||
		{
 | 
			
		||||
			fwrite( &(*a).namelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).name , (*a).namelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).uniquelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).unique ,  (*a).uniquelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).tks, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).damage, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).deaths, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).kills, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).shots, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hits, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hs, 1, sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fwrite( &(*a).bDefusions, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bDefused, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bPlants, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bExplosions, 1, sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fwrite( (*a).bodyHits, 1, sizeof((*a).bodyHits), bfp);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		--a;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	i = 0;
 | 
			
		||||
	fwrite( &i , 1, sizeof(short int), bfp); // null terminator
 | 
			
		||||
	
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										134
									
								
								modules/cstrike/csx/CRank.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								modules/cstrike/csx/CRank.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CRANK_H
 | 
			
		||||
#define CRANK_H
 | 
			
		||||
 | 
			
		||||
#define RANK_VERSION 11
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
struct Stats {
 | 
			
		||||
	int hits;
 | 
			
		||||
	int shots;
 | 
			
		||||
	int damage;
 | 
			
		||||
	int hs;
 | 
			
		||||
	int tks;
 | 
			
		||||
	int kills;
 | 
			
		||||
	int deaths;
 | 
			
		||||
	int bodyHits[9]; ////////////////////
 | 
			
		||||
	
 | 
			
		||||
	// SiDLuke start
 | 
			
		||||
	int bPlants;
 | 
			
		||||
	int bExplosions;
 | 
			
		||||
	int bDefusions;
 | 
			
		||||
	int bDefused;
 | 
			
		||||
	// SiDLuke end :D
 | 
			
		||||
 | 
			
		||||
	Stats();
 | 
			
		||||
	void commit(Stats* a);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class RankSystem
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	class RankStats;
 | 
			
		||||
	friend class RankStats;
 | 
			
		||||
	class iterator;
 | 
			
		||||
 | 
			
		||||
	class RankStats : public Stats {
 | 
			
		||||
		friend class RankSystem;
 | 
			
		||||
		friend class iterator;
 | 
			
		||||
		RankSystem*	parent;
 | 
			
		||||
		RankStats*	next;
 | 
			
		||||
		RankStats*	prev;
 | 
			
		||||
		char*		unique;
 | 
			
		||||
		short int	uniquelen;
 | 
			
		||||
		char*		name;
 | 
			
		||||
		short int	namelen;
 | 
			
		||||
		int			score;
 | 
			
		||||
		int			id;
 | 
			
		||||
		RankStats( const char* uu, const char* nn,  RankSystem* pp );
 | 
			
		||||
		~RankStats();
 | 
			
		||||
		void setUnique( const char* nn  );
 | 
			
		||||
		inline void goDown() {++id;}
 | 
			
		||||
		inline void goUp() {--id;}
 | 
			
		||||
		inline void addStats(Stats* a) { commit( a ); }
 | 
			
		||||
	public:
 | 
			
		||||
		void setName( const char* nn  );
 | 
			
		||||
		inline const char* getName() const { return name ? name : ""; }
 | 
			
		||||
		inline const char* getUnique() const { return unique ? unique : ""; }
 | 
			
		||||
		inline int getPosition() const { return id; }
 | 
			
		||||
		inline void updatePosition( Stats* points ) {
 | 
			
		||||
			parent->updatePos( this , points );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	RankStats* head;
 | 
			
		||||
	RankStats* tail;
 | 
			
		||||
	int rankNum;
 | 
			
		||||
 | 
			
		||||
	struct scoreCalc{
 | 
			
		||||
		AMX amx;
 | 
			
		||||
		void* code;
 | 
			
		||||
		int func;
 | 
			
		||||
		cell amxAddr1;
 | 
			
		||||
		cell amxAddr2;
 | 
			
		||||
		cell *physAddr1;
 | 
			
		||||
		cell *physAddr2;
 | 
			
		||||
	} calc;
 | 
			
		||||
 | 
			
		||||
	void put_before( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void put_after( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void unlink( RankStats* ptr );
 | 
			
		||||
	void updatePos( RankStats* r ,  Stats* s );
 | 
			
		||||
	
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	RankSystem();
 | 
			
		||||
	~RankSystem();
 | 
			
		||||
 | 
			
		||||
	void saveRank( const char* filename );
 | 
			
		||||
	void loadRank( const char* filename );
 | 
			
		||||
	RankStats* findEntryInRank(const char* unique, const char* name, bool isip=false);
 | 
			
		||||
	bool loadCalc(const char* filename, char* error);
 | 
			
		||||
	inline int getRankNum( ) const { return rankNum; }
 | 
			
		||||
	void clear();
 | 
			
		||||
	void unloadCalc();
 | 
			
		||||
 | 
			
		||||
	class iterator {
 | 
			
		||||
		RankStats* ptr;
 | 
			
		||||
	public:
 | 
			
		||||
		iterator(RankStats* a): ptr(a){}
 | 
			
		||||
		inline iterator& operator--() { ptr = ptr->prev; return *this;}
 | 
			
		||||
		inline iterator& operator++() {	ptr = ptr->next; return *this; }
 | 
			
		||||
		inline RankStats& operator*() {	return *ptr;}
 | 
			
		||||
		operator bool () { return (ptr != 0); }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	inline iterator front() {  return iterator(head);  }
 | 
			
		||||
	inline iterator begin() {  return iterator(tail);  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								modules/cstrike/csx/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								modules/cstrike/csx/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../../metamod-am/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = csx
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp CRank.cpp CMisc.cpp meta_api.cpp rank.cpp usermsg.cpp
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								modules/cstrike/csx/WinCSX/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/cstrike/csx/WinCSX/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.Program(builder, 'WinCSX')
 | 
			
		||||
 | 
			
		||||
binary.compiler.includes += [
 | 
			
		||||
  os.path.join(builder.currentSourcePath, 'resources'),
 | 
			
		||||
]
 | 
			
		||||
binary.compiler.defines += ['_MBCS']
 | 
			
		||||
binary.compiler.linkflags += [
 | 
			
		||||
  'comctl32.lib',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  'CRank.cpp',
 | 
			
		||||
  'WinCSX.cpp',
 | 
			
		||||
  'stdafx.cpp',
 | 
			
		||||
  'resources/WinCSX.rc',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
AMXX.csx_app = builder.Add(binary)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										352
									
								
								modules/cstrike/csx/WinCSX/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										352
									
								
								modules/cstrike/csx/WinCSX/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,352 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
#include "stdafx.h"
 | 
			
		||||
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
Stats::Stats(){
 | 
			
		||||
	hits = shots = damage = hs = tks = kills = deaths = bDefusions = bDefused = bPlants = bExplosions = 0;
 | 
			
		||||
	memset( bodyHits , 0 ,sizeof( bodyHits ) );
 | 
			
		||||
}
 | 
			
		||||
void Stats::commit(Stats* a){
 | 
			
		||||
	hits += a->hits;
 | 
			
		||||
	shots += a->shots;
 | 
			
		||||
	damage += a->damage;
 | 
			
		||||
	hs += a->hs;
 | 
			
		||||
	tks += a->tks;
 | 
			
		||||
	kills += a->kills;
 | 
			
		||||
	deaths += a->deaths;
 | 
			
		||||
 | 
			
		||||
	bDefusions += a->bDefusions;
 | 
			
		||||
	bDefused += a->bDefused;
 | 
			
		||||
	bPlants += a->bPlants;
 | 
			
		||||
	bExplosions += a->bExplosions;
 | 
			
		||||
 | 
			
		||||
	for(int i = 1; i < 8; ++i)
 | 
			
		||||
		bodyHits[i] += a->bodyHits[i];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
RankSystem::RankStats::RankStats( const char* uu, const char* nn, RankSystem* pp ) {
 | 
			
		||||
	name = 0;
 | 
			
		||||
	namelen = 0;
 | 
			
		||||
	unique = 0;
 | 
			
		||||
	uniquelen = 0;
 | 
			
		||||
	score = 0;
 | 
			
		||||
	parent = pp;
 | 
			
		||||
	id = ++parent->rankNum;
 | 
			
		||||
	next = prev = 0;
 | 
			
		||||
	setName( nn );
 | 
			
		||||
	setUnique( uu );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankStats::~RankStats() {
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	--parent->rankNum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::RankStats::setName( const char* nn  )	{
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	namelen = (short)strlen(nn) + 1;
 | 
			
		||||
	name = new char[namelen];
 | 
			
		||||
	if ( name )
 | 
			
		||||
		strcpy( name , nn );
 | 
			
		||||
	else
 | 
			
		||||
		namelen = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::RankStats::setUnique( const char* nn  )	{
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	uniquelen = (short)strlen(nn) + 1;
 | 
			
		||||
	unique = new char[uniquelen];
 | 
			
		||||
	if ( unique )
 | 
			
		||||
		strcpy( unique , nn );	
 | 
			
		||||
	else
 | 
			
		||||
		uniquelen = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankSystem() { 
 | 
			
		||||
	head = 0; 
 | 
			
		||||
	tail = 0; 
 | 
			
		||||
	rankNum = 0;
 | 
			
		||||
	calc.code = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::~RankSystem() {
 | 
			
		||||
	clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::put_before( RankStats* a, RankStats* ptr ){
 | 
			
		||||
	a->next = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->prev = ptr->prev;
 | 
			
		||||
		ptr->prev = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->prev = head;
 | 
			
		||||
		head = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->prev )	a->prev->next = a;
 | 
			
		||||
	else tail = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void  RankSystem::put_after( RankStats* a, RankStats* ptr ) {
 | 
			
		||||
	a->prev = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->next = ptr->next;
 | 
			
		||||
		ptr->next = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->next = tail;
 | 
			
		||||
		tail = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->next )	a->next->prev = a;
 | 
			
		||||
	else head = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unlink( RankStats* ptr ){
 | 
			
		||||
	if (ptr->prev) ptr->prev->next = ptr->next;
 | 
			
		||||
	else tail = ptr->next;
 | 
			
		||||
	if (ptr->next) ptr->next->prev = ptr->prev;
 | 
			
		||||
	else head = ptr->prev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::clear(){
 | 
			
		||||
	while( tail ){
 | 
			
		||||
		head = tail->next;
 | 
			
		||||
		delete tail;
 | 
			
		||||
		tail = head;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
bool RankSystem::loadCalc(const char* filename, char* error)
 | 
			
		||||
{
 | 
			
		||||
	if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error,0)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){
 | 
			
		||||
		//LOG_CONSOLE( PLID, "Couldn't load plugin (file \"%s\")",filename);
 | 
			
		||||
		MF_UnloadAmxScript(&calc.amx, &calc.code);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unloadCalc()
 | 
			
		||||
{
 | 
			
		||||
	MF_UnloadAmxScript(&calc.amx , &calc.code);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
RankSystem::RankStats* RankSystem::findEntryInRank(const char* unique, const char* name )
 | 
			
		||||
{
 | 
			
		||||
	RankStats* a = head;
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if (  strcmp( a->getUnique(), unique ) == 0 )
 | 
			
		||||
			return a;
 | 
			
		||||
 | 
			
		||||
		a = a->prev;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a = new RankStats( unique ,name,this );
 | 
			
		||||
	if ( a == 0 ) return 0;
 | 
			
		||||
	put_after( a  , 0 );
 | 
			
		||||
	return a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankStats* RankSystem::findEntryInRankByUnique(const char* unique)
 | 
			
		||||
{
 | 
			
		||||
	RankStats* a = head;
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if (  strcmp( a->getUnique(), unique ) == 0 )
 | 
			
		||||
			return a;
 | 
			
		||||
 | 
			
		||||
		a = a->prev;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL; // none found
 | 
			
		||||
}
 | 
			
		||||
RankSystem::RankStats* RankSystem::findEntryInRankByPos(int position)
 | 
			
		||||
{
 | 
			
		||||
	RankStats* a = head;
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if (a->getPosition() == position)
 | 
			
		||||
			return a;
 | 
			
		||||
 | 
			
		||||
		a = a->prev;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int RankSystem::updatePos(  RankStats* rr ,  Stats* s )
 | 
			
		||||
{
 | 
			
		||||
	RankStats* rrFirst = rr;
 | 
			
		||||
	if (s != NULL)
 | 
			
		||||
		rr->addStats( s );
 | 
			
		||||
	if ( calc.code ) {
 | 
			
		||||
		calc.physAddr1[0] = rr->kills;
 | 
			
		||||
		calc.physAddr1[1] = rr->deaths;
 | 
			
		||||
		calc.physAddr1[2] = rr->hs;
 | 
			
		||||
		calc.physAddr1[3] = rr->tks;
 | 
			
		||||
		calc.physAddr1[4] = rr->shots;
 | 
			
		||||
		calc.physAddr1[5] = rr->hits;
 | 
			
		||||
		calc.physAddr1[6] = rr->damage;
 | 
			
		||||
 | 
			
		||||
		calc.physAddr1[7] = rr->bDefusions;
 | 
			
		||||
		calc.physAddr1[8] = rr->bDefused;
 | 
			
		||||
		calc.physAddr1[9] = rr->bPlants;
 | 
			
		||||
		calc.physAddr1[10] = rr->bExplosions;
 | 
			
		||||
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			calc.physAddr2[i] = rr->bodyHits[i];
 | 
			
		||||
		cell result = 0;
 | 
			
		||||
		//int err;
 | 
			
		||||
		//if ((err = MF_AmxExec(&calc.amx,&result, calc.func ,2,calc.amxAddr1,calc.amxAddr2 )) != AMX_ERR_NONE)
 | 
			
		||||
			//LOG_CONSOLE( PLID, "Run time error %d on line %ld (plugin \"%s\")",	err,calc.amx.curline,LOCALINFO("csstats_score"));
 | 
			
		||||
		rr->score = result;
 | 
			
		||||
	}
 | 
			
		||||
	else rr->score = rr->kills - rr->deaths;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	RankStats* aa = rr->next;
 | 
			
		||||
	while ( aa && (aa->score <= rr->score) ) { // try to nominate
 | 
			
		||||
		rr->goUp();
 | 
			
		||||
		aa->goDown();
 | 
			
		||||
		aa = aa->next;		// go to next rank
 | 
			
		||||
	}
 | 
			
		||||
	if ( aa != rr->next )
 | 
			
		||||
	{
 | 
			
		||||
		unlink( rr );
 | 
			
		||||
		put_before( rr, aa );
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		aa = rr->prev;
 | 
			
		||||
		while ( aa && (aa->score > rr->score) ) { // go down
 | 
			
		||||
			rr->goDown();
 | 
			
		||||
			aa->goUp();
 | 
			
		||||
			aa = aa->prev;	// go to prev rank
 | 
			
		||||
		}
 | 
			
		||||
		if ( aa != rr->prev ){
 | 
			
		||||
			unlink( rr );
 | 
			
		||||
			put_after( rr, aa );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return rrFirst->getPosition();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool RankSystem::loadRank( const char* filename )
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen( filename , "rb" );
 | 
			
		||||
	
 | 
			
		||||
	if ( !bfp ) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	short int i = 0;
 | 
			
		||||
	fread(&i, 1 , sizeof(short int) , bfp);
 | 
			
		||||
	
 | 
			
		||||
	if (i == RANK_VERSION)
 | 
			
		||||
	{
 | 
			
		||||
		Stats d;
 | 
			
		||||
		char unique[64], name[64];
 | 
			
		||||
		fread(&i , 1, sizeof(short int), bfp);
 | 
			
		||||
 | 
			
		||||
		while( i )
 | 
			
		||||
		{
 | 
			
		||||
			fread(name , i,sizeof(char) , bfp);
 | 
			
		||||
			fread(&i , 1, sizeof(short int), bfp);
 | 
			
		||||
			fread(unique , i,sizeof(char) , bfp);
 | 
			
		||||
			fread(&d.tks, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.damage, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.deaths, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.kills, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.shots, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.hits, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.hs, 1,sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fread(&d.bDefusions, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.bDefused, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.bPlants, 1,sizeof(int), bfp);
 | 
			
		||||
			fread(&d.bExplosions, 1,sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fread(d.bodyHits, 1,sizeof(d.bodyHits), bfp);
 | 
			
		||||
			fread(&i , 1, sizeof(short int), bfp);
 | 
			
		||||
 | 
			
		||||
			RankSystem::RankStats* a = findEntryInRank( unique , name );
 | 
			
		||||
 | 
			
		||||
			if ( a ) a->updatePosition( &d );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::saveRank( const char* filename )
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen(filename, "wb");
 | 
			
		||||
	
 | 
			
		||||
	if ( !bfp ) return;
 | 
			
		||||
 | 
			
		||||
	short int i = RANK_VERSION;
 | 
			
		||||
	
 | 
			
		||||
	fwrite(&i, 1, sizeof(short int) , bfp);
 | 
			
		||||
	
 | 
			
		||||
	RankSystem::iterator a = front();
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if ( (*a).score != (1<<31) ) // score must be different than mincell
 | 
			
		||||
		{
 | 
			
		||||
			fwrite( &(*a).namelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).name , (*a).namelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).uniquelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).unique ,  (*a).uniquelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).tks, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).damage, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).deaths, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).kills, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).shots, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hits, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hs, 1, sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fwrite( &(*a).bDefusions, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bDefused, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bPlants, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).bExplosions, 1, sizeof(int), bfp);
 | 
			
		||||
 | 
			
		||||
			fwrite( (*a).bodyHits, 1, sizeof((*a).bodyHits), bfp);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		--a;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	i = 0;
 | 
			
		||||
	fwrite( &i , 1, sizeof(short int), bfp); // null terminator
 | 
			
		||||
	
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										135
									
								
								modules/cstrike/csx/WinCSX/CRank.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								modules/cstrike/csx/WinCSX/CRank.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
#ifndef CRANK_H
 | 
			
		||||
#define CRANK_H
 | 
			
		||||
 | 
			
		||||
#define RANK_VERSION 11
 | 
			
		||||
 | 
			
		||||
#include "stdafx.h"
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
struct Stats {
 | 
			
		||||
	int hits;
 | 
			
		||||
	int shots;
 | 
			
		||||
	int damage;
 | 
			
		||||
	int hs;
 | 
			
		||||
	int tks;
 | 
			
		||||
	int kills;
 | 
			
		||||
	int deaths;
 | 
			
		||||
	int bodyHits[9]; ////////////////////
 | 
			
		||||
	
 | 
			
		||||
	// SiDLuke start
 | 
			
		||||
	int bPlants;
 | 
			
		||||
	int bExplosions;
 | 
			
		||||
	int bDefusions;
 | 
			
		||||
	int bDefused;
 | 
			
		||||
	// SiDLuke end :D
 | 
			
		||||
 | 
			
		||||
	Stats();
 | 
			
		||||
	void commit(Stats* a);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class RankSystem
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	class RankStats;
 | 
			
		||||
	friend class RankStats;
 | 
			
		||||
	class iterator;
 | 
			
		||||
 | 
			
		||||
	class RankStats : public Stats {
 | 
			
		||||
		friend class RankSystem;
 | 
			
		||||
		friend class iterator;
 | 
			
		||||
		RankSystem*	parent;
 | 
			
		||||
		RankStats*	next;
 | 
			
		||||
		RankStats*	prev;
 | 
			
		||||
		char*		unique;
 | 
			
		||||
		short int	uniquelen;
 | 
			
		||||
		char*		name;
 | 
			
		||||
		short int	namelen;
 | 
			
		||||
		int			score;
 | 
			
		||||
		int			id;
 | 
			
		||||
		RankStats( const char* uu, const char* nn,  RankSystem* pp );
 | 
			
		||||
		~RankStats();
 | 
			
		||||
		void setUnique( const char* nn  );
 | 
			
		||||
		inline void goDown() {++id;}
 | 
			
		||||
		inline void goUp() {--id;}
 | 
			
		||||
		inline void addStats(Stats* a) { commit( a ); }
 | 
			
		||||
	public:
 | 
			
		||||
		void setName( const char* nn  );
 | 
			
		||||
		inline const char* getName() const { return name ? name : ""; }
 | 
			
		||||
		inline const char* getUnique() const { return unique ? unique : ""; }
 | 
			
		||||
		inline int getPosition() const { return id; }
 | 
			
		||||
		inline int updatePosition( Stats* points ) {
 | 
			
		||||
			return parent->updatePos( this , points );
 | 
			
		||||
		}
 | 
			
		||||
		inline void MarkToDelete() {
 | 
			
		||||
			this->score = (1<<31);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	RankStats* head;
 | 
			
		||||
	RankStats* tail;
 | 
			
		||||
	int rankNum;
 | 
			
		||||
 | 
			
		||||
	struct scoreCalc{
 | 
			
		||||
		AMX amx;
 | 
			
		||||
		void* code;
 | 
			
		||||
		int func;
 | 
			
		||||
		cell amxAddr1;
 | 
			
		||||
		cell amxAddr2;
 | 
			
		||||
		cell *physAddr1;
 | 
			
		||||
		cell *physAddr2;
 | 
			
		||||
	} calc;
 | 
			
		||||
 | 
			
		||||
	void put_before( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void put_after( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void unlink( RankStats* ptr );
 | 
			
		||||
	int updatePos( RankStats* r ,  Stats* s );
 | 
			
		||||
	
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	RankSystem();
 | 
			
		||||
	~RankSystem();
 | 
			
		||||
 | 
			
		||||
	void saveRank( const char* filename );
 | 
			
		||||
	bool loadRank( const char* filename );
 | 
			
		||||
	RankStats* findEntryInRank(const char* unique, const char* name );
 | 
			
		||||
	RankStats* findEntryInRankByUnique(const char* unique);
 | 
			
		||||
	RankStats* findEntryInRankByPos(int position);
 | 
			
		||||
	//bool loadCalc(const char* filename, char* error);
 | 
			
		||||
	inline int getRankNum( ) const { return rankNum; }
 | 
			
		||||
	void clear();
 | 
			
		||||
	//void unloadCalc();
 | 
			
		||||
 | 
			
		||||
	class iterator {
 | 
			
		||||
		RankStats* ptr;
 | 
			
		||||
	public:
 | 
			
		||||
		iterator(RankStats* a): ptr(a){}
 | 
			
		||||
		inline iterator& operator--() { ptr = ptr->prev; return *this;}
 | 
			
		||||
		inline iterator& operator++() {	ptr = ptr->next; return *this; }
 | 
			
		||||
		inline RankStats& operator*() {	return *ptr;}
 | 
			
		||||
		operator bool () { return (ptr != 0); }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	inline iterator front() {  return iterator(head);  }
 | 
			
		||||
	inline iterator begin() {  return iterator(tail);  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										487
									
								
								modules/cstrike/csx/WinCSX/WinCSX.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										487
									
								
								modules/cstrike/csx/WinCSX/WinCSX.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,487 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
#include "stdafx.h"
 | 
			
		||||
#include "WinCSX.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "commctrl.h"
 | 
			
		||||
 | 
			
		||||
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	size_t len = vsnprintf(buffer, maxlength, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	if (len >= maxlength)
 | 
			
		||||
	{
 | 
			
		||||
		buffer[maxlength - 1] = '\0';
 | 
			
		||||
		return (maxlength - 1);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		return len;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int APIENTRY _tWinMain(HINSTANCE hInstance,
 | 
			
		||||
                     HINSTANCE hPrevInstance,
 | 
			
		||||
                     LPTSTR    lpCmdLine,
 | 
			
		||||
                     int       nCmdShow)
 | 
			
		||||
{
 | 
			
		||||
 	// TODO: Place code here.
 | 
			
		||||
	MSG msg;
 | 
			
		||||
	HACCEL hAccelTable;
 | 
			
		||||
 | 
			
		||||
	// Initialize global strings
 | 
			
		||||
	LoadString(hInstance, IDS_APP_TITLE, g_szTitle, MAX_LOADSTRING);
 | 
			
		||||
 | 
			
		||||
	LoadString(hInstance, IDC_WINCSX, g_szWindowClass, MAX_LOADSTRING);
 | 
			
		||||
	MyRegisterClass(hInstance);
 | 
			
		||||
 | 
			
		||||
	// Perform application initialization:
 | 
			
		||||
	if (!InitInstance (hInstance, nCmdShow)) 
 | 
			
		||||
	{
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	InitCommonControls();
 | 
			
		||||
 | 
			
		||||
	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINCSX);
 | 
			
		||||
 | 
			
		||||
	// Show the dialog box now.
 | 
			
		||||
	DialogBox(hInst, (LPCTSTR)IDD_WINCSXBOX, g_hWnd, (DLGPROC)WinCSXBox);
 | 
			
		||||
 | 
			
		||||
	// Main message loop:
 | 
			
		||||
	while (GetMessage(&msg, NULL, 0, 0)) 
 | 
			
		||||
	{
 | 
			
		||||
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
 | 
			
		||||
		{
 | 
			
		||||
			TranslateMessage(&msg);
 | 
			
		||||
			DispatchMessage(&msg);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (int) msg.wParam;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//  FUNCTION: MyRegisterClass()
 | 
			
		||||
//
 | 
			
		||||
//  PURPOSE: Registers the window class.
 | 
			
		||||
//
 | 
			
		||||
//  COMMENTS:
 | 
			
		||||
//
 | 
			
		||||
//    This function and its usage are only necessary if you want this code
 | 
			
		||||
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
 | 
			
		||||
//    function that was added to Windows 95. It is important to call this function
 | 
			
		||||
//    so that the application will get 'well formed' small icons associated
 | 
			
		||||
//    with it.
 | 
			
		||||
//
 | 
			
		||||
ATOM MyRegisterClass(HINSTANCE hInstance)
 | 
			
		||||
{
 | 
			
		||||
	WNDCLASSEX wcex;
 | 
			
		||||
 | 
			
		||||
	wcex.cbSize = sizeof(WNDCLASSEX); 
 | 
			
		||||
 | 
			
		||||
	wcex.style			= 0; // CS_HREDRAW | CS_VREDRAW;
 | 
			
		||||
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
 | 
			
		||||
	wcex.cbClsExtra		= 0;
 | 
			
		||||
	wcex.cbWndExtra		= 0;
 | 
			
		||||
	wcex.hInstance		= hInstance;
 | 
			
		||||
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_WINCSX);
 | 
			
		||||
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
 | 
			
		||||
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
 | 
			
		||||
	wcex.lpszMenuName	= (LPCTSTR)IDC_WINCSX;
 | 
			
		||||
	wcex.lpszClassName	= g_szWindowClass;
 | 
			
		||||
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
 | 
			
		||||
 | 
			
		||||
	return RegisterClassEx(&wcex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//   FUNCTION: InitInstance(HANDLE, int)
 | 
			
		||||
//
 | 
			
		||||
//   PURPOSE: Saves instance handle and creates main window
 | 
			
		||||
//
 | 
			
		||||
//   COMMENTS:
 | 
			
		||||
//
 | 
			
		||||
//        In this function, we save the instance handle in a global variable and
 | 
			
		||||
//        create and display the main program window.
 | 
			
		||||
//
 | 
			
		||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 | 
			
		||||
{
 | 
			
		||||
	hInst = hInstance; // Store instance handle in our global variable
 | 
			
		||||
 | 
			
		||||
	g_hWnd = CreateWindow(g_szWindowClass, g_szTitle, WS_DLGFRAME, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, hInstance, NULL); // WS_OVERLAPPED WS_MINIMIZE
 | 
			
		||||
 | 
			
		||||
	if (!g_hWnd)
 | 
			
		||||
	{
 | 
			
		||||
		MessageBox(g_hWnd, "Failed to create main window!", "A caption", MB_OK);
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	ShowWindow(g_hWnd, SW_SHOWMINNOACTIVE); // nCmdShow SW_SHOWNORMAL were rubbish. SW_SHOWMINNOACTIVE looks ok.
 | 
			
		||||
	UpdateWindow(g_hWnd);
 | 
			
		||||
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool LoadRankFromFile(HWND hDlg) {
 | 
			
		||||
	if ( !g_rank.begin() )
 | 
			
		||||
	{		
 | 
			
		||||
		if (!g_rank.loadRank(STATS_FILENAME)) {
 | 
			
		||||
			MessageBox(hDlg, "File load failed! Make sure you have csstats.dat in the same directory as this executable. Exiting...", "Where IS that file of yours?", MB_OK);
 | 
			
		||||
			PostQuitMessage(0);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
 | 
			
		||||
//
 | 
			
		||||
//  PURPOSE:  Processes messages for the main window.
 | 
			
		||||
//
 | 
			
		||||
//  WM_COMMAND	- process the application menu
 | 
			
		||||
//  WM_PAINT	- Paint the main window
 | 
			
		||||
//  WM_DESTROY	- post a quit message and return
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
{
 | 
			
		||||
	//int wmId, wmEvent;
 | 
			
		||||
	PAINTSTRUCT ps;
 | 
			
		||||
	HDC hdc;
 | 
			
		||||
 | 
			
		||||
	switch (message) 
 | 
			
		||||
	{
 | 
			
		||||
	case WM_PAINT:
 | 
			
		||||
		hdc = BeginPaint(hWnd, &ps);
 | 
			
		||||
		// TODO: Add any drawing code here...
 | 
			
		||||
		EndPaint(hWnd, &ps);
 | 
			
		||||
		break;
 | 
			
		||||
	case WM_DESTROY:
 | 
			
		||||
		PostQuitMessage(0);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return DefWindowProc(hWnd, message, wParam, lParam);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UpdateListBox(HWND hDlg) {
 | 
			
		||||
	HWND listbox = GetDlgItem(hDlg, IDC_LIST);
 | 
			
		||||
 | 
			
		||||
	// Clear first if there's anything in here already
 | 
			
		||||
	SendMessage(listbox, LB_RESETCONTENT, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
	if (g_rank.front() == NULL) {
 | 
			
		||||
		MessageBox(hDlg, "The stats file is empty", "Emptiness...", MB_OK);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	// This part copies the occurring authids into the lefthand listbox.
 | 
			
		||||
	int index = 10, len = 0;
 | 
			
		||||
	char tempbuffer[1024];
 | 
			
		||||
 | 
			
		||||
	for (RankSystem::iterator b = g_rank.front(); b; --b) {
 | 
			
		||||
		//if ((*b).getPosition() < 1) // umm... naaah!
 | 
			
		||||
			//continue;
 | 
			
		||||
 | 
			
		||||
		UTIL_Format(tempbuffer, sizeof(tempbuffer)-1, "%s", (*b).getName());
 | 
			
		||||
 | 
			
		||||
		SendMessage(      // returns LRESULT in lResult
 | 
			
		||||
			listbox,      // handle to destination control
 | 
			
		||||
			LB_ADDSTRING,      // message ID
 | 
			
		||||
			0,      // = (WPARAM) () wParam;
 | 
			
		||||
			(LPARAM) tempbuffer      // = (LPARAM) () lParam;
 | 
			
		||||
		);  
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRESULT InitWinCSXBox(HWND hDlg) {
 | 
			
		||||
	// Load the stats
 | 
			
		||||
	if (!LoadRankFromFile(hDlg))
 | 
			
		||||
		return TRUE;
 | 
			
		||||
 | 
			
		||||
	UpdateListBox(hDlg);
 | 
			
		||||
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClearStatsfields(HWND hDlg) {
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_POSITION, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_NAME, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_AUTHID, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_FRAGS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_DEATHS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_HS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_TKS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_SHOTS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_HITS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_DAMAGE, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_PLANTS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_EXPLOSIONS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_DEFUSIONS, "");
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_DEFUSED, "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxItemSelected(HWND hDlg) {
 | 
			
		||||
	HWND hwndList = GetDlgItem(hDlg, IDC_LIST); // Get the handle of the listbox
 | 
			
		||||
	LRESULT nItem = SendMessage(hwndList, LB_GETCURSEL, 0, 0);  // Get the item # that's selected. First item is prolly 0...
 | 
			
		||||
	if (nItem == LB_ERR) {
 | 
			
		||||
		// Error, reset the form items...
 | 
			
		||||
		//MessageBox(hDlg, "Error: Couldn't find the selected record in the listbox!", "Oh fiddlesticks!", MB_OK);
 | 
			
		||||
		ClearStatsfields(hDlg);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	// Retrieve complete stats record of this position. Position in listbox should be same as rank in our records!
 | 
			
		||||
	RankSystem::RankStats* stats = g_rank.findEntryInRankByPos((int)nItem + 1);
 | 
			
		||||
	if (stats == NULL) {
 | 
			
		||||
		char msg[] = "Error: Couldn't find the record by position! (nItem = %d)";
 | 
			
		||||
		sprintf(msg, msg, nItem);
 | 
			
		||||
		MessageBox(hDlg, msg, "Oh fiddlesticks!", MB_OK);
 | 
			
		||||
		ClearStatsfields(hDlg);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	// Copy data into form
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_POSITION, stats->getPosition(), 0);
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_NAME, stats->getName());
 | 
			
		||||
	SetDlgItemText(hDlg, IDC_EDIT_AUTHID, stats->getUnique());
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_FRAGS, stats->kills, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_DEATHS, stats->deaths, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_HS, stats->hs, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_TKS, stats->tks, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_SHOTS, stats->shots, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_HITS, stats->hits, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_DAMAGE, stats->damage, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_PLANTS, stats->bPlants, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_EXPLOSIONS, stats->bExplosions, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_DEFUSIONS, stats->bDefusions, 0);
 | 
			
		||||
	SetDlgItemInt(hDlg, IDC_EDIT_DEFUSED, stats->bDefused, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SaveChanges(HWND hDlg) {
 | 
			
		||||
	BOOL success;
 | 
			
		||||
	int position = GetDlgItemInt(hDlg, IDC_EDIT_POSITION, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	
 | 
			
		||||
	char authid[32]; // "primary key"
 | 
			
		||||
	GetDlgItemText(hDlg, IDC_EDIT_AUTHID, authid, sizeof(authid));
 | 
			
		||||
	RankSystem::RankStats* entry = g_rank.findEntryInRankByUnique(authid);
 | 
			
		||||
	if (!entry) {
 | 
			
		||||
		char buffer[256];
 | 
			
		||||
		sprintf(buffer, "Authid %s not found!", authid);
 | 
			
		||||
		MessageBox(hDlg, buffer, "Update failed", MB_OK);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	char name[32];
 | 
			
		||||
	GetDlgItemText(hDlg, IDC_EDIT_NAME, name, sizeof(name));
 | 
			
		||||
	int frags = GetDlgItemInt(hDlg, IDC_EDIT_FRAGS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int deaths = GetDlgItemInt(hDlg, IDC_EDIT_DEATHS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int hs = GetDlgItemInt(hDlg, IDC_EDIT_HS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int tks = GetDlgItemInt(hDlg, IDC_EDIT_TKS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int shots = GetDlgItemInt(hDlg, IDC_EDIT_SHOTS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int hits = GetDlgItemInt(hDlg, IDC_EDIT_HITS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int damage = GetDlgItemInt(hDlg, IDC_EDIT_DAMAGE, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int plants = GetDlgItemInt(hDlg, IDC_EDIT_PLANTS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int explosions = GetDlgItemInt(hDlg, IDC_EDIT_EXPLOSIONS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int defusions = GetDlgItemInt(hDlg, IDC_EDIT_DEFUSIONS, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	int defused = GetDlgItemInt(hDlg, IDC_EDIT_DEFUSED, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
 | 
			
		||||
	// Update stats in memory
 | 
			
		||||
	entry->setName(name);
 | 
			
		||||
	entry->kills = frags;
 | 
			
		||||
	entry->deaths = deaths;
 | 
			
		||||
	entry->hs = hs;
 | 
			
		||||
	entry->tks = tks;
 | 
			
		||||
	entry->shots = shots;
 | 
			
		||||
	entry->hits = hits;
 | 
			
		||||
	entry->damage = damage;
 | 
			
		||||
	entry->bPlants = plants;
 | 
			
		||||
	entry->bExplosions = explosions;
 | 
			
		||||
	entry->bDefusions = defusions;
 | 
			
		||||
	entry->bDefused = defused;
 | 
			
		||||
 | 
			
		||||
	int newPosition = entry->updatePosition(NULL); // Updates rank (prolly just calculates "frags - deaths" and moves up/down in rank)
 | 
			
		||||
 | 
			
		||||
	g_rank.saveRank(STATS_FILENAME); // Save changes to file
 | 
			
		||||
 | 
			
		||||
	// Now update our listbox
 | 
			
		||||
	UpdateListBox(hDlg);
 | 
			
		||||
 | 
			
		||||
	char buffer[256];
 | 
			
		||||
	UTIL_Format(buffer, sizeof(buffer)-1, "New rank of %s: %d", name, newPosition);
 | 
			
		||||
	MessageBox(hDlg, buffer, "Update succeeded", MB_OK);
 | 
			
		||||
 | 
			
		||||
	// In the listbox, we need to reselect the item we just updated. Use the new name.
 | 
			
		||||
	HWND listbox = GetDlgItem(hDlg, IDC_LIST);
 | 
			
		||||
	if (SendMessage(listbox, LB_SELECTSTRING, newPosition - 1, (LPARAM)name) == LB_ERR)
 | 
			
		||||
		MessageBox(hDlg, "Error selecting item!", "Oh fiddlesticks!", MB_OK);
 | 
			
		||||
	else {
 | 
			
		||||
		// Update
 | 
			
		||||
		ListboxItemSelected(hDlg);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
BadEnd:
 | 
			
		||||
	MessageBox(hDlg, "Update failed", "Oh fiddlesticks!", MB_OK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClearStats(HWND hDlg) {
 | 
			
		||||
	if (MessageBox(hDlg, "Are you sure? If you continue the whole csstats.dat will be wiped out!", "Omg!", MB_OKCANCEL | MB_DEFBUTTON2 | MB_ICONWARNING) != IDOK)
 | 
			
		||||
		return;
 | 
			
		||||
	g_rank.clear();
 | 
			
		||||
	g_rank.saveRank(STATS_FILENAME);
 | 
			
		||||
 | 
			
		||||
	// Now update our listbox
 | 
			
		||||
	UpdateListBox(hDlg);
 | 
			
		||||
 | 
			
		||||
	// Update
 | 
			
		||||
	ListboxItemSelected(hDlg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DeleteRecord(HWND hDlg) {
 | 
			
		||||
	if (MessageBox(hDlg, "Are you sure?", "Omg!", MB_OKCANCEL | MB_DEFBUTTON2 | MB_ICONWARNING) != IDOK)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	BOOL success;
 | 
			
		||||
	int position = GetDlgItemInt(hDlg, IDC_EDIT_POSITION, &success, false);
 | 
			
		||||
	if (!success)
 | 
			
		||||
		goto BadEnd;
 | 
			
		||||
	
 | 
			
		||||
	char authid[32]; // "primary key"
 | 
			
		||||
	GetDlgItemText(hDlg, IDC_EDIT_AUTHID, authid, sizeof(authid));
 | 
			
		||||
	RankSystem::RankStats* entry = g_rank.findEntryInRankByUnique(authid);
 | 
			
		||||
	if (!entry) {
 | 
			
		||||
		char buffer[256];
 | 
			
		||||
		sprintf(buffer, "Authid %s not found!", authid);
 | 
			
		||||
		MessageBox(hDlg, buffer, "Update failed", MB_OK);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Mark this record to delete it.
 | 
			
		||||
	entry->MarkToDelete();
 | 
			
		||||
 | 
			
		||||
	// Save ranks from memory to disk.
 | 
			
		||||
	g_rank.saveRank(STATS_FILENAME); // Save changes to file
 | 
			
		||||
 | 
			
		||||
	// Clear memory.
 | 
			
		||||
	g_rank.clear();
 | 
			
		||||
 | 
			
		||||
	// Reload from disk into memory.
 | 
			
		||||
	LoadRankFromFile(hDlg);
 | 
			
		||||
 | 
			
		||||
	// Update list box.
 | 
			
		||||
	UpdateListBox(hDlg);
 | 
			
		||||
 | 
			
		||||
	MessageBox(hDlg, "Deleted record", "Delete succeeded", MB_OK);
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
BadEnd:
 | 
			
		||||
	MessageBox(hDlg, "Delete failed", "Oh fiddlesticks!", MB_OK);
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Message handler for WinCSXBox.
 | 
			
		||||
LRESULT CALLBACK WinCSXBox(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
{
 | 
			
		||||
	switch (message)
 | 
			
		||||
	{
 | 
			
		||||
	case WM_INITDIALOG:
 | 
			
		||||
		return InitWinCSXBox(hDlg); // load all data from file and fill the listbox with the shit
 | 
			
		||||
 | 
			
		||||
	case WM_COMMAND:
 | 
			
		||||
		switch (LOWORD(wParam))
 | 
			
		||||
		{
 | 
			
		||||
			case IDOK:
 | 
			
		||||
			case IDCANCEL:
 | 
			
		||||
				EndDialog(hDlg, LOWORD(wParam));
 | 
			
		||||
				PostQuitMessage(0);
 | 
			
		||||
 | 
			
		||||
				return TRUE;
 | 
			
		||||
			case IDC_LIST:
 | 
			
		||||
				switch (HIWORD(wParam)) 
 | 
			
		||||
				{ 
 | 
			
		||||
					case LBN_SELCHANGE:
 | 
			
		||||
						// Omg omg, a line in linebox was selected.
 | 
			
		||||
						ListboxItemSelected(hDlg);
 | 
			
		||||
 | 
			
		||||
						return TRUE; 
 | 
			
		||||
				} 
 | 
			
		||||
				break;
 | 
			
		||||
			case IDC_ABOUT:
 | 
			
		||||
				DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hDlg, (DLGPROC)AboutBox);
 | 
			
		||||
				break;
 | 
			
		||||
			case IDC_BUTTON_SAVECHANGES:
 | 
			
		||||
				SaveChanges(hDlg);
 | 
			
		||||
				break;
 | 
			
		||||
			case IDC_BUTTON_CLEARSTATS:
 | 
			
		||||
				ClearStats(hDlg);
 | 
			
		||||
				break;
 | 
			
		||||
			case IDC_BUTTON_DELETE:
 | 
			
		||||
				DeleteRecord(hDlg);
 | 
			
		||||
				//DialogBox(hInst, (LPCTSTR)IDD_DELETEBOX, hDlg, (DLGPROC)DeleteBox);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Message handler for AboutBox.
 | 
			
		||||
LRESULT CALLBACK AboutBox(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 | 
			
		||||
{
 | 
			
		||||
	switch (message)
 | 
			
		||||
	{
 | 
			
		||||
	case WM_COMMAND:
 | 
			
		||||
		switch (LOWORD(wParam))
 | 
			
		||||
		{
 | 
			
		||||
			case IDOK:
 | 
			
		||||
			case IDCANCEL:
 | 
			
		||||
				EndDialog(hDlg, LOWORD(wParam));
 | 
			
		||||
				
 | 
			
		||||
				return TRUE;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										34
									
								
								modules/cstrike/csx/WinCSX/WinCSX.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								modules/cstrike/csx/WinCSX/WinCSX.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "resource.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
 | 
			
		||||
// Constants
 | 
			
		||||
#define MAX_LOADSTRING	100
 | 
			
		||||
#define VERSION			"0.2"
 | 
			
		||||
#define STATS_FILENAME	"csstats.dat"
 | 
			
		||||
 | 
			
		||||
// Global Variables:
 | 
			
		||||
HINSTANCE hInst;								// current instance
 | 
			
		||||
TCHAR g_szTitle[MAX_LOADSTRING];					// The title bar text
 | 
			
		||||
TCHAR g_szWindowClass[MAX_LOADSTRING];			// the main window class name
 | 
			
		||||
RankSystem g_rank;
 | 
			
		||||
HWND g_hWnd;
 | 
			
		||||
 | 
			
		||||
// Forward declarations of functions included in this code module:
 | 
			
		||||
ATOM				MyRegisterClass(HINSTANCE hInstance);
 | 
			
		||||
BOOL				InitInstance(HINSTANCE, int);
 | 
			
		||||
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
 | 
			
		||||
LRESULT CALLBACK	WinCSXBox(HWND, UINT, WPARAM, LPARAM);
 | 
			
		||||
LRESULT CALLBACK	AboutBox(HWND, UINT, WPARAM, LPARAM);
 | 
			
		||||
bool				LoadRankFromFile(HWND hDlg);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										486
									
								
								modules/cstrike/csx/WinCSX/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								modules/cstrike/csx/WinCSX/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,486 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "CSX"
 | 
			
		||||
#define MODULE_VERSION "1.72"
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org/"
 | 
			
		||||
#define MODULE_LOGTAG "CSX"
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
//#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
// - AMXX Init functions
 | 
			
		||||
// Also consider using FN_META_*
 | 
			
		||||
// AMXX query
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
// AMXX attach
 | 
			
		||||
//   Do native functions init here (MF_AddNatives)
 | 
			
		||||
//#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
// AMXX detach
 | 
			
		||||
//#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
// All plugins loaded
 | 
			
		||||
//   Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
//#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
//#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta detach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				DispatchSpawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				DispatchThink				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				DispatchUse					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				DispatchTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			DispatchKeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
// #define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
// #define FN_ClientDisconnect			ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
// #define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
// #define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
// #define FN_ServerDeactivate			ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
// #define FN_PlayerPreThink			PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
// #define FN_PlayerPostThink			PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
// #define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
// #define FN_ClientConnect_Post				ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
// #define FN_ClientKill_Post					ClientKill_Post
 | 
			
		||||
// #define FN_ClientPutInServer_Post			ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
// #define FN_ClientUserInfoChanged_Post		ClientUserInfoChanged_Post
 | 
			
		||||
// #define FN_ServerActivate_Post				ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
// #define FN_PlayerPreThink_Post				PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
// #define FN_StartFrame_Post					StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
// #define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
// #define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
// #define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
// #define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
// #define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
// #define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
// #define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
// #define FN_EmitSound_Post					EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
// #define FN_TraceLine_Post					TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post					TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
// #define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
// #define FN_MessageEnd_Post					MessageEnd_Post
 | 
			
		||||
// #define FN_WriteByte_Post					WriteByte_Post
 | 
			
		||||
// #define FN_WriteChar_Post					WriteChar_Post
 | 
			
		||||
// #define FN_WriteShort_Post					WriteShort_Post
 | 
			
		||||
// #define FN_WriteLong_Post					WriteLong_Post
 | 
			
		||||
// #define FN_WriteAngle_Post					WriteAngle_Post
 | 
			
		||||
// #define FN_WriteCoord_Post					WriteCoord_Post
 | 
			
		||||
// #define FN_WriteString_Post					WriteString_Post
 | 
			
		||||
// #define FN_WriteEntity_Post					WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
// #define FN_RegUserMsg_Post					RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinCSX", "WinCSX.vcxproj", "{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										121
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>WinCSX</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\..\public;..\..\..\..\..\public\sdk; ..\..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;..\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>Use</PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>$(OutDir)WinCSX.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\..\public;..\..\..\..\..\public\sdk; ..\..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;..\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>Use</PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\stdafx.cpp">
 | 
			
		||||
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\WinCSX.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\resources\Resource.h" />
 | 
			
		||||
    <ClInclude Include="..\stdafx.h" />
 | 
			
		||||
    <ClInclude Include="..\WinCSX.h" />
 | 
			
		||||
    <ClInclude Include="..\amxxmodule.h" />
 | 
			
		||||
    <ClInclude Include="..\CRank.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\resources\small.ico" />
 | 
			
		||||
    <None Include="..\resources\WinCSX.ico" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Manifest Include="..\resources\WinCSX.exe.manifest" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ResourceCompile Include="..\resources\WinCSX.rc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										69
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								modules/cstrike/csx/WinCSX/msvc12/WinCSX.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Resource Files">
 | 
			
		||||
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Dependencies">
 | 
			
		||||
      <UniqueIdentifier>{a7386e98-0966-480d-a8eb-ff52d0de61a8}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\stdafx.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\WinCSX.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp">
 | 
			
		||||
      <Filter>Dependencies</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\resources\Resource.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\stdafx.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\WinCSX.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\amxxmodule.h">
 | 
			
		||||
      <Filter>Dependencies</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\CRank.h">
 | 
			
		||||
      <Filter>Dependencies</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>Dependencies</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\resources\small.ico">
 | 
			
		||||
      <Filter>Resource Files</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\resources\WinCSX.ico">
 | 
			
		||||
      <Filter>Resource Files</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Manifest Include="..\resources\WinCSX.exe.manifest">
 | 
			
		||||
      <Filter>Resource Files</Filter>
 | 
			
		||||
    </Manifest>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ResourceCompile Include="..\resources\WinCSX.rc">
 | 
			
		||||
      <Filter>Resource Files</Filter>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										57
									
								
								modules/cstrike/csx/WinCSX/resources/Resource.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								modules/cstrike/csx/WinCSX/resources/Resource.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
#define IDC_MYICON                      2
 | 
			
		||||
#define IDM_VISUALSTYLES                1
 | 
			
		||||
#define IDD_WINCSX_DIALOG               102
 | 
			
		||||
#define IDS_APP_TITLE                   103
 | 
			
		||||
#define IDD_WINCSXBOX                   103
 | 
			
		||||
#define IDM_ABOUT                       104
 | 
			
		||||
#define IDI_WINCSX                      107
 | 
			
		||||
#define IDI_SMALL                       108
 | 
			
		||||
#define IDC_WINCSX                      109
 | 
			
		||||
#define IDR_MAINFRAME                   128
 | 
			
		||||
#define IDD_ABOUTBOX                    129
 | 
			
		||||
#define IDR_241                         132
 | 
			
		||||
#define IDC_LIST                        1010
 | 
			
		||||
#define IDC_BUTTON_ABOUT                1029
 | 
			
		||||
#define IDC_ABOUT                       1029
 | 
			
		||||
#define IDC_BUTTON_SAVECHANGES          1030
 | 
			
		||||
#define IDC_BUTTON_CLEARSTATS           1031
 | 
			
		||||
#define IDC_BUTTON_DELETE               1032
 | 
			
		||||
#define IDC_EDIT_NAME                   1100
 | 
			
		||||
#define IDC_EDIT_POSITION               1101
 | 
			
		||||
#define IDC_EDIT_AUTHID                 1102
 | 
			
		||||
#define IDC_EDIT_DAMAGE                 1103
 | 
			
		||||
#define IDC_EDIT_FRAGS                  1104
 | 
			
		||||
#define IDC_EDIT_DEATHS                 1105
 | 
			
		||||
#define IDC_EDIT_TKS                    1106
 | 
			
		||||
#define IDC_EDIT_SHOTS                  1107
 | 
			
		||||
#define IDC_EDIT_HITS                   1108
 | 
			
		||||
#define IDC_EDIT_HS                     1109
 | 
			
		||||
#define IDC_EDIT_PLANTS                 1110
 | 
			
		||||
#define IDC_EDIT_EXPLOSIONS             1111
 | 
			
		||||
#define IDC_EDIT_DEFUSIONS              1112
 | 
			
		||||
#define IDC_EDIT_DEFUSED                1113
 | 
			
		||||
#define IDC_AUTHOR                      1114
 | 
			
		||||
#define ID_HELP_DIALOG                  32771
 | 
			
		||||
#define IDM_FILE_DIALOG                 32773
 | 
			
		||||
#define IDC_STATIC                      -1
 | 
			
		||||
 | 
			
		||||
// Next default values for new objects
 | 
			
		||||
// 
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
#ifndef APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
#define _APS_NO_MFC                     1
 | 
			
		||||
#define _APS_NEXT_RESOURCE_VALUE        133
 | 
			
		||||
#define _APS_NEXT_COMMAND_VALUE         32775
 | 
			
		||||
#define _APS_NEXT_CONTROL_VALUE         1033
 | 
			
		||||
#define _APS_NEXT_SYMED_VALUE           110
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										8
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.exe.manifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.exe.manifest
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 | 
			
		||||
	<dependency>
 | 
			
		||||
		<dependentAssembly>
 | 
			
		||||
			<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="x86" />
 | 
			
		||||
		</dependentAssembly>
 | 
			
		||||
	</dependency>
 | 
			
		||||
</assembly>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 22 KiB  | 
							
								
								
									
										208
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								modules/cstrike/csx/WinCSX/resources/WinCSX.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,208 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#include "resource.h"
 | 
			
		||||
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_HIDDEN_SYMBOLS
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#undef APSTUDIO_HIDDEN_SYMBOLS
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
#undef APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Neutral resources
 | 
			
		||||
 | 
			
		||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 | 
			
		||||
#pragma code_page(1252)
 | 
			
		||||
#endif //_WIN32
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Icon
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Icon with lowest ID value placed first to ensure application icon
 | 
			
		||||
// remains consistent on all systems.
 | 
			
		||||
IDI_WINCSX              ICON                    "WinCSX.ico"
 | 
			
		||||
IDI_SMALL               ICON                    "small.ico"
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Dialog
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDD_WINCSXBOX DIALOGEX 22, 17, 253, 204
 | 
			
		||||
STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | 
 | 
			
		||||
    WS_SYSMENU
 | 
			
		||||
CAPTION "WinCSX"
 | 
			
		||||
FONT 8, "System", 0, 0, 0x0
 | 
			
		||||
BEGIN
 | 
			
		||||
    DEFPUSHBUTTON   "Close",IDOK,206,168,39,27,WS_GROUP
 | 
			
		||||
    LISTBOX         IDC_LIST,4,5,94,190,LBS_HASSTRINGS | 
 | 
			
		||||
                    LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
 | 
			
		||||
    EDITTEXT        IDC_EDIT_NAME,109,18,87,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_POSITION,206,18,39,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_AUTHID,109,48,87,12,ES_AUTOHSCROLL | 
 | 
			
		||||
                    ES_READONLY
 | 
			
		||||
    EDITTEXT        IDC_EDIT_DAMAGE,206,48,39,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_FRAGS,109,78,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_DEATHS,157,78,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_TKS,206,78,39,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_SHOTS,109,108,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_HITS,157,108,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_HS,206,108,39,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_PLANTS,109,138,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_EXPLOSIONS,157,137,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_DEFUSIONS,206,137,39,12,ES_AUTOHSCROLL
 | 
			
		||||
    EDITTEXT        IDC_EDIT_DEFUSED,109,168,40,12,ES_AUTOHSCROLL
 | 
			
		||||
    LTEXT           "Name (last used)",IDC_STATIC,109,5,56,8
 | 
			
		||||
    LTEXT           "Damage",IDC_STATIC,206,35,28,8
 | 
			
		||||
    LTEXT           "Frags",IDC_STATIC,109,65,20,8
 | 
			
		||||
    LTEXT           "Headshots",IDC_STATIC,206,95,36,8
 | 
			
		||||
    LTEXT           "Team kills",IDC_STATIC,206,65,35,8
 | 
			
		||||
    LTEXT           "Hits",IDC_STATIC,157,95,14,8
 | 
			
		||||
    LTEXT           "Shots",IDC_STATIC,109,95,20,8
 | 
			
		||||
    LTEXT           "Deaths",IDC_STATIC,157,65,24,8
 | 
			
		||||
    LTEXT           "Authid",IDC_STATIC,109,35,21,8
 | 
			
		||||
    LTEXT           "Position",IDC_STATIC,206,5,28,8
 | 
			
		||||
    LTEXT           "Plants",IDC_STATIC,109,125,22,8
 | 
			
		||||
    LTEXT           "Explosions",IDC_STATIC,157,125,38,8
 | 
			
		||||
    LTEXT           "Defused",IDC_STATIC,109,155,28,8
 | 
			
		||||
    LTEXT           "Defusions",IDC_STATIC,206,125,34,8
 | 
			
		||||
    PUSHBUTTON      "About",IDC_ABOUT,109,185,40,10
 | 
			
		||||
    PUSHBUTTON      "Save",IDC_BUTTON_SAVECHANGES,157,155,39,8
 | 
			
		||||
    PUSHBUTTON      "Clear stats",IDC_BUTTON_CLEARSTATS,157,168,39,27
 | 
			
		||||
    PUSHBUTTON      "Delete",IDC_BUTTON_DELETE,206,155,39,8
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_ABOUTBOX DIALOGEX 0, 0, 186, 95
 | 
			
		||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | 
 | 
			
		||||
    WS_SYSMENU
 | 
			
		||||
CAPTION "About"
 | 
			
		||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
 | 
			
		||||
BEGIN
 | 
			
		||||
    DEFPUSHBUTTON   "OK",IDOK,109,68,50,14
 | 
			
		||||
    LTEXT           "WinCSX 0.4",IDC_STATIC,18,20,66,8
 | 
			
		||||
    LTEXT           "By JGHG",IDC_STATIC,18,28,66,8
 | 
			
		||||
    LTEXT           "2005",IDC_STATIC,18,36,66,8
 | 
			
		||||
    LTEXT           "http://www.amxmodx.org/",IDC_STATIC,18,44,88,8
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// DESIGNINFO
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
GUIDELINES DESIGNINFO 
 | 
			
		||||
BEGIN
 | 
			
		||||
    IDD_WINCSXBOX, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        LEFTMARGIN, 4
 | 
			
		||||
        RIGHTMARGIN, 248
 | 
			
		||||
        VERTGUIDE, 98
 | 
			
		||||
        VERTGUIDE, 109
 | 
			
		||||
        VERTGUIDE, 157
 | 
			
		||||
        VERTGUIDE, 196
 | 
			
		||||
        VERTGUIDE, 206
 | 
			
		||||
        VERTGUIDE, 245
 | 
			
		||||
        TOPMARGIN, 5
 | 
			
		||||
        BOTTOMMARGIN, 195
 | 
			
		||||
        HORZGUIDE, 18
 | 
			
		||||
        HORZGUIDE, 35
 | 
			
		||||
        HORZGUIDE, 48
 | 
			
		||||
        HORZGUIDE, 65
 | 
			
		||||
        HORZGUIDE, 78
 | 
			
		||||
        HORZGUIDE, 95
 | 
			
		||||
        HORZGUIDE, 108
 | 
			
		||||
        HORZGUIDE, 125
 | 
			
		||||
        HORZGUIDE, 137
 | 
			
		||||
        HORZGUIDE, 155
 | 
			
		||||
        HORZGUIDE, 163
 | 
			
		||||
        HORZGUIDE, 168
 | 
			
		||||
    END
 | 
			
		||||
END
 | 
			
		||||
#endif    // APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// 24
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDM_VISUALSTYLES        24                      "WinCSX.exe.manifest"
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// String Table
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
STRINGTABLE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    IDS_APP_TITLE           "WinCSX"
 | 
			
		||||
    IDC_WINCSX              "WINCSX"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
#endif    // Neutral resources
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Swedish resources
 | 
			
		||||
 | 
			
		||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE)
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
 | 
			
		||||
#pragma code_page(1252)
 | 
			
		||||
#endif //_WIN32
 | 
			
		||||
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// TEXTINCLUDE
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
1 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "resource.h\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
2 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
 | 
			
		||||
    "#include ""windows.h""\r\n"
 | 
			
		||||
    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
 | 
			
		||||
    "\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
3 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "\r\n"
 | 
			
		||||
    "\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
#endif    // APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
#endif    // Swedish resources
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef APSTUDIO_INVOKED
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 3 resource.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
#endif    // not APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								modules/cstrike/csx/WinCSX/resources/small.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								modules/cstrike/csx/WinCSX/resources/small.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 22 KiB  | 
							
								
								
									
										8
									
								
								modules/cstrike/csx/WinCSX/stdafx.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								modules/cstrike/csx/WinCSX/stdafx.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
// stdafx.cpp : source file that includes just the standard includes
 | 
			
		||||
// WinCSX.pch will be the pre-compiled header
 | 
			
		||||
// stdafx.obj will contain the pre-compiled type information
 | 
			
		||||
 | 
			
		||||
#include "stdafx.h"
 | 
			
		||||
 | 
			
		||||
// TODO: reference any additional headers you need in STDAFX.H
 | 
			
		||||
// and not in this file
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/cstrike/csx/WinCSX/stdafx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/cstrike/csx/WinCSX/stdafx.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
// stdafx.h : include file for standard system include files,
 | 
			
		||||
// or project specific include files that are used frequently, but
 | 
			
		||||
// are changed infrequently
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
 | 
			
		||||
// Windows Header Files:
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
// C RunTime Header Files
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#include <memory.h>
 | 
			
		||||
#include <tchar.h>
 | 
			
		||||
 | 
			
		||||
// TODO: reference additional headers your program requires here
 | 
			
		||||
//#include "CRank.h"
 | 
			
		||||
//#include "amx.h"
 | 
			
		||||
							
								
								
									
										436
									
								
								modules/cstrike/csx/meta_api.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								modules/cstrike/csx/meta_api.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,436 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "rank.h"
 | 
			
		||||
 | 
			
		||||
funEventCall modMsgsEnd[MAX_REG_MSGS];
 | 
			
		||||
funEventCall modMsgs[MAX_REG_MSGS];
 | 
			
		||||
 | 
			
		||||
void (*function)(void*);
 | 
			
		||||
void (*endfunction)(void*);
 | 
			
		||||
 | 
			
		||||
CPlayer players[33];
 | 
			
		||||
 | 
			
		||||
CPlayer* mPlayer;
 | 
			
		||||
 | 
			
		||||
int mPlayerIndex;
 | 
			
		||||
int mState;
 | 
			
		||||
 | 
			
		||||
RankSystem g_rank;
 | 
			
		||||
 | 
			
		||||
Grenades g_grenades;
 | 
			
		||||
 | 
			
		||||
int iFGrenade;
 | 
			
		||||
int iFDeath;
 | 
			
		||||
int iFDamage;
 | 
			
		||||
 | 
			
		||||
int iFBPlanted;
 | 
			
		||||
int iFBDefused;
 | 
			
		||||
int iFBPlanting;
 | 
			
		||||
int iFBDefusing;
 | 
			
		||||
int iFBExplode;
 | 
			
		||||
 | 
			
		||||
int g_bombAnnounce;
 | 
			
		||||
int g_Planter;
 | 
			
		||||
int g_Defuser;
 | 
			
		||||
 | 
			
		||||
bool rankBots;
 | 
			
		||||
 | 
			
		||||
int gmsgCurWeapon;
 | 
			
		||||
int gmsgDeathMsg;
 | 
			
		||||
int gmsgDamage;
 | 
			
		||||
int gmsgDamageEnd;
 | 
			
		||||
int gmsgWeaponList;
 | 
			
		||||
int gmsgResetHUD;
 | 
			
		||||
int gmsgAmmoX;
 | 
			
		||||
int gmsgScoreInfo;
 | 
			
		||||
int gmsgAmmoPickup;
 | 
			
		||||
int gmsgSendAudio;
 | 
			
		||||
int gmsgTextMsg;
 | 
			
		||||
int gmsgBarTime;
 | 
			
		||||
 | 
			
		||||
int g_CurrentMsg;
 | 
			
		||||
 | 
			
		||||
cvar_t init_csstats_maxsize ={"csstats_maxsize","3500", 0 , 3500.0 };
 | 
			
		||||
cvar_t init_csstats_reset ={"csstats_reset","0"};
 | 
			
		||||
cvar_t init_csstats_rank ={"csstats_rank","1"};
 | 
			
		||||
cvar_t *csstats_maxsize;
 | 
			
		||||
cvar_t *csstats_reset;
 | 
			
		||||
cvar_t *csstats_rank;
 | 
			
		||||
 | 
			
		||||
cvar_t* csstats_rankbots;
 | 
			
		||||
cvar_t* csstats_pause;
 | 
			
		||||
cvar_t init_csstats_rankbots ={"csstats_rankbots","0"};
 | 
			
		||||
cvar_t init_csstats_pause = {"csstats_pause","0"};
 | 
			
		||||
 | 
			
		||||
struct sUserMsg
 | 
			
		||||
{
 | 
			
		||||
	const char* name;
 | 
			
		||||
	int* id;
 | 
			
		||||
	funEventCall func;
 | 
			
		||||
	bool endmsg;
 | 
			
		||||
} g_user_msg[] = {
 | 
			
		||||
	{"CurWeapon",	&gmsgCurWeapon,		Client_CurWeapon,	false},
 | 
			
		||||
	{"Damage",		&gmsgDamage,		Client_Damage,		false},	
 | 
			
		||||
	{"Damage",		&gmsgDamageEnd,		Client_Damage_End,	true},
 | 
			
		||||
	{"WeaponList",	&gmsgWeaponList,	Client_WeaponList,	false},
 | 
			
		||||
	{"ResetHUD",	&gmsgResetHUD,		Client_ResetHUD,	true},
 | 
			
		||||
	{"AmmoX",		&gmsgAmmoX,			Client_AmmoX,		false},
 | 
			
		||||
	{"ScoreInfo",	&gmsgScoreInfo,		Client_ScoreInfo,	false},
 | 
			
		||||
	{"AmmoPickup",	&gmsgAmmoPickup,	Client_AmmoPickup,	false},
 | 
			
		||||
	{"SendAudio",	&gmsgSendAudio,		Client_SendAudio,	false},
 | 
			
		||||
	{"TextMsg",		&gmsgTextMsg,		Client_TextMsg,		false},
 | 
			
		||||
	{"BarTime",		&gmsgBarTime,		Client_BarTime,		false},
 | 
			
		||||
	{"DeathMsg",	&gmsgDeathMsg,		Client_DeathMsg,	false},
 | 
			
		||||
 | 
			
		||||
	{0, 0, 0, false}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int RegUserMsg_Post(const char *pszName, int iSize)
 | 
			
		||||
{
 | 
			
		||||
	for (int i = 0; g_user_msg[ i ].name; ++i )
 | 
			
		||||
	{
 | 
			
		||||
		if ( !*g_user_msg[i].id && strcmp( g_user_msg[ i ].name , pszName  ) == 0 )
 | 
			
		||||
		{
 | 
			
		||||
			int id = META_RESULT_ORIG_RET( int );
 | 
			
		||||
 | 
			
		||||
			*g_user_msg[ i ].id = id;
 | 
			
		||||
		
 | 
			
		||||
			if ( g_user_msg[ i ].endmsg )
 | 
			
		||||
				modMsgsEnd[ id  ] = g_user_msg[ i ].func;
 | 
			
		||||
			else
 | 
			
		||||
				modMsgs[ id  ] = g_user_msg[ i ].func;
 | 
			
		||||
			//break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* get_localinfo( const char* name , const char* def = 0 )
 | 
			
		||||
{
 | 
			
		||||
	const char* b = LOCALINFO( (char*)name );
 | 
			
		||||
	if (((b==0)||(*b==0)) && def )
 | 
			
		||||
		SET_LOCALINFO((char*)name,(char*)(b = def) );
 | 
			
		||||
	return b;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientKill_Post(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	if ( pPlayer->IsAlive())
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
 | 
			
		||||
	MF_ExecuteForward( iFDamage,static_cast<cell>(pPlayer->index), static_cast<cell>(pPlayer->index) , 
 | 
			
		||||
		static_cast<cell>(0), static_cast<cell>(0), static_cast<cell>(0), static_cast<cell>(0) );		// he would
 | 
			
		||||
	pPlayer->saveKill(pPlayer,0,0,0);
 | 
			
		||||
	MF_ExecuteForward( iFDeath,static_cast<cell>(pPlayer->index), static_cast<cell>(pPlayer->index),
 | 
			
		||||
		static_cast<cell>(0), static_cast<cell>(0), static_cast<cell>(0) );
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerActivate_Post( edict_t *pEdictList, int edictCount, int clientMax ){
 | 
			
		||||
 | 
			
		||||
	rankBots = (int)csstats_rankbots->value ? true:false;
 | 
			
		||||
 | 
			
		||||
	for( int i = 1; i <= gpGlobals->maxClients; ++i)
 | 
			
		||||
		GET_PLAYER_POINTER_I(i)->Init( i , pEdictList + i );
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlayerPreThink_Post( edict_t *pEntity ) {
 | 
			
		||||
    if ( !isModuleActive() )
 | 
			
		||||
	{
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	if (pPlayer->clearStats && pPlayer->clearStats < gpGlobals->time ){
 | 
			
		||||
 | 
			
		||||
		if ( !ignoreBots(pEntity) ){
 | 
			
		||||
			pPlayer->clearStats = 0.0f;
 | 
			
		||||
			if (pPlayer->rank)
 | 
			
		||||
				pPlayer->rank->updatePosition( &pPlayer->life );
 | 
			
		||||
			pPlayer->restartStats(false);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerDeactivate() {
 | 
			
		||||
	int i;
 | 
			
		||||
	for( i = 1;i<=gpGlobals->maxClients; ++i){
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
 | 
			
		||||
		if (pPlayer->rank) pPlayer->Disconnect();
 | 
			
		||||
	}
 | 
			
		||||
	if ( (g_rank.getRankNum() >= (int)csstats_maxsize->value) || ((int)csstats_reset->value == 1 ) ) {
 | 
			
		||||
		CVAR_SET_FLOAT("csstats_reset",0.0);
 | 
			
		||||
		g_rank.clear(); // clear before save to file
 | 
			
		||||
	}
 | 
			
		||||
	g_rank.saveRank( MF_BuildPathname("%s",get_localinfo("csstats")) );	
 | 
			
		||||
 | 
			
		||||
	// clear custom weapons info
 | 
			
		||||
	for ( i=MAX_WEAPONS;i<MAX_WEAPONS+MAX_CWEAPONS;i++)
 | 
			
		||||
		weaponData[i].used = false;
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL ClientConnect_Post( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ]  ){
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	
 | 
			
		||||
	if (pPlayer->pEdict == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->Init(ENTINDEX(pEntity), pEntity);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	pPlayer->Connect(pszAddress);
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientDisconnect( edict_t *pEntity ) {
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	if (pPlayer->rank) pPlayer->Disconnect();
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientPutInServer_Post( edict_t *pEntity ) {
 | 
			
		||||
	GET_PLAYER_POINTER(pEntity)->PutInServer();
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientUserInfoChanged_Post( edict_t *pEntity, char *infobuffer ) {
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->pEdict == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->Init(ENTINDEX(pEntity), pEntity);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char* name = INFOKEY_VALUE(infobuffer,"name");
 | 
			
		||||
	const char* oldname = STRING(pEntity->v.netname);
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->rank ){
 | 
			
		||||
		if ( strcmp(oldname,name) != 0 ) {
 | 
			
		||||
			if ((int)csstats_rank->value == 0)
 | 
			
		||||
				pPlayer->rank = g_rank.findEntryInRank( name, name );
 | 
			
		||||
			else
 | 
			
		||||
				pPlayer->rank->setName( name );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else if ( pPlayer->IsBot() ) {
 | 
			
		||||
		pPlayer->Connect( "127.0.0.1" );
 | 
			
		||||
		pPlayer->PutInServer();
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) {
 | 
			
		||||
	if (ed){
 | 
			
		||||
		mPlayerIndex = ENTINDEX(ed);
 | 
			
		||||
		mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
 | 
			
		||||
	} else {
 | 
			
		||||
		mPlayerIndex = 0;
 | 
			
		||||
		mPlayer = 0;
 | 
			
		||||
	}
 | 
			
		||||
	mState = 0;
 | 
			
		||||
	g_CurrentMsg = msg_type;
 | 
			
		||||
	if ( g_CurrentMsg < 0 || g_CurrentMsg >= MAX_REG_MSGS )
 | 
			
		||||
		g_CurrentMsg = 0;
 | 
			
		||||
	function=modMsgs[g_CurrentMsg];
 | 
			
		||||
	endfunction=modMsgsEnd[g_CurrentMsg];
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageEnd_Post(void) {
 | 
			
		||||
	if (endfunction) (*endfunction)(NULL);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteByte_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteChar_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteShort_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteLong_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteAngle_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteCoord_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteString_Post(const char *sz) {
 | 
			
		||||
	if (function) (*function)((void *)sz);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteEntity_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StartFrame_Post(){
 | 
			
		||||
	if (g_bombAnnounce){
 | 
			
		||||
		switch (g_bombAnnounce){
 | 
			
		||||
		case BOMB_PLANTING:
 | 
			
		||||
			MF_ExecuteForward( iFBPlanting, static_cast<cell>(g_Planter) );
 | 
			
		||||
			break;
 | 
			
		||||
		case BOMB_PLANTED:
 | 
			
		||||
			MF_ExecuteForward( iFBPlanted, static_cast<cell>(g_Planter) );
 | 
			
		||||
			break;
 | 
			
		||||
		case BOMB_EXPLODE:
 | 
			
		||||
			MF_ExecuteForward( iFBExplode, static_cast<cell>(g_Planter), static_cast<cell>(g_Defuser) );
 | 
			
		||||
			break;
 | 
			
		||||
		case BOMB_DEFUSING:
 | 
			
		||||
			MF_ExecuteForward( iFBDefusing, static_cast<cell>(g_Defuser) );
 | 
			
		||||
			break;
 | 
			
		||||
		case BOMB_DEFUSED:
 | 
			
		||||
			MF_ExecuteForward( iFBDefused, static_cast<cell>(g_Defuser) );
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		g_bombAnnounce = 0;
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetModel_Post(edict_t *e, const char *m){
 | 
			
		||||
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
	{
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ( e->v.owner && m[7]=='w' && m[8]=='_' ){
 | 
			
		||||
		int w_id = 0;
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER(e->v.owner);
 | 
			
		||||
		switch(m[9]){
 | 
			
		||||
		case 'h':
 | 
			
		||||
			w_id = CSW_HEGRENADE;
 | 
			
		||||
			g_grenades.put(e, 2.0, 4, pPlayer);
 | 
			
		||||
			pPlayer->saveShot(CSW_HEGRENADE);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'f':
 | 
			
		||||
			if (m[10]=='l') w_id = CSW_FLASHBANG;
 | 
			
		||||
			break;
 | 
			
		||||
		case 's':
 | 
			
		||||
			if (m[10]=='m') w_id = CSW_SMOKEGRENADE;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		if ( w_id )	
 | 
			
		||||
			MF_ExecuteForward( iFGrenade, static_cast<cell>(pPlayer->index), 
 | 
			
		||||
			static_cast<cell>(ENTINDEX(e)), static_cast<cell>(w_id));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitSound_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch) {
 | 
			
		||||
	if (sample[0]=='w'&&sample[1]=='e'&&sample[8]=='k'&&sample[9]=='n'&&sample[14]!='d'){
 | 
			
		||||
		CPlayer*pPlayer = GET_PLAYER_POINTER(entity);
 | 
			
		||||
		pPlayer->saveShot(pPlayer->current);
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t *e, TraceResult *ptr)
 | 
			
		||||
{
 | 
			
		||||
	if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT|FL_FAKECLIENT))
 | 
			
		||||
		&& e 
 | 
			
		||||
		&& (e->v.flags & (FL_CLIENT|FL_FAKECLIENT)) 
 | 
			
		||||
		&& ptr->iHitgroup)
 | 
			
		||||
	{
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER(e);
 | 
			
		||||
		if (pPlayer->current != CSW_KNIFE)
 | 
			
		||||
		{
 | 
			
		||||
			pPlayer->aiming = ptr->iHitgroup;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnMetaAttach() {
 | 
			
		||||
	CVAR_REGISTER (&init_csstats_maxsize);
 | 
			
		||||
	CVAR_REGISTER (&init_csstats_reset);
 | 
			
		||||
	CVAR_REGISTER (&init_csstats_rank);
 | 
			
		||||
	csstats_maxsize=CVAR_GET_POINTER(init_csstats_maxsize.name);
 | 
			
		||||
	csstats_reset=CVAR_GET_POINTER(init_csstats_reset.name);
 | 
			
		||||
	csstats_rank=CVAR_GET_POINTER(init_csstats_rank.name);
 | 
			
		||||
 | 
			
		||||
	CVAR_REGISTER (&init_csstats_rankbots);
 | 
			
		||||
	CVAR_REGISTER (&init_csstats_pause);
 | 
			
		||||
	csstats_rankbots = CVAR_GET_POINTER(init_csstats_rankbots.name);
 | 
			
		||||
	csstats_pause = CVAR_GET_POINTER(init_csstats_pause.name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AmxxCheckGame(const char *game)
 | 
			
		||||
{
 | 
			
		||||
	if (strcasecmp(game, "cstrike") == 0 ||
 | 
			
		||||
		strcasecmp(game, "czero") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		return AMXX_GAME_OK;
 | 
			
		||||
	}
 | 
			
		||||
	return AMXX_GAME_BAD;
 | 
			
		||||
}
 | 
			
		||||
void OnAmxxAttach(){
 | 
			
		||||
	MF_AddNatives(stats_Natives);
 | 
			
		||||
	const char* path =  get_localinfo("csstats_score");
 | 
			
		||||
	if ( path && *path ) 
 | 
			
		||||
	{
 | 
			
		||||
		char error[128];
 | 
			
		||||
		g_rank.loadCalc( MF_BuildPathname("%s",path) , error  );
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ( !g_rank.begin() )
 | 
			
		||||
	{		
 | 
			
		||||
		g_rank.loadRank( MF_BuildPathname("%s",
 | 
			
		||||
			get_localinfo("csstats") ) );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnAmxxDetach() {
 | 
			
		||||
	g_grenades.clear();
 | 
			
		||||
	g_rank.clear();
 | 
			
		||||
	g_rank.unloadCalc();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnPluginsLoaded(){
 | 
			
		||||
	iFDeath = MF_RegisterForward("client_death",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFDamage = MF_RegisterForward("client_damage",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFBPlanted = MF_RegisterForward("bomb_planted",ET_IGNORE,FP_CELL,FP_DONE);
 | 
			
		||||
	iFBDefused = MF_RegisterForward("bomb_defused",ET_IGNORE,FP_CELL,FP_DONE);
 | 
			
		||||
	iFBPlanting = MF_RegisterForward("bomb_planting",ET_IGNORE,FP_CELL,FP_DONE);
 | 
			
		||||
	iFBDefusing = MF_RegisterForward("bomb_defusing",ET_IGNORE,FP_CELL,FP_DONE);
 | 
			
		||||
	iFBExplode = MF_RegisterForward("bomb_explode",ET_IGNORE,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFGrenade = MF_RegisterForward("grenade_throw",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										511
									
								
								modules/cstrike/csx/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										511
									
								
								modules/cstrike/csx/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,511 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
#include <amxmodx_version.h>
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "CSX"
 | 
			
		||||
#define MODULE_VERSION AMXX_VERSION
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org/"
 | 
			
		||||
#define MODULE_LOGTAG "CSX"
 | 
			
		||||
#define MODULE_LIBRARY "csx"
 | 
			
		||||
#define MODULE_LIBCLASS "xstats"
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * AMXX Init functions
 | 
			
		||||
 * Also consider using FN_META_*
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** AMXX query */
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
 | 
			
		||||
/** AMXX Check Game - module API is NOT available here.
 | 
			
		||||
 * Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
 | 
			
		||||
 * syntax: int AmxxCheckGame(const char *game)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_CHECKGAME AmxxCheckGame
 | 
			
		||||
 | 
			
		||||
/** AMXX attach
 | 
			
		||||
 * Do native functions init here (MF_AddNatives)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
 | 
			
		||||
/** AMXX Detach (unload) */
 | 
			
		||||
#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
 | 
			
		||||
/** All plugins loaded
 | 
			
		||||
 * Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/** All plugins are about to be unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADING OnPluginsUnloading
 | 
			
		||||
 | 
			
		||||
/** All plugins are now unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADED OnPluginsUnloaded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta detach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				DispatchSpawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				DispatchThink				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				DispatchUse					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				DispatchTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			DispatchKeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
// #define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
#define FN_ClientDisconnect				ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
// #define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
// #define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
#define FN_ServerDeactivate				ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
// #define FN_PlayerPreThink			PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
// #define FN_PlayerPostThink			PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
// #define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
#define FN_ClientConnect_Post					ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
#define FN_ClientKill_Post						ClientKill_Post
 | 
			
		||||
#define FN_ClientPutInServer_Post				ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
#define FN_ClientUserInfoChanged_Post			ClientUserInfoChanged_Post
 | 
			
		||||
#define FN_ServerActivate_Post					ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
#define FN_PlayerPreThink_Post					PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
#define FN_StartFrame_Post						StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
// #define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
// #define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
// #define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
// #define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
// #define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
// #define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
#define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
#define FN_EmitSound_Post						EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
#define FN_TraceLine_Post						TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post						TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
#define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
#define FN_MessageEnd_Post						MessageEnd_Post
 | 
			
		||||
#define FN_WriteByte_Post						WriteByte_Post
 | 
			
		||||
#define FN_WriteChar_Post						WriteChar_Post
 | 
			
		||||
#define FN_WriteShort_Post						WriteShort_Post
 | 
			
		||||
#define FN_WriteLong_Post						WriteLong_Post
 | 
			
		||||
#define FN_WriteAngle_Post						WriteAngle_Post
 | 
			
		||||
#define FN_WriteCoord_Post						WriteCoord_Post
 | 
			
		||||
#define FN_WriteString_Post						WriteString_Post
 | 
			
		||||
#define FN_WriteEntity_Post						WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
#define FN_RegUserMsg_Post						RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
							
								
								
									
										26
									
								
								modules/cstrike/csx/msvc12/csx.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/cstrike/csx/msvc12/csx.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "csx", "csx.vcxproj", "{1DC4A99A-F23F-4AAE-881C-79D157C91155}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinCSX", "..\WinCSX\msvc10\WinCSX.vcxproj", "{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{1DC4A99A-F23F-4AAE-881C-79D157C91155}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{1DC4A99A-F23F-4AAE-881C-79D157C91155}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{1DC4A99A-F23F-4AAE-881C-79D157C91155}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{1DC4A99A-F23F-4AAE-881C-79D157C91155}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{39A1E5DD-81A1-441D-B99A-E50A01DB05D7}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										164
									
								
								modules/cstrike/csx/msvc12/csx.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								modules/cstrike/csx/msvc12/csx.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{1DC4A99A-F23F-4AAE-881C-79D157C91155}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>csx</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Release/csx.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;csx_EXPORTS;JIT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <StructMemberAlignment>Default</StructMemberAlignment>
 | 
			
		||||
      <FunctionLevelLinking>false</FunctionLevelLinking>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Release/csx.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Release/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <ProgramDatabaseFile>.\Release/csx_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Release/csx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Debug/csx.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;csx_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Debug/csx.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Debug/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>.\Debug/csx_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Debug/csx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp" />
 | 
			
		||||
    <ClCompile Include="..\meta_api.cpp" />
 | 
			
		||||
    <ClCompile Include="..\rank.cpp" />
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h" />
 | 
			
		||||
    <ClInclude Include="..\CRank.h" />
 | 
			
		||||
    <ClInclude Include="..\rank.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\csstats.inc" />
 | 
			
		||||
    <None Include="..\..\..\plugins\include\csx.inc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										67
									
								
								modules/cstrike/csx/msvc12/csx.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								modules/cstrike/csx/msvc12/csx.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{7eb4e308-0d6a-4435-a464-ab5ab13bc5ed}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{7cf08006-0e1e-46ff-ad9a-87bb445c1536}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="SDK">
 | 
			
		||||
      <UniqueIdentifier>{360754a5-9e04-467e-bf57-fde61c3a3410}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="SDK\SDK Base">
 | 
			
		||||
      <UniqueIdentifier>{a235d32e-883a-4d2e-bf27-e8eadfdbf666}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Pawn Includes">
 | 
			
		||||
      <UniqueIdentifier>{3f559917-fcbd-4cd3-8136-8a7a769af465}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\meta_api.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\rank.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
 | 
			
		||||
      <Filter>SDK\SDK Base</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\CRank.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\rank.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>SDK</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h">
 | 
			
		||||
      <Filter>SDK\SDK Base</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\csstats.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\csx.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										448
									
								
								modules/cstrike/csx/rank.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										448
									
								
								modules/cstrike/csx/rank.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,448 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "rank.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_astats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int attacker = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(attacker);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->attackers[attacker].hits){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->attackers[attacker];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		if (params[6] && attacker && stats->name )
 | 
			
		||||
			MF_SetAmxString(amx,params[5],stats->name,params[6]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_vstats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int victim = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(victim);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->victims[victim].hits){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->victims[victim];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		if (params[6] && victim && stats->name)
 | 
			
		||||
			MF_SetAmxString(amx,params[5],stats->name,params[6]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_wrstats(AMX *amx, cell *params) /* 4 param */ // DEC-Weapon (round) stats (end)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int weapon = params[2];
 | 
			
		||||
	if (weapon<0||weapon>=MAX_WEAPONS+MAX_CWEAPONS){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->weaponsRnd[weapon].shots){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		Stats* stats = &pPlayer->weaponsRnd[weapon];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_wstats(AMX *amx, cell *params) /* 4 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int weapon = params[2];
 | 
			
		||||
	if (weapon<0||weapon>=MAX_WEAPONS+MAX_CWEAPONS){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->weapons[weapon].shots){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->weapons[weapon];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL reset_user_wstats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	GET_PLAYER_POINTER_I(index)->restartStats();
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_rstats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->rank){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cpStats[0] = pPlayer->life.kills;
 | 
			
		||||
		cpStats[1] = pPlayer->life.deaths;
 | 
			
		||||
		cpStats[2] = pPlayer->life.hs;
 | 
			
		||||
		cpStats[3] = pPlayer->life.tks;
 | 
			
		||||
		cpStats[4] = pPlayer->life.shots;
 | 
			
		||||
		cpStats[5] = pPlayer->life.hits;
 | 
			
		||||
		cpStats[6] = pPlayer->life.damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = pPlayer->life.bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_stats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( pPlayer->rank ){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cpStats[0] = pPlayer->rank->kills;
 | 
			
		||||
		cpStats[1] = pPlayer->rank->deaths;
 | 
			
		||||
		cpStats[2] = pPlayer->rank->hs;
 | 
			
		||||
		cpStats[3] = pPlayer->rank->tks;
 | 
			
		||||
		cpStats[4] = pPlayer->rank->shots;
 | 
			
		||||
		cpStats[5] = pPlayer->rank->hits;
 | 
			
		||||
		cpStats[6] = pPlayer->rank->damage;
 | 
			
		||||
 | 
			
		||||
		cpStats[7] = pPlayer->rank->getPosition();
 | 
			
		||||
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = pPlayer->rank->bodyHits[i];
 | 
			
		||||
		return pPlayer->rank->getPosition();
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_stats2(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( pPlayer->rank ){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
 | 
			
		||||
		cpStats[0] = pPlayer->rank->bDefusions;
 | 
			
		||||
		cpStats[1] = pPlayer->rank->bDefused;
 | 
			
		||||
		cpStats[2] = pPlayer->rank->bPlants;
 | 
			
		||||
		cpStats[3] = pPlayer->rank->bExplosions;
 | 
			
		||||
 | 
			
		||||
		return pPlayer->rank->getPosition();
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_stats(AMX *amx, cell *params) /* 7 param */
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
	int index = params[1] + 1;
 | 
			
		||||
 | 
			
		||||
	for(RankSystem::iterator a = g_rank.front(); a ;--a){
 | 
			
		||||
		if ((*a).getPosition() == index)  {
 | 
			
		||||
			cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
			cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
			cpStats[0] = (*a).kills;
 | 
			
		||||
			cpStats[1] = (*a).deaths;
 | 
			
		||||
			cpStats[2] = (*a).hs;
 | 
			
		||||
			cpStats[3] = (*a).tks;
 | 
			
		||||
			cpStats[4] = (*a).shots;
 | 
			
		||||
			cpStats[5] = (*a).hits;
 | 
			
		||||
			cpStats[6] = (*a).damage;
 | 
			
		||||
 | 
			
		||||
			cpStats[7] = (*a).getPosition();
 | 
			
		||||
 | 
			
		||||
			MF_SetAmxString(amx,params[4],(*a).getName(),params[5]);
 | 
			
		||||
			if (params[6] > 0)
 | 
			
		||||
				MF_SetAmxString(amx, params[6], (*a).getUnique(), params[7]);
 | 
			
		||||
			for(int i = 1; i < 8; ++i)
 | 
			
		||||
				cpBodyHits[i] = (*a).bodyHits[i];
 | 
			
		||||
			return --a ? index : 0;
 | 
			
		||||
		}	
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_stats2(AMX *amx, cell *params) /* 4 param */
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
	int index = params[1] + 1;
 | 
			
		||||
 | 
			
		||||
	for(RankSystem::iterator a = g_rank.front(); a ;--a){
 | 
			
		||||
		if ((*a).getPosition() == index)  {
 | 
			
		||||
			cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
			if (params[4] > 0)
 | 
			
		||||
				MF_SetAmxString(amx, params[3], (*a).getUnique(), params[4]);
 | 
			
		||||
 | 
			
		||||
			cpStats[0] = (*a).bDefusions;
 | 
			
		||||
			cpStats[1] = (*a).bDefused;
 | 
			
		||||
			cpStats[2] = (*a).bPlants;
 | 
			
		||||
			cpStats[3] = (*a).bExplosions;
 | 
			
		||||
 | 
			
		||||
			return --a ? index : 0;
 | 
			
		||||
		}	
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_statsnum(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return g_rank.getRankNum();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL register_cwpn(AMX *amx, cell *params){ // name,melee=0,logname 
 | 
			
		||||
	int i,iLen;
 | 
			
		||||
	for ( i=MAX_WEAPONS;i<MAX_WEAPONS+MAX_CWEAPONS;i++){
 | 
			
		||||
		if ( !weaponData[i].used ){
 | 
			
		||||
 | 
			
		||||
			char* szName = MF_GetAmxString(amx, params[1], 0, &iLen);
 | 
			
		||||
			char *szLog = MF_GetAmxString(amx, params[3], 0, &iLen);
 | 
			
		||||
 | 
			
		||||
			strcpy(weaponData[i].name,szName);
 | 
			
		||||
			strcpy(weaponData[i].logname,szLog);
 | 
			
		||||
			
 | 
			
		||||
			weaponData[i].used = true;
 | 
			
		||||
			weaponData[i].melee = params[2] ? true:false;
 | 
			
		||||
			return i;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	MF_PrintSrvConsole("No More Custom Weapon Slots!\n");
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL custom_wpn_dmg(AMX *amx, cell *params){ // wid,att,vic,dmg,hp=0
 | 
			
		||||
	int weapon = params[1];
 | 
			
		||||
	if (  weapon < MAX_WEAPONS || weapon >= MAX_WEAPONS+MAX_CWEAPONS ||  !weaponData[weapon].used ){ // only for custom weapons
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int att = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(att);
 | 
			
		||||
 | 
			
		||||
	int vic = params[3];
 | 
			
		||||
	CHECK_PLAYERRANGE(vic);
 | 
			
		||||
	
 | 
			
		||||
	int dmg = params[4];
 | 
			
		||||
	if ( dmg<1 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid damage %d", dmg);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	int aim = params[5];
 | 
			
		||||
	if ( aim < 0 || aim > 7 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid aim %d", aim);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pAtt = GET_PLAYER_POINTER_I(att);
 | 
			
		||||
	CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
 | 
			
		||||
 | 
			
		||||
	pVic->pEdict->v.dmg_inflictor = NULL;
 | 
			
		||||
	pAtt->saveHit( pVic , weapon , dmg, aim );
 | 
			
		||||
 | 
			
		||||
	if ( !pAtt ) pAtt = pVic;
 | 
			
		||||
	int TA = 0;
 | 
			
		||||
	if ( (pVic->teamId == pAtt->teamId) && ( pVic != pAtt) )
 | 
			
		||||
		TA = 1;
 | 
			
		||||
	MF_ExecuteForward( iFDamage, static_cast<cell>(pAtt->index),
 | 
			
		||||
		static_cast<cell>(pVic->index), static_cast<cell>(dmg), static_cast<cell>(weapon),
 | 
			
		||||
		static_cast<cell>(aim), static_cast<cell>(TA) );
 | 
			
		||||
	
 | 
			
		||||
	if ( pVic->IsAlive() )
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	pAtt->saveKill(pVic,weapon,( aim == 1 ) ? 1:0 ,TA);
 | 
			
		||||
	MF_ExecuteForward( iFDeath, static_cast<cell>(pAtt->index), static_cast<cell>(pVic->index),
 | 
			
		||||
		static_cast<cell>(weapon), static_cast<cell>(aim), static_cast<cell>(TA) );
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL custom_wpn_shot(AMX *amx, cell *params){ // player,wid
 | 
			
		||||
	int index = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
 | 
			
		||||
	int weapon = params[1];
 | 
			
		||||
	if (  weapon < MAX_WEAPONS  || weapon >= MAX_WEAPONS+MAX_CWEAPONS || !weaponData[weapon].used ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	pPlayer->saveShot(weapon);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_wpnname(AMX *amx, cell *params){ 
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
	if (id<1 || id>=MAX_WEAPONS+MAX_CWEAPONS ){ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return MF_SetAmxString(amx,params[2],weaponData[id].name,params[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_wpnlogname(AMX *amx, cell *params){ 
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
	if (id<1 || id>=MAX_WEAPONS+MAX_CWEAPONS ){ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return MF_SetAmxString(amx,params[2],weaponData[id].logname,params[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_melee(AMX *amx, cell *params){ 
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
	if (id<1 || id>=MAX_WEAPONS+MAX_CWEAPONS ){ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	if ( id == 29 )
 | 
			
		||||
		return 1;
 | 
			
		||||
	return weaponData[id].melee ? 1:0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_maxweapons(AMX *amx, cell *params){
 | 
			
		||||
	return MAX_WEAPONS+MAX_CWEAPONS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_stats_size(AMX *amx, cell *params){
 | 
			
		||||
	return 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum MapObjective
 | 
			
		||||
{
 | 
			
		||||
	MapObjective_Bomb	 = (1<<0),
 | 
			
		||||
	MapObjective_Hostage = (1<<1),
 | 
			
		||||
	MapObjective_Vip	 = (1<<2),
 | 
			
		||||
	MapObjective_Escape  = (1<<3),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_map_objectives(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int flags = 0;
 | 
			
		||||
 | 
			
		||||
	if (!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "func_bomb_target")) || 
 | 
			
		||||
		!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "info_bomb_target")))
 | 
			
		||||
		flags |= MapObjective_Bomb;
 | 
			
		||||
 | 
			
		||||
	if (!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "func_hostage_rescue")) ||
 | 
			
		||||
		!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "info_hostage_rescue")) ||
 | 
			
		||||
		!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "hostage_entity"))      || // ) there are maps with only this and using team spawn as rescue zone.
 | 
			
		||||
		!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "monster_scientist")))     // ) 
 | 
			
		||||
		flags |= MapObjective_Hostage;
 | 
			
		||||
 | 
			
		||||
	if (!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "func_vip_safetyzone")))
 | 
			
		||||
		flags |= MapObjective_Vip;
 | 
			
		||||
 | 
			
		||||
	if (!FNullEnt(FIND_ENTITY_BY_STRING(NULL, "classname", "func_escapezone")))
 | 
			
		||||
		flags |= MapObjective_Escape;
 | 
			
		||||
 | 
			
		||||
	return flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO stats_Natives[] = {
 | 
			
		||||
	{ "get_stats",      get_stats},
 | 
			
		||||
	{ "get_stats2",      get_stats2},
 | 
			
		||||
	{ "get_statsnum",   get_statsnum},
 | 
			
		||||
	{ "get_user_astats",  get_user_astats },
 | 
			
		||||
	{ "get_user_rstats",  get_user_rstats },
 | 
			
		||||
	{ "get_user_lstats",  get_user_rstats }, // for backward compatibility
 | 
			
		||||
	{ "get_user_stats",   get_user_stats },
 | 
			
		||||
	{ "get_user_stats2",   get_user_stats2 },
 | 
			
		||||
	{ "get_user_vstats",  get_user_vstats },
 | 
			
		||||
	{ "get_user_wrstats",  get_user_wrstats},             // DEC-Weapon(Round) Stats
 | 
			
		||||
	{ "get_user_wstats",  get_user_wstats},
 | 
			
		||||
	{ "reset_user_wstats",  reset_user_wstats },
 | 
			
		||||
 | 
			
		||||
	// Custom Weapon Support
 | 
			
		||||
	{ "custom_weapon_add", register_cwpn },
 | 
			
		||||
	{ "custom_weapon_dmg", custom_wpn_dmg },
 | 
			
		||||
	{ "custom_weapon_shot", custom_wpn_shot },
 | 
			
		||||
 | 
			
		||||
	{ "xmod_get_wpnname", get_wpnname },
 | 
			
		||||
	{ "xmod_get_wpnlogname", get_wpnlogname },
 | 
			
		||||
	{ "xmod_is_melee_wpn", is_melee },
 | 
			
		||||
	{ "xmod_get_maxweapons", get_maxweapons },
 | 
			
		||||
	{ "xmod_get_stats_size", get_stats_size },
 | 
			
		||||
 | 
			
		||||
	{ "get_map_objectives", get_map_objectives },
 | 
			
		||||
 | 
			
		||||
	//***************************************
 | 
			
		||||
	//{ "get_weaponname", get_wpnname },
 | 
			
		||||
 | 
			
		||||
	///*******************
 | 
			
		||||
	{ NULL, NULL }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										165
									
								
								modules/cstrike/csx/rank.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								modules/cstrike/csx/rank.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,165 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef RANK_H
 | 
			
		||||
#define RANK_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
 | 
			
		||||
#define GET_PLAYER_POINTER(e)   (&players[ENTINDEX(e)])
 | 
			
		||||
#define GET_PLAYER_POINTER_I(i) (&players[i])
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO stats_Natives[];
 | 
			
		||||
 | 
			
		||||
struct weaponsVault {
 | 
			
		||||
  char name[32];
 | 
			
		||||
  char logname[16];
 | 
			
		||||
  short int ammoSlot;
 | 
			
		||||
  bool used;
 | 
			
		||||
  bool melee;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern bool rankBots;
 | 
			
		||||
extern cvar_t* csstats_rankbots;
 | 
			
		||||
extern cvar_t* csstats_pause;
 | 
			
		||||
 | 
			
		||||
extern int iFGrenade;
 | 
			
		||||
extern int iFDeath;
 | 
			
		||||
extern int iFDamage;
 | 
			
		||||
 | 
			
		||||
extern int iFBPlanted;
 | 
			
		||||
extern int iFBDefused;
 | 
			
		||||
extern int iFBPlanting;
 | 
			
		||||
extern int iFBDefusing;
 | 
			
		||||
extern int iFBExplode;
 | 
			
		||||
 | 
			
		||||
extern int g_bombAnnounce;
 | 
			
		||||
extern int g_Planter;
 | 
			
		||||
extern int g_Defuser;
 | 
			
		||||
 | 
			
		||||
#define BOMB_PLANTING	1
 | 
			
		||||
#define BOMB_PLANTED	2
 | 
			
		||||
#define BOMB_EXPLODE	3
 | 
			
		||||
#define BOMB_DEFUSING	4
 | 
			
		||||
#define BOMB_DEFUSED	5
 | 
			
		||||
 | 
			
		||||
extern weaponsVault weaponData[MAX_WEAPONS+MAX_CWEAPONS];
 | 
			
		||||
 | 
			
		||||
typedef void (*funEventCall)(void*);
 | 
			
		||||
extern funEventCall modMsgsEnd[MAX_REG_MSGS];
 | 
			
		||||
extern funEventCall modMsgs[MAX_REG_MSGS];
 | 
			
		||||
 | 
			
		||||
extern void (*function)(void*);
 | 
			
		||||
extern void (*endfunction)(void*);
 | 
			
		||||
 | 
			
		||||
extern cvar_t *csstats_maxsize;
 | 
			
		||||
extern cvar_t* csstats_rank;
 | 
			
		||||
extern cvar_t* csstats_reset;
 | 
			
		||||
 | 
			
		||||
extern Grenades g_grenades;
 | 
			
		||||
 | 
			
		||||
extern RankSystem g_rank;
 | 
			
		||||
 | 
			
		||||
extern CPlayer players[33];
 | 
			
		||||
 | 
			
		||||
extern CPlayer* mPlayer;
 | 
			
		||||
 | 
			
		||||
extern int mPlayerIndex;
 | 
			
		||||
 | 
			
		||||
extern int mState;
 | 
			
		||||
 | 
			
		||||
extern int gmsgCurWeapon;
 | 
			
		||||
extern int gmsgDamageEnd;
 | 
			
		||||
extern int gmsgDamage;
 | 
			
		||||
extern int gmsgWeaponList;
 | 
			
		||||
extern int gmsgResetHUD;
 | 
			
		||||
extern int gmsgAmmoX;
 | 
			
		||||
extern int gmsgScoreInfo;
 | 
			
		||||
extern int gmsgAmmoPickup;
 | 
			
		||||
 | 
			
		||||
extern int gmsgSendAudio;
 | 
			
		||||
extern int gmsgTextMsg;
 | 
			
		||||
extern int gmsgBarTime;
 | 
			
		||||
 | 
			
		||||
void Client_AmmoX(void*);
 | 
			
		||||
void Client_CurWeapon(void*);
 | 
			
		||||
void Client_Damage(void*);
 | 
			
		||||
void Client_WeaponList(void*);
 | 
			
		||||
void Client_AmmoPickup(void*);
 | 
			
		||||
void Client_Damage_End(void*);
 | 
			
		||||
void Client_ScoreInfo(void*);
 | 
			
		||||
void Client_ResetHUD(void*);
 | 
			
		||||
void Client_SendAudio(void*);
 | 
			
		||||
void Client_TextMsg(void*);
 | 
			
		||||
void Client_BarTime(void*);
 | 
			
		||||
void Client_DeathMsg(void*);
 | 
			
		||||
 | 
			
		||||
bool ignoreBots (edict_t *pEnt, edict_t *pOther = NULL );
 | 
			
		||||
bool isModuleActive();
 | 
			
		||||
 | 
			
		||||
#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_PLAYERRANGE(x) \
 | 
			
		||||
	if (x > gpGlobals->maxClients || x < 0) \
 | 
			
		||||
	{ \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Player out of range (%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 // RANK_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										270
									
								
								modules/cstrike/csx/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								modules/cstrike/csx/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,270 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// CSX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "rank.h"
 | 
			
		||||
 | 
			
		||||
weaponsVault weaponData[MAX_WEAPONS+MAX_CWEAPONS];
 | 
			
		||||
 | 
			
		||||
int damage;
 | 
			
		||||
int TA;
 | 
			
		||||
int weapon;
 | 
			
		||||
int aim;
 | 
			
		||||
bool ignore;
 | 
			
		||||
CPlayer *pAttacker;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Client_ResetHUD(void* mValue){
 | 
			
		||||
	if ( mPlayer ){ 
 | 
			
		||||
		mPlayer->clearStats = gpGlobals->time + 0.25f;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_DeathMsg(void *mValue)
 | 
			
		||||
{
 | 
			
		||||
	static int killer_id;
 | 
			
		||||
	//static int victim_id;
 | 
			
		||||
	static int is_headshot;
 | 
			
		||||
	const char *name;
 | 
			
		||||
 | 
			
		||||
	switch (mState++)
 | 
			
		||||
	{
 | 
			
		||||
	case 0:
 | 
			
		||||
		{
 | 
			
		||||
			killer_id = *(int *)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	//case 1:
 | 
			
		||||
	//	{
 | 
			
		||||
	//		victim_id = *(int *)mValue;
 | 
			
		||||
	//		break;
 | 
			
		||||
	//	}
 | 
			
		||||
	case 2:
 | 
			
		||||
		{
 | 
			
		||||
			is_headshot = *(int *)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	case 3:
 | 
			
		||||
		{
 | 
			
		||||
			name = (const char *)mValue;
 | 
			
		||||
			if (killer_id 
 | 
			
		||||
				&& (strcmp(name, "knife") == 0))
 | 
			
		||||
			{
 | 
			
		||||
				CPlayer *pPlayer = GET_PLAYER_POINTER_I(killer_id);
 | 
			
		||||
				pPlayer->aiming = is_headshot ? 1 : 0;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_WeaponList(void* mValue){
 | 
			
		||||
  static int wpnList;
 | 
			
		||||
  static int iSlot;
 | 
			
		||||
  static const char* wpnName;
 | 
			
		||||
 | 
			
		||||
  switch (mState++) {
 | 
			
		||||
  case 0:
 | 
			
		||||
    wpnName = (const char*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
    iSlot = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 7:
 | 
			
		||||
    int iId = *(int*)mValue;
 | 
			
		||||
    if ( (iId < 0 || iId >= MAX_WEAPONS ) || ( wpnList & (1<<iId) ) )
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    wpnList |= (1<<iId);
 | 
			
		||||
    weaponData[iId].ammoSlot = iSlot;
 | 
			
		||||
 | 
			
		||||
	if ( strstr( wpnName,"weapon_") )
 | 
			
		||||
	{
 | 
			
		||||
		if ( strcmp(wpnName+7,"hegrenade") == 0 )
 | 
			
		||||
			strcpy(weaponData[iId].name,wpnName+9);
 | 
			
		||||
		else
 | 
			
		||||
			strcpy(weaponData[iId].name,wpnName+7);
 | 
			
		||||
		strcpy(weaponData[iId].logname,weaponData[iId].name);
 | 
			
		||||
	}
 | 
			
		||||
  } 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_Damage(void* mValue){
 | 
			
		||||
  static int bits;
 | 
			
		||||
  switch (mState++) {
 | 
			
		||||
  case 1: 
 | 
			
		||||
	ignore = false;
 | 
			
		||||
    damage = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 2:
 | 
			
		||||
    bits = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 3:
 | 
			
		||||
	  if (!mPlayer || !damage || bits){
 | 
			
		||||
	    ignore = true;
 | 
			
		||||
		break;
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
    edict_t *enemy;
 | 
			
		||||
	enemy = mPlayer->pEdict->v.dmg_inflictor;
 | 
			
		||||
    
 | 
			
		||||
	if ( FNullEnt( enemy ) ){
 | 
			
		||||
		ignore = true;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	aim = 0;
 | 
			
		||||
	weapon = 0;
 | 
			
		||||
	pAttacker = NULL;
 | 
			
		||||
 | 
			
		||||
	if (enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT) ) {
 | 
			
		||||
		pAttacker = GET_PLAYER_POINTER(enemy);
 | 
			
		||||
		aim = pAttacker->aiming;
 | 
			
		||||
		weapon = pAttacker->current;
 | 
			
		||||
		pAttacker->saveHit( mPlayer , weapon , damage, aim);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
    if( g_grenades.find(enemy , &pAttacker , &weapon ) )
 | 
			
		||||
        pAttacker->saveHit( mPlayer , weapon , damage, aim );
 | 
			
		||||
	else if ( strcmp("grenade",STRING(enemy->v.classname))==0 ) // ? more checks ?
 | 
			
		||||
			weapon = CSW_C4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_Damage_End(void* mValue){
 | 
			
		||||
	if ( ignore )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( !pAttacker ) pAttacker = mPlayer;
 | 
			
		||||
		TA = 0;
 | 
			
		||||
	if ( (mPlayer->teamId == pAttacker->teamId) && (mPlayer != pAttacker) )
 | 
			
		||||
		TA = 1;
 | 
			
		||||
 | 
			
		||||
	MF_ExecuteForward( iFDamage, static_cast<cell>(pAttacker->index) , static_cast<cell>(mPlayer->index) ,
 | 
			
		||||
		static_cast<cell>(damage), static_cast<cell>(weapon), static_cast<cell>(aim), static_cast<cell>(TA) );
 | 
			
		||||
	 
 | 
			
		||||
	if ( !mPlayer->IsAlive() ){
 | 
			
		||||
		if ( weapon != CSW_C4 )
 | 
			
		||||
			pAttacker->saveKill(mPlayer,weapon,( aim == 1 ) ? 1:0 ,TA);
 | 
			
		||||
		MF_ExecuteForward( iFDeath, static_cast<cell>(pAttacker->index), static_cast<cell>(mPlayer->index),
 | 
			
		||||
			static_cast<cell>(weapon), static_cast<cell>(aim), static_cast<cell>(TA) );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon(void* mValue){
 | 
			
		||||
  static int iState;
 | 
			
		||||
  static int iId;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0: 
 | 
			
		||||
    iState = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
    if (!iState) break; 
 | 
			
		||||
    iId = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 2:
 | 
			
		||||
	if (!mPlayer || !iState ) break;
 | 
			
		||||
    int iClip = *(int*)mValue;
 | 
			
		||||
    if ((iClip > -1) && (iClip < mPlayer->weapons[iId].clip)) 
 | 
			
		||||
      mPlayer->saveShot(iId);
 | 
			
		||||
    mPlayer->weapons[iId].clip = iClip;
 | 
			
		||||
	mPlayer->current = iId;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_AmmoX(void* mValue){
 | 
			
		||||
  static int iAmmo;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0:
 | 
			
		||||
    iAmmo = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
	if (!mPlayer ) break;
 | 
			
		||||
    for(int i = 1; i < MAX_WEAPONS ; ++i) 
 | 
			
		||||
      if (iAmmo == weaponData[i].ammoSlot)
 | 
			
		||||
        mPlayer->weapons[i].ammo = *(int*)mValue;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_AmmoPickup(void* mValue){
 | 
			
		||||
  static int iSlot;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0:
 | 
			
		||||
    iSlot = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
	if (!mPlayer ) break;
 | 
			
		||||
    for(int i = 1; i < MAX_WEAPONS ; ++i)
 | 
			
		||||
      if (weaponData[i].ammoSlot == iSlot)
 | 
			
		||||
        mPlayer->weapons[i].ammo += *(int*)mValue;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_ScoreInfo(void* mValue){
 | 
			
		||||
  static int index;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0:
 | 
			
		||||
    index = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 4:
 | 
			
		||||
	if ( index > 0 && index <= gpGlobals->maxClients )
 | 
			
		||||
		GET_PLAYER_POINTER_I( index )->teamId = *(int*)mValue;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_SendAudio(void* mValue){
 | 
			
		||||
	static const char* szText;
 | 
			
		||||
	if ( mState == 1 ){
 | 
			
		||||
		szText = (const char*)mValue;
 | 
			
		||||
		if ( !mPlayer && szText[7]=='B' ) {
 | 
			
		||||
			if ( szText[11]=='P' && g_Planter ){
 | 
			
		||||
				GET_PLAYER_POINTER_I(g_Planter)->saveBPlant();
 | 
			
		||||
				g_bombAnnounce = BOMB_PLANTED;
 | 
			
		||||
			}
 | 
			
		||||
			else if ( szText[11]=='D' && g_Defuser ){
 | 
			
		||||
				GET_PLAYER_POINTER_I(g_Defuser)->saveBDefused();
 | 
			
		||||
				g_bombAnnounce = BOMB_DEFUSED;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mState++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_TextMsg(void* mValue){
 | 
			
		||||
	static const char* szText;
 | 
			
		||||
	if ( !mPlayer && mState==1 ){
 | 
			
		||||
		szText = (const char*)mValue;
 | 
			
		||||
		if ( szText[1]=='T' && szText[8]=='B' && g_Planter ){
 | 
			
		||||
			GET_PLAYER_POINTER_I(g_Planter)->saveBExplode();
 | 
			
		||||
			g_bombAnnounce = BOMB_EXPLODE;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mState++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_BarTime(void* mValue){
 | 
			
		||||
	int iTime = *(int*)mValue;
 | 
			
		||||
	if ( !iTime || !mPlayer->IsAlive() ) return;
 | 
			
		||||
	if ( iTime == 3 ){
 | 
			
		||||
		g_Planter = mPlayerIndex;
 | 
			
		||||
		g_bombAnnounce = BOMB_PLANTING;
 | 
			
		||||
		g_Defuser = 0;
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		mPlayer->saveBDefusing();
 | 
			
		||||
		g_Defuser = mPlayerIndex;
 | 
			
		||||
		g_bombAnnounce = BOMB_DEFUSING;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										101
									
								
								modules/cstrike/csx/version.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								modules/cstrike/csx/version.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#include <winresrc.h>
 | 
			
		||||
#include <moduleconfig.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 AMXX_VERSION_FILE
 | 
			
		||||
 PRODUCTVERSION AMXX_VERSION_FILE
 | 
			
		||||
 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", "AMX Mod X"
 | 
			
		||||
            VALUE "FileDescription", "AMX Mod X"
 | 
			
		||||
            VALUE "FileVersion", AMXX_VERSION
 | 
			
		||||
            VALUE "InternalName", MODULE_LIBRARY
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright (c) AMX Mod X Dev Team"
 | 
			
		||||
            VALUE "OriginalFilename", MODULE_LIBRARY "_amxx.dll"
 | 
			
		||||
            VALUE "ProductName", MODULE_NAME
 | 
			
		||||
            VALUE "ProductVersion", AMXX_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								modules/dod/dodfun/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								modules/dod/dodfun/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'dodfun')
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'NBase.cpp',
 | 
			
		||||
  'CMisc.cpp',
 | 
			
		||||
  'NPD.cpp',
 | 
			
		||||
  'Utils.cpp',
 | 
			
		||||
  'usermsg.cpp',
 | 
			
		||||
  'moduleconfig.cpp',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										136
									
								
								modules/dod/dodfun/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								modules/dod/dodfun/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
void CPlayer::Disconnect(){
 | 
			
		||||
	ingame = staminaSet = fuseSet = bot = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::PutInServer(){
 | 
			
		||||
	ingame = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Connect(){
 | 
			
		||||
	bot = IsBot();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CPlayer::Init( int pi, edict_t* pe )
 | 
			
		||||
{
 | 
			
		||||
    pEdict = pe;
 | 
			
		||||
    index = pi;
 | 
			
		||||
	current = 0;
 | 
			
		||||
	ingame =  staminaSet = fuseSet = bot = false;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::killPlayer(){
 | 
			
		||||
	pEdict->v.dmg_inflictor = NULL;
 | 
			
		||||
	pEdict->v.health = 0;
 | 
			
		||||
	pEdict->v.deadflag = DEAD_RESPAWNABLE;
 | 
			
		||||
	pEdict->v.weaponmodel = 0;
 | 
			
		||||
	pEdict->v.weapons = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::setTeamName( const char *szName ){
 | 
			
		||||
	
 | 
			
		||||
	for (int i=0;i<16;i++){
 | 
			
		||||
		*( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i ) = szName[i];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::getTeamName(char * szName ){
 | 
			
		||||
	for (int i=0;i<16;i++){
 | 
			
		||||
		szName[i] = *( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CObjective::SetKeyValue( int index, char *keyname, char *value ){
 | 
			
		||||
 | 
			
		||||
	KeyValueData pkvd;
 | 
			
		||||
 | 
			
		||||
	pkvd.szClassName = (char *)STRING(obj[index].pEdict->v.classname);
 | 
			
		||||
	pkvd.szKeyName = keyname; // type
 | 
			
		||||
	pkvd.szValue = value;
 | 
			
		||||
	pkvd.fHandled = false;
 | 
			
		||||
 | 
			
		||||
	MDLL_KeyValue(obj[index].pEdict, &pkvd);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CObjective::InitObj(int dest , edict_t* ed ){
 | 
			
		||||
	MESSAGE_BEGIN( dest, gmsgInitObj,0,ed );
 | 
			
		||||
	WRITE_BYTE( count );
 | 
			
		||||
	for ( int i=0; i<count; i++ ){
 | 
			
		||||
		WRITE_SHORT(ENTINDEX(obj[i].pEdict));
 | 
			
		||||
		WRITE_BYTE( obj[i].index );
 | 
			
		||||
		WRITE_BYTE( obj[i].owner );
 | 
			
		||||
		WRITE_BYTE( obj[i].visible );
 | 
			
		||||
		WRITE_BYTE( obj[i].icon_neutral );
 | 
			
		||||
		WRITE_BYTE( obj[i].icon_allies );
 | 
			
		||||
		WRITE_BYTE( obj[i].icon_axis );
 | 
			
		||||
		WRITE_COORD( obj[i].origin_x );
 | 
			
		||||
		WRITE_COORD( obj[i].origin_y );
 | 
			
		||||
	}
 | 
			
		||||
	MESSAGE_END();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CObjective::SetObj(int index){
 | 
			
		||||
	MESSAGE_BEGIN(MSG_ALL,gmsgSetObj);
 | 
			
		||||
	WRITE_BYTE(obj[index].index);
 | 
			
		||||
	WRITE_BYTE(obj[index].owner);
 | 
			
		||||
	WRITE_BYTE(0);
 | 
			
		||||
	MESSAGE_END();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CObjective::UpdateOwner(int index, int team){
 | 
			
		||||
	obj[index].owner = team;
 | 
			
		||||
	GET_CP_PD(obj[index].pEdict).owner = team;
 | 
			
		||||
 | 
			
		||||
	switch ( team ){
 | 
			
		||||
		case 0:
 | 
			
		||||
			obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_neutral );
 | 
			
		||||
			obj[index].pEdict->v.body =  GET_CP_PD(obj[index].pEdict).model_body_neutral;
 | 
			
		||||
		break;
 | 
			
		||||
		case 1:
 | 
			
		||||
			obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_allies );
 | 
			
		||||
			obj[index].pEdict->v.body = GET_CP_PD(obj[index].pEdict).model_body_allies;
 | 
			
		||||
		break;
 | 
			
		||||
		case 2:
 | 
			
		||||
			obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_axis );
 | 
			
		||||
			obj[index].pEdict->v.body = GET_CP_PD(obj[index].pEdict).model_body_axis;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	mObjects.SetObj(index);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CObjective::Sort(){
 | 
			
		||||
	objinfo_t temp;
 | 
			
		||||
	for	(int j=0;j<count-1;j++ ){
 | 
			
		||||
		for	(int i=0;i<count-1;i++ ){
 | 
			
		||||
			if ( obj[i].index > obj[i+1].index ){
 | 
			
		||||
				temp = obj[i+1];
 | 
			
		||||
				obj[i+1] = obj[i];
 | 
			
		||||
				obj[i] = temp;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										342
									
								
								modules/dod/dodfun/CMisc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										342
									
								
								modules/dod/dodfun/CMisc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,342 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CMISC_H
 | 
			
		||||
#define CMISC_H
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
#define LINUXOFFSET		0
 | 
			
		||||
#else
 | 
			
		||||
#define LINUXOFFSET		5
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DODFUN_VERSION "1.0.2"
 | 
			
		||||
 | 
			
		||||
// DoD Player
 | 
			
		||||
#define STEAM_PDOFFSET_WDEPLOY		229	 + LINUXOFFSET // weapon deploy
 | 
			
		||||
 | 
			
		||||
#define STEAM_PDOFFSET_TEAMNAME		1396 + (LINUXOFFSET * sizeof(char)) // team name 349 char[16]
 | 
			
		||||
#define STEAM_PDOFFSET_CLASS		366  + LINUXOFFSET // player class
 | 
			
		||||
#define STEAM_PDOFFSET_RCLASS		367  + LINUXOFFSET // random class  
 | 
			
		||||
 | 
			
		||||
#define STEAM_PDOFFSET_SCORE		475  + LINUXOFFSET // score
 | 
			
		||||
#define STEAM_PDOFFSET_DEATHS		476  + LINUXOFFSET // deaths
 | 
			
		||||
 | 
			
		||||
// DoD Control Point
 | 
			
		||||
struct pd_dcp {
 | 
			
		||||
	int iunk_0;
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
	int iunk_1; // windows only
 | 
			
		||||
#endif
 | 
			
		||||
	int iunk_2;	// pointer edict_t*
 | 
			
		||||
	int iunk_3;
 | 
			
		||||
 | 
			
		||||
	float origin_x;
 | 
			
		||||
	float origin_y;
 | 
			
		||||
	float origin_z; // 6
 | 
			
		||||
 | 
			
		||||
	float mins_x;
 | 
			
		||||
	float mins_y;
 | 
			
		||||
	float mins_z;
 | 
			
		||||
 | 
			
		||||
	float maxs_x;
 | 
			
		||||
	float maxs_y;
 | 
			
		||||
	float maxs_z;
 | 
			
		||||
	
 | 
			
		||||
	float angles_x;
 | 
			
		||||
	float angles_y;
 | 
			
		||||
	float angles_z; // 15
 | 
			
		||||
 | 
			
		||||
	// 19 - spawnflags ?
 | 
			
		||||
	// 20-int , always 1
 | 
			
		||||
	int unknown_block1[19];
 | 
			
		||||
	int iunk_35; // pointer entvars_t*
 | 
			
		||||
	int iunk_36; // pointer entvars_t*
 | 
			
		||||
	int unknown_block2[52];
 | 
			
		||||
	int iunk_89; // pointer entvars_t*
 | 
			
		||||
#if defined (__linux__) || defined (__APPLE__)
 | 
			
		||||
	int iunk_extra1;
 | 
			
		||||
	int iunk_extra2;
 | 
			
		||||
	int iunk_extra3;
 | 
			
		||||
	int iunk_extra4;
 | 
			
		||||
#endif
 | 
			
		||||
	int owner; // 90
 | 
			
		||||
	int iunk_91;
 | 
			
		||||
	int iunk_92;
 | 
			
		||||
	int default_owner; // 93
 | 
			
		||||
	int flag_id;
 | 
			
		||||
	int pointvalue;
 | 
			
		||||
	int points_for_player;
 | 
			
		||||
	int points_for_team;
 | 
			
		||||
	float funk_98; // always 1.0
 | 
			
		||||
	float cap_time;
 | 
			
		||||
	char cap_message[256]; // 100 MAP_PLAYER_CAP , %p player , %n pointname , %t teamname
 | 
			
		||||
	int iunk_164;
 | 
			
		||||
	int iunk_165;
 | 
			
		||||
	char target_allies[256]; //  166
 | 
			
		||||
	char target_axis[256]; // 230
 | 
			
		||||
	char target_reset[256];
 | 
			
		||||
	char model_allies[256]; // 358
 | 
			
		||||
	char model_axis[256]; // 422
 | 
			
		||||
	char model_neutral[256]; // 486
 | 
			
		||||
	int model_body_allies; // 550
 | 
			
		||||
	int model_body_axis;
 | 
			
		||||
	int model_body_neutral;
 | 
			
		||||
	int icon_allies;
 | 
			
		||||
	int icon_axis;
 | 
			
		||||
	int icon_neutral;
 | 
			
		||||
	int can_touch; // flags : 1-allies can't, 256-axis can't , default 0 (all can)
 | 
			
		||||
	int iunk_557;
 | 
			
		||||
	int iunk_558; //  ? -2 , 4
 | 
			
		||||
	char pointgroup[256];
 | 
			
		||||
	int iunk_623;
 | 
			
		||||
	int iunk_624;
 | 
			
		||||
	int iunk_625;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define GET_CP_PD( x ) (*(pd_dcp*)x->pvPrivateData)
 | 
			
		||||
 | 
			
		||||
// DoD Capture Area
 | 
			
		||||
struct pd_dca {
 | 
			
		||||
	int iunk_0;
 | 
			
		||||
	int iunk_1;
 | 
			
		||||
	int iunk_2;
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
	int iunk_3; // if def windows
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	float origin_x;
 | 
			
		||||
	float origin_y;
 | 
			
		||||
	float origin_z; // 6
 | 
			
		||||
 | 
			
		||||
	float mins_x;
 | 
			
		||||
	float mins_y;
 | 
			
		||||
	float mins_z;
 | 
			
		||||
 | 
			
		||||
	float maxs_x;
 | 
			
		||||
	float maxs_y;
 | 
			
		||||
	float maxs_z;
 | 
			
		||||
	
 | 
			
		||||
	float angles_x;
 | 
			
		||||
	float angles_y;
 | 
			
		||||
	float angles_z; // 15
 | 
			
		||||
	
 | 
			
		||||
	// 16-135
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
	int unknown_block_16[111];
 | 
			
		||||
#else
 | 
			
		||||
	int unknown_block_16[116]; // linux +5 more
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	int time_to_cap; // 127
 | 
			
		||||
	int iunk_128;
 | 
			
		||||
	int allies_numcap; // 129
 | 
			
		||||
	int axis_numcap; // 130
 | 
			
		||||
 | 
			
		||||
	int iunk_131;
 | 
			
		||||
	int iunk_132;
 | 
			
		||||
 | 
			
		||||
	int can_cap; // 133 flags : 1-allies can , 256-axis can, default 257 (all can)
 | 
			
		||||
 | 
			
		||||
	int iunk_134;
 | 
			
		||||
	int iunk_135;
 | 
			
		||||
 | 
			
		||||
	char allies_endcap[256]; // 136
 | 
			
		||||
	char axis_endcap[256]; // 200
 | 
			
		||||
	char allies_startcap[256]; // 264
 | 
			
		||||
	char axis_startcap[256]; // 328
 | 
			
		||||
	char allies_breakcap[256]; // 392
 | 
			
		||||
	char axis_breakcap[256]; // 456
 | 
			
		||||
	int iunk_520; // -1 allies area, blowable (charlie) ??
 | 
			
		||||
	char hud_sprite[256]; // 521 
 | 
			
		||||
 | 
			
		||||
	// 585 - 649
 | 
			
		||||
	int unknown_block_585[65];
 | 
			
		||||
 | 
			
		||||
	char object_group[256]; // 650
 | 
			
		||||
	int iunk_714;
 | 
			
		||||
	int iunk_715;
 | 
			
		||||
	int iunk_716;
 | 
			
		||||
	// 717 size
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define GET_CA_PD( x ) (*(pd_dca*)x->pvPrivateData)
 | 
			
		||||
 | 
			
		||||
/* DoD weapons */
 | 
			
		||||
enum {
 | 
			
		||||
	DODW_AMERKNIFE = 1,
 | 
			
		||||
	DODW_GERKNIFE,
 | 
			
		||||
	DODW_COLT,
 | 
			
		||||
	DODW_LUGER,
 | 
			
		||||
	DODW_GARAND,
 | 
			
		||||
	DODW_SCOPED_KAR,
 | 
			
		||||
	DODW_THOMPSON,
 | 
			
		||||
	DODW_STG44,
 | 
			
		||||
	DODW_SPRINGFIELD,
 | 
			
		||||
	DODW_KAR,
 | 
			
		||||
	DODW_BAR,
 | 
			
		||||
	DODW_MP40,
 | 
			
		||||
	DODW_HANDGRENADE,
 | 
			
		||||
	DODW_STICKGRENADE,
 | 
			
		||||
	DODW_STICKGRENADE_EX,
 | 
			
		||||
	DODW_HANDGRENADE_EX,
 | 
			
		||||
	DODW_MG42,
 | 
			
		||||
	DODW_30_CAL,
 | 
			
		||||
	DODW_SPADE,
 | 
			
		||||
	DODW_M1_CARBINE,
 | 
			
		||||
	DODW_MG34,
 | 
			
		||||
	DODW_GREASEGUN,
 | 
			
		||||
	DODW_FG42,
 | 
			
		||||
	DODW_K43,
 | 
			
		||||
	DODW_ENFIELD,
 | 
			
		||||
	DODW_STEN,
 | 
			
		||||
	DODW_BREN,
 | 
			
		||||
	DODW_WEBLEY,
 | 
			
		||||
	DODW_BAZOOKA,
 | 
			
		||||
	DODW_PANZERSCHRECK,
 | 
			
		||||
	DODW_PIAT,
 | 
			
		||||
	DODW_SCOPED_FG42,
 | 
			
		||||
	DODW_FOLDING_CARBINE,
 | 
			
		||||
	DODW_KAR_BAYONET,
 | 
			
		||||
	DODW_SCOPED_ENFIELD,
 | 
			
		||||
	DODW_MILLS_BOMB,
 | 
			
		||||
	DODW_BRITKNIFE,
 | 
			
		||||
	DODW_GARAND_BUTT,
 | 
			
		||||
	DODW_ENFIELD_BAYONET,
 | 
			
		||||
	DODW_MORTAR,
 | 
			
		||||
	DODW_K43_BUTT,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class CPlayer {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	edict_t* pEdict;
 | 
			
		||||
	int index;
 | 
			
		||||
	int current;
 | 
			
		||||
 | 
			
		||||
	int staminaMin;
 | 
			
		||||
	int staminaMax;
 | 
			
		||||
	bool staminaSet;
 | 
			
		||||
 | 
			
		||||
	bool fuseSet;
 | 
			
		||||
	int fuseType; // 1<<0 - for new , 1<<1 - for cought
 | 
			
		||||
	float nadeFuse;
 | 
			
		||||
 | 
			
		||||
	bool ingame;
 | 
			
		||||
	bool bot;
 | 
			
		||||
 | 
			
		||||
	void Init(  int pi, edict_t* pe );
 | 
			
		||||
	void Connect();
 | 
			
		||||
	void PutInServer();
 | 
			
		||||
	void Disconnect();
 | 
			
		||||
	void killPlayer();
 | 
			
		||||
	void setTeamName( const char *szName );
 | 
			
		||||
	void getTeamName( char *szName );
 | 
			
		||||
 | 
			
		||||
	inline bool IsBot(){
 | 
			
		||||
		const char* auth= (*g_engfuncs.pfnGetPlayerAuthId)(pEdict);
 | 
			
		||||
		return ( auth && !strcmp( auth , "BOT" ) );
 | 
			
		||||
	}
 | 
			
		||||
	inline bool IsAlive(){
 | 
			
		||||
		return ((pEdict->v.deadflag==DEAD_NO)&&(pEdict->v.health>0));
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct objinfo_s {
 | 
			
		||||
	// initobj
 | 
			
		||||
	edict_t* pEdict;
 | 
			
		||||
	int index;
 | 
			
		||||
	int default_owner;
 | 
			
		||||
	int visible;
 | 
			
		||||
	int icon_neutral;
 | 
			
		||||
	int icon_allies;
 | 
			
		||||
	int icon_axis;
 | 
			
		||||
	float origin_x;
 | 
			
		||||
	float origin_y;
 | 
			
		||||
	// setobj
 | 
			
		||||
	int owner;
 | 
			
		||||
	// control area
 | 
			
		||||
	int areaflags; // 0-need check , 1-no area , 2-found area 
 | 
			
		||||
	edict_t* pAreaEdict;
 | 
			
		||||
} objinfo_t;
 | 
			
		||||
 | 
			
		||||
class CObjective {
 | 
			
		||||
public:
 | 
			
		||||
	int count;
 | 
			
		||||
	objinfo_t obj[12];
 | 
			
		||||
	inline void Clear() { count = 0; memset(obj,0,sizeof(objinfo_s)); }
 | 
			
		||||
	void SetKeyValue( int index, char *keyname, char *value );
 | 
			
		||||
 | 
			
		||||
	void InitObj(int dest = MSG_ALL , edict_t* ed = NULL);
 | 
			
		||||
	void SetObj(int index);
 | 
			
		||||
	
 | 
			
		||||
	void UpdateOwner( int index, int team );
 | 
			
		||||
	void Sort();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum CP_VALUE {
 | 
			
		||||
	CP_edict = 1,
 | 
			
		||||
	CP_area,
 | 
			
		||||
	CP_index,
 | 
			
		||||
	CP_owner,
 | 
			
		||||
	CP_default_owner,
 | 
			
		||||
	CP_visible,
 | 
			
		||||
	CP_icon_neutral,
 | 
			
		||||
	CP_icon_allies,
 | 
			
		||||
	CP_icon_axis,
 | 
			
		||||
	CP_origin_x,
 | 
			
		||||
	CP_origin_y,
 | 
			
		||||
	
 | 
			
		||||
	CP_can_touch,
 | 
			
		||||
	CP_pointvalue,
 | 
			
		||||
 | 
			
		||||
	CP_points_for_cap,
 | 
			
		||||
	CP_team_points,
 | 
			
		||||
 | 
			
		||||
	CP_model_body_neutral,
 | 
			
		||||
	CP_model_body_allies,
 | 
			
		||||
	CP_model_body_axis,
 | 
			
		||||
 | 
			
		||||
	// strings
 | 
			
		||||
	CP_name,
 | 
			
		||||
	CP_cap_message,
 | 
			
		||||
	CP_reset_capsound,
 | 
			
		||||
	CP_allies_capsound,
 | 
			
		||||
	CP_axis_capsound,
 | 
			
		||||
	CP_targetname,
 | 
			
		||||
 | 
			
		||||
	CP_model_neutral,
 | 
			
		||||
	CP_model_allies,
 | 
			
		||||
	CP_model_axis,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum CA_VALUE {
 | 
			
		||||
	CA_edict = 1,
 | 
			
		||||
	CA_allies_numcap,
 | 
			
		||||
	CA_axis_numcap,
 | 
			
		||||
	CA_timetocap,
 | 
			
		||||
	CA_can_cap,
 | 
			
		||||
 | 
			
		||||
	// strings
 | 
			
		||||
	CA_target,
 | 
			
		||||
	CA_sprite,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // CMISC_H
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								modules/dod/dodfun/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								modules/dod/dodfun/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../../metamod/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = dodfun
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp NBase.cpp CMisc.cpp NPD.cpp Utils.cpp usermsg.cpp moduleconfig.cpp
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										83
									
								
								modules/dod/dodfun/NBase.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								modules/dod/dodfun/NBase.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_player_stamina(AMX *amx, cell *params){ // id,(re)set,min,max
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index)
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( params[2] ){ // 0 set , 1 reset
 | 
			
		||||
		pPlayer->staminaMin = 0;
 | 
			
		||||
		pPlayer->staminaMax = 100;
 | 
			
		||||
		pPlayer->staminaSet = false;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int min = params[3];
 | 
			
		||||
	if ( min<0 || min>100 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid minimum stamina %d", min);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	int max = params[4];
 | 
			
		||||
	if ( max<min || max>100 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid maximum stamina %d", max);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		pPlayer->staminaMin = min;
 | 
			
		||||
		pPlayer->staminaMax = max;
 | 
			
		||||
		pPlayer->staminaSet = true;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL nade_set_fuse(AMX *amx, cell *params){ // id,(re)set,time,type
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( params[2] ){ // 0 set , 1 reset
 | 
			
		||||
		pPlayer->fuseSet = false;
 | 
			
		||||
		pPlayer->nadeFuse = 0;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	float fFuse = *(float *)((void *)¶ms[3]);
 | 
			
		||||
	if ( fFuse<0.1 || fFuse>20.0 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid fuse %f", fFuse);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int iFType = params[4];
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		pPlayer->nadeFuse = fFuse;
 | 
			
		||||
		pPlayer->fuseSet = true;
 | 
			
		||||
		pPlayer->fuseType = iFType;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO base_Natives[] = {
 | 
			
		||||
  { "dod_set_stamina", set_player_stamina },
 | 
			
		||||
  { "dod_set_fuse", nade_set_fuse },
 | 
			
		||||
 | 
			
		||||
  ///*******************
 | 
			
		||||
  { NULL, NULL } 
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										775
									
								
								modules/dod/dodfun/NPD.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										775
									
								
								modules/dod/dodfun/NPD.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,775 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_class(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index)
 | 
			
		||||
	int iClass = params[2];
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( !pPlayer->ingame )
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (iClass){
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_CLASS) = iClass;
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS) = 0; // disable random class
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS) = 1; // set random class
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_team(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	int iTeam = params[2];
 | 
			
		||||
	if ( iTeam<1 || iTeam>3 ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid team id %d", iTeam);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		
 | 
			
		||||
		pPlayer->killPlayer();
 | 
			
		||||
		pPlayer->pEdict->v.team = iTeam;
 | 
			
		||||
 | 
			
		||||
		switch( iTeam ){
 | 
			
		||||
		case 1:	pPlayer->setTeamName("Allies");
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:	pPlayer->setTeamName("Axis");
 | 
			
		||||
			break;
 | 
			
		||||
		case 3: pPlayer->setTeamName("Spectators");
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS) = 1; // set random class
 | 
			
		||||
 | 
			
		||||
		if ( params[3] ){
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL,gmsgPTeam);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_BYTE( iTeam );
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_nextclass(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		return *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_CLASS);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_randomclass(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		return *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_deaths(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		return *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_DEATHS );
 | 
			
		||||
	}
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_deaths(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_DEATHS ) = params[2];
 | 
			
		||||
		if ( params[3]){
 | 
			
		||||
			//ScoreShort message
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL,gmsgScoreShort);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_SHORT( *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_SCORE ) );
 | 
			
		||||
			WRITE_SHORT((int)pPlayer->pEdict->v.frags);
 | 
			
		||||
			WRITE_SHORT(params[2]);
 | 
			
		||||
			WRITE_BYTE(1);
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_score(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_SCORE ) = params[2];
 | 
			
		||||
 | 
			
		||||
		if ( params[3]){
 | 
			
		||||
		/*
 | 
			
		||||
			//ScoreShort message
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL,gmsgScoreShort);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_SHORT(params[2]);
 | 
			
		||||
			WRITE_SHORT((int)pPlayer->pEdict->v.frags);
 | 
			
		||||
			WRITE_SHORT( *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_DEATHS ) );
 | 
			
		||||
			WRITE_BYTE(1);
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		*/
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL, gmsgObjScore);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_SHORT(params[2]);
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_frags(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		pPlayer->pEdict->v.frags = (float)params[2];
 | 
			
		||||
 | 
			
		||||
		if ( params[3]){
 | 
			
		||||
		/*
 | 
			
		||||
			//ScoreShort message
 | 
			
		||||
			
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL,gmsgScoreShort);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_SHORT( *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_SCORE ) );
 | 
			
		||||
			WRITE_SHORT((int)pPlayer->pEdict->v.frags);
 | 
			
		||||
			WRITE_SHORT( *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_DEATHS ) );
 | 
			
		||||
			WRITE_BYTE(1);
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		*/
 | 
			
		||||
			MESSAGE_BEGIN(MSG_ALL, gmsgFrags);
 | 
			
		||||
			WRITE_BYTE(pPlayer->index);
 | 
			
		||||
			WRITE_SHORT((int)pPlayer->pEdict->v.frags);
 | 
			
		||||
			MESSAGE_END();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_frags(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
		return (int)pPlayer->pEdict->v.frags;
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_teamname(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		
 | 
			
		||||
		int iLen;
 | 
			
		||||
		char *szTeamName = MF_GetAmxString(amx, params[1], 0, &iLen);
 | 
			
		||||
 | 
			
		||||
		pPlayer->setTeamName(szTeamName);
 | 
			
		||||
	
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_teamname(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		
 | 
			
		||||
		char szTeamName[16];
 | 
			
		||||
		pPlayer->getTeamName(szTeamName);
 | 
			
		||||
 | 
			
		||||
		return MF_SetAmxString(amx, params[2],szTeamName,params[3]);
 | 
			
		||||
	
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_weapon_deployed(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		if ( *( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_WDEPLOY) == 1 )
 | 
			
		||||
			return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL set_user_ammo(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( !pPlayer->ingame )
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	switch(params[2]){
 | 
			
		||||
 | 
			
		||||
		//53,284,316
 | 
			
		||||
		case DODW_COLT:
 | 
			
		||||
		case DODW_LUGER:
 | 
			
		||||
		case DODW_WEBLEY:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 53+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 284+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 316+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//54,283,315
 | 
			
		||||
		case DODW_GARAND:
 | 
			
		||||
		case DODW_KAR:
 | 
			
		||||
		case DODW_SCOPED_KAR:
 | 
			
		||||
		case DODW_ENFIELD:
 | 
			
		||||
		case DODW_SCOPED_ENFIELD:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 54+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 283+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 315+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//57,286,318
 | 
			
		||||
		case DODW_STG44:
 | 
			
		||||
		case DODW_BAR:
 | 
			
		||||
		case DODW_FG42:
 | 
			
		||||
		case DODW_BREN:
 | 
			
		||||
		case DODW_SCOPED_FG42:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 57+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 286+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 318+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//56,281,313
 | 
			
		||||
		case DODW_THOMPSON:
 | 
			
		||||
		case DODW_GREASEGUN:
 | 
			
		||||
		case DODW_MP40:
 | 
			
		||||
		case DODW_STEN:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 56+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 281+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 313+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//58,282,314
 | 
			
		||||
		case DODW_K43:
 | 
			
		||||
		case DODW_M1_CARBINE:
 | 
			
		||||
		case DODW_MG34:
 | 
			
		||||
		case DODW_FOLDING_CARBINE:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 58+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 282+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 314+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//55,285,317
 | 
			
		||||
		case DODW_SPRINGFIELD:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 55+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 285+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 317+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//59,289,321
 | 
			
		||||
		case DODW_HANDGRENADE:
 | 
			
		||||
		case DODW_MILLS_BOMB:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 59+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 289+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 321+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//61,291,323
 | 
			
		||||
		case DODW_STICKGRENADE:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 61+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 291+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 323+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//287,319
 | 
			
		||||
		case DODW_MG42:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 287+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 319+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//288,320
 | 
			
		||||
		case DODW_30_CAL:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 288+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 320+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//49,293,325
 | 
			
		||||
		case DODW_BAZOOKA:
 | 
			
		||||
		case DODW_PANZERSCHRECK:
 | 
			
		||||
		case DODW_PIAT:
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 49+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 293+LINUXOFFSET ) = params[3];
 | 
			
		||||
			*( (int*)pPlayer->pEdict->pvPrivateData + 325+LINUXOFFSET ) = params[3];
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_ammo(AMX *amx, cell *params){
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if ( !pPlayer->ingame )
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	switch(params[2]){
 | 
			
		||||
		
 | 
			
		||||
		//53,284,316
 | 
			
		||||
		case DODW_COLT:
 | 
			
		||||
		case DODW_LUGER:
 | 
			
		||||
		case DODW_WEBLEY:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 53+LINUXOFFSET );
 | 
			
		||||
			break;		
 | 
			
		||||
 | 
			
		||||
		//49,293,325
 | 
			
		||||
		case DODW_BAZOOKA:
 | 
			
		||||
		case DODW_PANZERSCHRECK:
 | 
			
		||||
		case DODW_PIAT:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 49+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//54,283,315
 | 
			
		||||
		case DODW_GARAND:
 | 
			
		||||
		case DODW_KAR:
 | 
			
		||||
		case DODW_SCOPED_KAR:
 | 
			
		||||
		case DODW_ENFIELD:
 | 
			
		||||
		case DODW_SCOPED_ENFIELD:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 54+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//55,285,317
 | 
			
		||||
		case DODW_SPRINGFIELD:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 55+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//56,281,313
 | 
			
		||||
		case DODW_THOMPSON:
 | 
			
		||||
		case DODW_GREASEGUN:
 | 
			
		||||
		case DODW_MP40:
 | 
			
		||||
		case DODW_STEN:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 56+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//57,286,318
 | 
			
		||||
		case DODW_STG44:
 | 
			
		||||
		case DODW_BAR:
 | 
			
		||||
		case DODW_FG42:
 | 
			
		||||
		case DODW_BREN:
 | 
			
		||||
		case DODW_SCOPED_FG42:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 57+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//58,282,314
 | 
			
		||||
		case DODW_K43:
 | 
			
		||||
		case DODW_M1_CARBINE:
 | 
			
		||||
		case DODW_MG34:
 | 
			
		||||
		case DODW_FOLDING_CARBINE:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 58+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//59,289,321
 | 
			
		||||
		case DODW_HANDGRENADE:
 | 
			
		||||
		case DODW_MILLS_BOMB:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 59+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//61,291,323
 | 
			
		||||
		case DODW_STICKGRENADE:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 61+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//287,319
 | 
			
		||||
		case DODW_MG42:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 287+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		//288,320
 | 
			
		||||
		case DODW_30_CAL:
 | 
			
		||||
			return *( (int*)pPlayer->pEdict->pvPrivateData + 288+LINUXOFFSET );
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL objective_set_data(AMX *amx, cell *params){ // index, key, ivalue , szvalue
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	if ( index < 0  || index > mObjects.count ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	edict_t *pent = mObjects.obj[index].pEdict;
 | 
			
		||||
 | 
			
		||||
	int iLen;
 | 
			
		||||
	int ivalue = params[3];
 | 
			
		||||
	char *szValue = MF_GetAmxString(amx, params[4], 0, &iLen);
 | 
			
		||||
	
 | 
			
		||||
	CP_VALUE key = (CP_VALUE)params[2];
 | 
			
		||||
	switch ( key ){
 | 
			
		||||
		case CP_owner :
 | 
			
		||||
			mObjects.UpdateOwner( index, ivalue );
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_default_owner :
 | 
			
		||||
			mObjects.obj[index].default_owner = ivalue;
 | 
			
		||||
			GET_CP_PD(pent).default_owner = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_visible :
 | 
			
		||||
			mObjects.obj[index].visible = ivalue;
 | 
			
		||||
			mObjects.obj[index].pEdict->v.spawnflags = 1 - ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_icon_neutral :
 | 
			
		||||
			mObjects.obj[index].icon_neutral = ivalue;
 | 
			
		||||
			GET_CP_PD(pent).icon_neutral = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_icon_allies :
 | 
			
		||||
			mObjects.obj[index].icon_allies = ivalue;
 | 
			
		||||
			GET_CP_PD(pent).icon_allies = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_icon_axis :
 | 
			
		||||
			mObjects.obj[index].icon_axis = ivalue;
 | 
			
		||||
			GET_CP_PD(pent).icon_axis = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_origin_x :
 | 
			
		||||
			mObjects.obj[index].origin_x = (float)ivalue;
 | 
			
		||||
			// reinit
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_origin_y :
 | 
			
		||||
			mObjects.obj[index].origin_y = (float)ivalue;
 | 
			
		||||
			// reinit
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_can_touch :
 | 
			
		||||
			GET_CP_PD(pent).can_touch = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_pointvalue :
 | 
			
		||||
			GET_CP_PD(pent).pointvalue = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		
 | 
			
		||||
		case CP_points_for_cap :
 | 
			
		||||
			GET_CP_PD(pent).points_for_player = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_team_points :
 | 
			
		||||
			GET_CP_PD(pent).points_for_team = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		case CP_model_body_neutral :
 | 
			
		||||
			GET_CP_PD(pent).model_body_neutral = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_body_allies :
 | 
			
		||||
			GET_CP_PD(pent).model_body_axis = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_body_axis :
 | 
			
		||||
			GET_CP_PD(pent).model_body_axis = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		// Strings
 | 
			
		||||
 | 
			
		||||
		case CP_name :
 | 
			
		||||
			mObjects.obj[index].pEdict->v.netname = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_cap_message :
 | 
			
		||||
			strcpy(GET_CP_PD(mObjects.obj[index].pEdict).cap_message,szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_reset_capsound :
 | 
			
		||||
			mObjects.obj[index].pEdict->v.noise = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_allies_capsound :
 | 
			
		||||
			mObjects.obj[index].pEdict->v.noise1 = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_axis_capsound :
 | 
			
		||||
			mObjects.obj[index].pEdict->v.noise2 = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_targetname :
 | 
			
		||||
			mObjects.obj[index].pEdict->v.targetname = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		case CP_model_neutral :
 | 
			
		||||
			strcpy(GET_CP_PD(pent).model_neutral,szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_allies :
 | 
			
		||||
			strcpy(GET_CP_PD(pent).model_allies,szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_axis :
 | 
			
		||||
			strcpy(GET_CP_PD(pent).model_axis,szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL objective_get_data(AMX *amx, cell *params){ // flagid, key, ivalue szvalue[],len=0
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	if ( index < 0  || index > mObjects.count ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	int len = params[4];
 | 
			
		||||
	CP_VALUE key = (CP_VALUE)params[2];
 | 
			
		||||
	
 | 
			
		||||
	switch ( key ){
 | 
			
		||||
		case CP_edict :
 | 
			
		||||
			return ENTINDEX(mObjects.obj[index].pEdict);
 | 
			
		||||
		case CP_area :
 | 
			
		||||
			GET_CAPTURE_AREA(index)
 | 
			
		||||
			return mObjects.obj[index].areaflags == 2 ? ENTINDEX(mObjects.obj[index].pAreaEdict) : 0;
 | 
			
		||||
		case CP_owner :
 | 
			
		||||
			return mObjects.obj[index].owner;
 | 
			
		||||
		case CP_default_owner :
 | 
			
		||||
			return mObjects.obj[index].default_owner;
 | 
			
		||||
		case CP_visible :
 | 
			
		||||
			return mObjects.obj[index].visible;
 | 
			
		||||
		case CP_icon_neutral :
 | 
			
		||||
			return mObjects.obj[index].icon_neutral;
 | 
			
		||||
		case CP_icon_allies :
 | 
			
		||||
			return mObjects.obj[index].icon_allies;
 | 
			
		||||
		case CP_icon_axis :
 | 
			
		||||
			return mObjects.obj[index].icon_axis;
 | 
			
		||||
		case CP_origin_x :
 | 
			
		||||
			return (int)mObjects.obj[index].origin_x;
 | 
			
		||||
		case CP_origin_y :
 | 
			
		||||
			return (int)mObjects.obj[index].origin_y;
 | 
			
		||||
		case CP_can_touch :
 | 
			
		||||
			return GET_CP_PD( mObjects.obj[index].pEdict ).can_touch;
 | 
			
		||||
		case CP_pointvalue :
 | 
			
		||||
			return GET_CP_PD( mObjects.obj[index].pEdict ).pointvalue;
 | 
			
		||||
 | 
			
		||||
		case CP_points_for_cap :
 | 
			
		||||
			return GET_CP_PD( mObjects.obj[index].pEdict ).points_for_player;
 | 
			
		||||
		case CP_team_points :
 | 
			
		||||
			return GET_CP_PD( mObjects.obj[index].pEdict ).points_for_team;
 | 
			
		||||
 | 
			
		||||
		case CP_model_body_neutral :
 | 
			
		||||
			return GET_CP_PD(mObjects.obj[index].pEdict).model_body_neutral;
 | 
			
		||||
		case CP_model_body_allies :
 | 
			
		||||
			return GET_CP_PD(mObjects.obj[index].pEdict).model_body_allies;
 | 
			
		||||
		case CP_model_body_axis :
 | 
			
		||||
			return GET_CP_PD(mObjects.obj[index].pEdict).model_body_axis;
 | 
			
		||||
 | 
			
		||||
		// strings
 | 
			
		||||
 | 
			
		||||
		case CP_name :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.netname),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_cap_message :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).cap_message,len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_reset_capsound :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_allies_capsound :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise1),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_axis_capsound :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise2),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_targetname :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.targetname),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_neutral :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_neutral,len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_allies :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_allies,len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CP_model_axis :
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_axis,len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL objectives_get_num(AMX *amx, cell *params){
 | 
			
		||||
	return mObjects.count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL objectives_reinit(AMX *amx, cell *params){ // index
 | 
			
		||||
	int player = params[1];
 | 
			
		||||
	if ( player < 0  || player > gpGlobals->maxClients ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", player);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	mObjects.InitObj( player == 0 ? MSG_ALL:MSG_ONE, player == 0 ? NULL:INDEXENT(player) ); 
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL area_get_data(AMX *amx, cell *params){ // flagid, key, ivalue szvalue[],len=0
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	if ( index < 0  || index > mObjects.count ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	int len = params[4];
 | 
			
		||||
	CA_VALUE key = (CA_VALUE)params[2];
 | 
			
		||||
 | 
			
		||||
	GET_CAPTURE_AREA(index)
 | 
			
		||||
 | 
			
		||||
	switch ( key ){
 | 
			
		||||
		case CA_edict :
 | 
			
		||||
			return ENTINDEX(mObjects.obj[index].pAreaEdict);
 | 
			
		||||
		case CA_allies_numcap :
 | 
			
		||||
			return GET_CA_PD( mObjects.obj[index].pAreaEdict ).allies_numcap;
 | 
			
		||||
		case CA_axis_numcap :
 | 
			
		||||
			return GET_CA_PD( mObjects.obj[index].pAreaEdict ).axis_numcap;
 | 
			
		||||
		case CA_timetocap :
 | 
			
		||||
			return GET_CA_PD( mObjects.obj[index].pAreaEdict ).time_to_cap;
 | 
			
		||||
		case CA_can_cap :
 | 
			
		||||
			return GET_CA_PD( mObjects.obj[index].pAreaEdict ).can_cap;
 | 
			
		||||
 | 
			
		||||
		// strings
 | 
			
		||||
		case CA_target:
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pAreaEdict->v.target),len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CA_sprite:
 | 
			
		||||
			if ( len ){
 | 
			
		||||
				MF_SetAmxString(amx,params[3],GET_CA_PD(mObjects.obj[index].pAreaEdict).hud_sprite,len);
 | 
			
		||||
			}
 | 
			
		||||
			return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL area_set_data(AMX *amx, cell *params){ // index, key, ivalue , szvalue
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	if ( index < 0  || index > mObjects.count ){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	int iLen;
 | 
			
		||||
	int ivalue = params[3];
 | 
			
		||||
	char *szValue = MF_GetAmxString(amx, params[4], 0, &iLen);
 | 
			
		||||
	
 | 
			
		||||
	CA_VALUE key = (CA_VALUE)params[2];
 | 
			
		||||
 | 
			
		||||
	GET_CAPTURE_AREA(index)
 | 
			
		||||
 | 
			
		||||
	switch ( key ){
 | 
			
		||||
		case CA_allies_numcap :
 | 
			
		||||
			GET_CA_PD( mObjects.obj[index].pAreaEdict ).allies_numcap = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CA_axis_numcap :
 | 
			
		||||
			GET_CA_PD( mObjects.obj[index].pAreaEdict ).axis_numcap = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CA_timetocap :
 | 
			
		||||
			GET_CA_PD( mObjects.obj[index].pAreaEdict ).time_to_cap = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CA_can_cap :
 | 
			
		||||
			GET_CA_PD( mObjects.obj[index].pAreaEdict ).can_cap = ivalue;
 | 
			
		||||
			return 1;
 | 
			
		||||
		// strings
 | 
			
		||||
		case CA_target:
 | 
			
		||||
			mObjects.obj[index].pAreaEdict->v.target = MAKE_STRING(szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
		case CA_sprite:
 | 
			
		||||
			strcpy(GET_CA_PD( mObjects.obj[index].pAreaEdict ).hud_sprite,szValue);
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO pd_Natives[] = {
 | 
			
		||||
  { "dod_set_user_class", set_user_class },
 | 
			
		||||
  { "dod_set_user_team", set_user_team },
 | 
			
		||||
  { "dod_get_next_class", get_user_nextclass },
 | 
			
		||||
  { "dod_is_randomclass", is_randomclass },
 | 
			
		||||
  { "dod_get_pl_deaths", get_user_deaths },
 | 
			
		||||
  { "dod_set_pl_deaths", set_user_deaths },
 | 
			
		||||
  { "dod_set_user_score", set_user_score },
 | 
			
		||||
  { "dod_set_pl_teamname", set_user_teamname },
 | 
			
		||||
  { "dod_get_pl_teamname", get_user_teamname },
 | 
			
		||||
  { "dod_is_deployed", is_weapon_deployed },
 | 
			
		||||
 | 
			
		||||
  { "dod_get_user_ammo", get_user_ammo },
 | 
			
		||||
  { "dod_set_user_ammo", set_user_ammo },
 | 
			
		||||
 | 
			
		||||
  { "dod_get_user_kills", get_user_frags },
 | 
			
		||||
  { "dod_set_user_kills", set_user_frags },
 | 
			
		||||
 | 
			
		||||
  { "objective_set_data", objective_set_data },
 | 
			
		||||
  { "objective_get_data", objective_get_data },
 | 
			
		||||
  { "objectives_get_num", objectives_get_num },
 | 
			
		||||
  { "objectives_reinit", objectives_reinit },
 | 
			
		||||
  { "area_set_data", area_set_data },
 | 
			
		||||
  { "area_get_data", area_get_data },
 | 
			
		||||
  ///*******************
 | 
			
		||||
  { NULL, NULL } 
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										31
									
								
								modules/dod/dodfun/Utils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								modules/dod/dodfun/Utils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityByString(edict_t *pentStart, const char *szKeyword, const char *szValue)
 | 
			
		||||
{
 | 
			
		||||
	edict_t *pentEntity;
 | 
			
		||||
	pentEntity=FIND_ENTITY_BY_STRING(pentStart, szKeyword, szValue);
 | 
			
		||||
	if(!FNullEnt(pentEntity))
 | 
			
		||||
		return pentEntity;
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName)
 | 
			
		||||
{
 | 
			
		||||
	return FindEntityByString(pentStart, "classname", szName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										114
									
								
								modules/dod/dodfun/dodfun.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								modules/dod/dodfun/dodfun.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef DODFUN_H
 | 
			
		||||
#define DODFUN_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
 | 
			
		||||
#define GET_PLAYER_POINTER(e)   (&players[ENTINDEX(e)])
 | 
			
		||||
#define GET_PLAYER_POINTER_I(i) (&players[i])
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO base_Natives[];
 | 
			
		||||
extern AMX_NATIVE_INFO pd_Natives[];
 | 
			
		||||
 | 
			
		||||
extern int mState;
 | 
			
		||||
extern int mDest;
 | 
			
		||||
extern int mPlayerIndex;
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon(void*);
 | 
			
		||||
void Client_InitObj(void*);
 | 
			
		||||
void Client_SetObj(void*);
 | 
			
		||||
 | 
			
		||||
typedef void (*funEventCall)(void*);
 | 
			
		||||
 | 
			
		||||
extern int gmsgScoreShort;
 | 
			
		||||
extern int gmsgPTeam;
 | 
			
		||||
extern int gmsgInitObj;
 | 
			
		||||
extern int gmsgSetObj;
 | 
			
		||||
extern int gmsgFrags;
 | 
			
		||||
extern int gmsgObjScore;
 | 
			
		||||
 | 
			
		||||
extern int iFGrenade;
 | 
			
		||||
extern int iFRocket;
 | 
			
		||||
extern int iFInitCP;
 | 
			
		||||
 | 
			
		||||
extern CPlayer players[33];
 | 
			
		||||
extern CPlayer* mPlayer;
 | 
			
		||||
 | 
			
		||||
extern CObjective mObjects;
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName);
 | 
			
		||||
edict_t *FindEntityByString(edict_t *pentStart, const char *szKeyword, const char *szValue);
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define GET_CAPTURE_AREA(x) \
 | 
			
		||||
	if ( mObjects.obj[x].areaflags == 0 ){\
 | 
			
		||||
		mObjects.obj[x].areaflags = 1;\
 | 
			
		||||
		while ( (mObjects.obj[x].pAreaEdict = FindEntityByString(mObjects.obj[x].pAreaEdict,"target",STRING(mObjects.obj[x].pEdict->v.targetname))) )\
 | 
			
		||||
			if ( strcmp( STRING(mObjects.obj[x].pAreaEdict->v.classname),"dod_capture_area" )==0){\
 | 
			
		||||
				mObjects.obj[x].areaflags = 2;\
 | 
			
		||||
				break;\
 | 
			
		||||
			}\
 | 
			
		||||
	}\
 | 
			
		||||
	if ( mObjects.obj[x].areaflags == 1 )\
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
#endif // DODFUN_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										299
									
								
								modules/dod/dodfun/moduleconfig.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								modules/dod/dodfun/moduleconfig.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,299 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
funEventCall modMsgsEnd[MAX_REG_MSGS];
 | 
			
		||||
funEventCall modMsgs[MAX_REG_MSGS];
 | 
			
		||||
void (*function)(void*);
 | 
			
		||||
void (*endfunction)(void*);
 | 
			
		||||
CPlayer* mPlayer;
 | 
			
		||||
CPlayer* gPlayerRocket;
 | 
			
		||||
CPlayer players[33];
 | 
			
		||||
 | 
			
		||||
CObjective mObjects;
 | 
			
		||||
 | 
			
		||||
int mState;
 | 
			
		||||
int mDest;
 | 
			
		||||
int mPlayerIndex;
 | 
			
		||||
 | 
			
		||||
int iFGrenade;
 | 
			
		||||
int iFRocket;
 | 
			
		||||
int iFInitCP;
 | 
			
		||||
 | 
			
		||||
int gmsgCurWeapon;
 | 
			
		||||
int gmsgScoreShort;
 | 
			
		||||
int gmsgPTeam;
 | 
			
		||||
int gmsgInitObj;
 | 
			
		||||
int gmsgSetObj;
 | 
			
		||||
int gmsgFrags;
 | 
			
		||||
int gmsgObjScore;
 | 
			
		||||
 | 
			
		||||
struct sUserMsg {
 | 
			
		||||
	const char* name;
 | 
			
		||||
	int* id;
 | 
			
		||||
	funEventCall func;
 | 
			
		||||
	bool endmsg;
 | 
			
		||||
} g_user_msg[] = {
 | 
			
		||||
	{ "InitObj",&gmsgInitObj,Client_InitObj,false},
 | 
			
		||||
	{ "CurWeapon",&gmsgCurWeapon,Client_CurWeapon,false },
 | 
			
		||||
	{ "ScoreShort",&gmsgScoreShort,NULL,false },
 | 
			
		||||
	{ "PTeam",&gmsgPTeam,NULL,false },
 | 
			
		||||
	{ "SetObj",&gmsgSetObj,Client_SetObj,false },
 | 
			
		||||
	{ "Frags",&gmsgFrags,NULL,false },
 | 
			
		||||
	{ "ObjScore", &gmsgObjScore, NULL, false },
 | 
			
		||||
 | 
			
		||||
	{ 0,0,0,false }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int RegUserMsg_Post(const char *pszName, int iSize){
 | 
			
		||||
	for (int i = 0; g_user_msg[ i ].name; ++i ){
 | 
			
		||||
		if ( !*g_user_msg[i].id && strcmp( g_user_msg[ i ].name , pszName  ) == 0 ){
 | 
			
		||||
			int id = META_RESULT_ORIG_RET( int );
 | 
			
		||||
 | 
			
		||||
			*g_user_msg[ i ].id = id;
 | 
			
		||||
		
 | 
			
		||||
			if ( g_user_msg[ i ].endmsg )
 | 
			
		||||
				modMsgsEnd[ id  ] = g_user_msg[ i ].func;
 | 
			
		||||
			else
 | 
			
		||||
				modMsgs[ id  ] = g_user_msg[ i ].func;
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerActivate_Post( edict_t *pEdictList, int edictCount, int clientMax ){
 | 
			
		||||
 | 
			
		||||
	for( int i = 1; i <= gpGlobals->maxClients; ++i )
 | 
			
		||||
		GET_PLAYER_POINTER_I(i)->Init( i , pEdictList + i );
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerDeactivate() {
 | 
			
		||||
	for(int i = 1;i<=gpGlobals->maxClients; ++i){
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
 | 
			
		||||
		if (pPlayer->ingame)
 | 
			
		||||
			pPlayer->Disconnect();
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL ClientConnect_Post( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ]  ){
 | 
			
		||||
	GET_PLAYER_POINTER(pEntity)->Connect();
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientDisconnect( edict_t *pEntity ) {
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	if (pPlayer->ingame) 
 | 
			
		||||
		pPlayer->Disconnect();
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientPutInServer_Post( edict_t *pEntity ) {
 | 
			
		||||
	GET_PLAYER_POINTER(pEntity)->PutInServer();
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientUserInfoChanged_Post( edict_t *pEntity, char *infobuffer ) {
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
 | 
			
		||||
	if ( !pPlayer->ingame && pPlayer->IsBot() ) {
 | 
			
		||||
		pPlayer->PutInServer();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) {
 | 
			
		||||
	if (ed){
 | 
			
		||||
		mPlayerIndex = ENTINDEX(ed);
 | 
			
		||||
		mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
 | 
			
		||||
	} else {
 | 
			
		||||
		mPlayerIndex = 0;
 | 
			
		||||
		mPlayer = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	mState = 0;
 | 
			
		||||
	mDest = msg_dest;
 | 
			
		||||
	if ( msg_type < 0 || msg_type >= MAX_REG_MSGS )
 | 
			
		||||
		msg_type = 0;
 | 
			
		||||
	function=modMsgs[msg_type];
 | 
			
		||||
	endfunction=modMsgsEnd[msg_type];
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageEnd_Post(void) {
 | 
			
		||||
	if (endfunction) (*endfunction)(NULL);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteByte_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteChar_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteShort_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteLong_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteAngle_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteCoord_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteString_Post(const char *sz) {
 | 
			
		||||
	if (function) (*function)((void *)sz);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteEntity_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlayerPreThink_Post(edict_t *pEntity) 
 | 
			
		||||
{
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
 | 
			
		||||
	// Stamina
 | 
			
		||||
	if(pPlayer->staminaSet) 
 | 
			
		||||
	{
 | 
			
		||||
		if ( (int)pEntity->v.fuser4 > pPlayer->staminaMax)
 | 
			
		||||
			pEntity->v.fuser4 = (float)pPlayer->staminaMax;
 | 
			
		||||
 | 
			
		||||
		else if ( (int)pEntity->v.fuser4 < pPlayer->staminaMin)
 | 
			
		||||
			pEntity->v.fuser4 = (float)pPlayer->staminaMin;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pPlayer->current == DODW_BAZOOKA || pPlayer->current == DODW_PANZERSCHRECK || pPlayer->current == DODW_PIAT)
 | 
			
		||||
	{
 | 
			
		||||
		if(!(pPlayer->pEdict->v.oldbuttons&IN_ATTACK) && (pPlayer->pEdict->v.button&IN_ATTACK))
 | 
			
		||||
			gPlayerRocket = GET_PLAYER_POINTER(pEntity);	// Store player ID for rocket_shoot() event
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetModel_Post(edict_t *e, const char *m) {
 | 
			
		||||
	
 | 
			
		||||
	/* For a grenade, this function gets called twice. The first time, all models are w_grenade.mdl and dmgtime is 0.
 | 
			
		||||
	*    The second time, the proper model and dmgtime are set.
 | 
			
		||||
	*    gPlayerRocket is set in PlayerPreThink_Post for all rockets.
 | 
			
		||||
	*    So, if neither is set, the model isn't being set on a grenade or rocket and we just return.
 | 
			
		||||
	*    TNT bundles/satchel charges also initially use w_grenade.mdl, so we can't efficiently filter based on model.
 | 
			
		||||
	*/
 | 
			
		||||
	if (!gPlayerRocket && !e->v.dmgtime) {
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int w_id = 0;
 | 
			
		||||
 | 
			
		||||
	if(e->v.owner && e->v.dmgtime) {	// owner was always set in my testing, but better safe than sorry
 | 
			
		||||
 | 
			
		||||
		CPlayer* pPlayer = GET_PLAYER_POINTER(e->v.owner);
 | 
			
		||||
		// current weapon is never set to DODW_MILLS_BOMB; only DODW_HANDGRENADE/DODW_STICKGRENADE
 | 
			
		||||
		bool newNade = (pPlayer->current == DODW_HANDGRENADE || pPlayer->current == DODW_STICKGRENADE) ? true : false;
 | 
			
		||||
 | 
			
		||||
		if(m[9]=='g' && m[10]=='r' && m[12]=='n') {			// w_grenade.mdl (Allies)
 | 
			
		||||
			w_id = newNade ? DODW_HANDGRENADE : DODW_HANDGRENADE_EX;
 | 
			
		||||
		} else if(m[9]=='s' && m[10]=='t' && m[11]=='i') {		// w_stick.mdl (Axis)
 | 
			
		||||
			w_id = newNade ? DODW_STICKGRENADE : DODW_STICKGRENADE_EX;
 | 
			
		||||
		} else if(m[9]=='m' && m[10]=='i') {				// w_mills.mdl (British)
 | 
			
		||||
			w_id = newNade ? DODW_MILLS_BOMB : DODW_HANDGRENADE_EX;
 | 
			
		||||
			// A mills_ex weapon should be added in dlls/dod/dodfun/CMisc.h, plugins/include/dodconst.inc,
 | 
			
		||||
			//   and probably dlls/dod/dodx/NBase.cpp. The DODMAX_WEAPONS define should be updated too.
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(!w_id) {	// Fail-safe, just in case..
 | 
			
		||||
			RETURN_META(MRES_IGNORED);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		MF_ExecuteForward(iFGrenade, pPlayer->index, ENTINDEX(e), w_id);	// Call grenade_throw() event
 | 
			
		||||
 | 
			
		||||
		/* fuse start */
 | 
			
		||||
		if(pPlayer->fuseSet) {
 | 
			
		||||
 | 
			
		||||
			if(newNade) {
 | 
			
		||||
 | 
			
		||||
				if(pPlayer->fuseType & 1<<0) {
 | 
			
		||||
					e->v.dmgtime += pPlayer->nadeFuse - 5.0;
 | 
			
		||||
				}
 | 
			
		||||
			} else { 
 | 
			
		||||
 | 
			
		||||
				float fExp = e->v.dmgtime - gpGlobals->time;
 | 
			
		||||
				e->v.dmgtime += pPlayer->nadeFuse - fExp;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		/* fuse end */
 | 
			
		||||
 | 
			
		||||
	} else if(gPlayerRocket && strstr(m, "rocket")) {
 | 
			
		||||
 | 
			
		||||
		// Since "rocket" exists in the model name, there are only 3 possibilities.
 | 
			
		||||
		if(m[9]=='b') {			// w_bazooka_rocket.mdl (Allies)
 | 
			
		||||
			w_id = DODW_BAZOOKA;
 | 
			
		||||
		} else if(m[10]=='s') {	// w_pschreck_rocket.mdl (Axis)
 | 
			
		||||
			w_id = DODW_PANZERSCHRECK;
 | 
			
		||||
		} else if(m[10]=='i') {	// w_piat_rocket.mdl (British)
 | 
			
		||||
			w_id = DODW_PIAT;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		MF_ExecuteForward(iFRocket, gPlayerRocket->index, ENTINDEX(e), w_id);	// Call rocket_shoot() event
 | 
			
		||||
 | 
			
		||||
		gPlayerRocket = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AmxxCheckGame(const char *game)
 | 
			
		||||
{
 | 
			
		||||
	if (strcasecmp(game, "dod") == 0)
 | 
			
		||||
		return AMXX_GAME_OK;
 | 
			
		||||
 | 
			
		||||
	return AMXX_GAME_BAD;
 | 
			
		||||
}
 | 
			
		||||
void OnAmxxAttach() 
 | 
			
		||||
{
 | 
			
		||||
	MF_AddNatives( base_Natives );
 | 
			
		||||
	MF_AddNatives( pd_Natives );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnPluginsLoaded()
 | 
			
		||||
{
 | 
			
		||||
	iFGrenade = MF_RegisterForward("grenade_throw",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*Grenade Ent*/,FP_CELL/*Weapon ID*/,FP_DONE);
 | 
			
		||||
	iFRocket = MF_RegisterForward("rocket_shoot",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*Rocket Ent*/,FP_CELL/*Weapon ID*/,FP_DONE);
 | 
			
		||||
	iFInitCP = MF_RegisterForward("controlpoints_init",ET_IGNORE,FP_DONE);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										512
									
								
								modules/dod/dodfun/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										512
									
								
								modules/dod/dodfun/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,512 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
#include <amxmodx_version.h>
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "DoD Fun"
 | 
			
		||||
#define MODULE_VERSION AMXX_VERSION
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org"
 | 
			
		||||
#define MODULE_LOGTAG "DODFUN"
 | 
			
		||||
#define MODULE_LIBRARY "dodfun"
 | 
			
		||||
#define MODULE_LIBCLASS ""
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * AMXX Init functions
 | 
			
		||||
 * Also consider using FN_META_*
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** AMXX query */
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
 | 
			
		||||
/** AMXX Check Game - module API is NOT available here.
 | 
			
		||||
 * Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
 | 
			
		||||
 * syntax: int AmxxCheckGame(const char *game)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_CHECKGAME AmxxCheckGame
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** AMXX attach
 | 
			
		||||
 * Do native functions init here (MF_AddNatives)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
 | 
			
		||||
/** AMXX Detach (unload) */
 | 
			
		||||
//#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
 | 
			
		||||
/** All plugins loaded
 | 
			
		||||
 * Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/** All plugins are about to be unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADING OnPluginsUnloading
 | 
			
		||||
 | 
			
		||||
/** All plugins are now unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADED OnPluginsUnloaded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
//#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta detach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				DispatchSpawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				DispatchThink				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				DispatchUse					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				DispatchTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			DispatchKeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
// #define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
#define FN_ClientDisconnect				ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
// #define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
// #define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
#define FN_ServerDeactivate				ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
// #define FN_PlayerPreThink			PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
// #define FN_PlayerPostThink			PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
// #define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
#define FN_ClientConnect_Post					ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
// #define FN_ClientKill_Post					ClientKill_Post
 | 
			
		||||
#define FN_ClientPutInServer_Post				ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
#define FN_ClientUserInfoChanged_Post			ClientUserInfoChanged_Post
 | 
			
		||||
#define FN_ServerActivate_Post					ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
#define FN_PlayerPreThink_Post					PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
// #define FN_StartFrame_Post					StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
// #define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
// #define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
// #define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
// #define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
// #define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
// #define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
#define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
// #define FN_EmitSound_Post					EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
// #define FN_TraceLine_Post					TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post					TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
#define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
#define FN_MessageEnd_Post						MessageEnd_Post
 | 
			
		||||
#define FN_WriteByte_Post						WriteByte_Post
 | 
			
		||||
#define FN_WriteChar_Post						WriteChar_Post
 | 
			
		||||
#define FN_WriteShort_Post						WriteShort_Post
 | 
			
		||||
#define FN_WriteLong_Post						WriteLong_Post
 | 
			
		||||
#define FN_WriteAngle_Post						WriteAngle_Post
 | 
			
		||||
#define FN_WriteCoord_Post						WriteCoord_Post
 | 
			
		||||
#define FN_WriteString_Post						WriteString_Post
 | 
			
		||||
#define FN_WriteEntity_Post						WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
#define FN_RegUserMsg_Post						RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/dod/dodfun/msvc12/dodfun.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/dod/dodfun/msvc12/dodfun.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dodfun", "dodfun.vcxproj", "{2742C607-9FAB-47B3-8A13-E999BC6FDB54}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{2742C607-9FAB-47B3-8A13-E999BC6FDB54}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{2742C607-9FAB-47B3-8A13-E999BC6FDB54}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{2742C607-9FAB-47B3-8A13-E999BC6FDB54}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{2742C607-9FAB-47B3-8A13-E999BC6FDB54}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										163
									
								
								modules/dod/dodfun/msvc12/dodfun.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								modules/dod/dodfun/msvc12/dodfun.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{2742C607-9FAB-47B3-8A13-E999BC6FDB54}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>dodfun</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Release/dodfun.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>dodfun_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <StructMemberAlignment>4Bytes</StructMemberAlignment>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Release/dodfun.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Release/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <ProgramDatabaseFile>.\Release/dodfun_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Release/dodfun_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Debug/dodfun.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;dodfun_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Debug/dodfun.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Debug/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>.\Debug/dodfun_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Debug/dodfun_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp" />
 | 
			
		||||
    <ClCompile Include="..\moduleconfig.cpp" />
 | 
			
		||||
    <ClCompile Include="..\NBase.cpp" />
 | 
			
		||||
    <ClCompile Include="..\NPD.cpp" />
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp" />
 | 
			
		||||
    <ClCompile Include="..\Utils.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h" />
 | 
			
		||||
    <ClInclude Include="..\dodfun.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodconst.inc" />
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodfun.inc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										67
									
								
								modules/dod/dodfun/msvc12/dodfun.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								modules/dod/dodfun/msvc12/dodfun.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{e351fd6e-ca57-4372-a9b0-70a72d603662}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{da2b311a-37af-4d33-8a3f-533cb2f6d93a}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK">
 | 
			
		||||
      <UniqueIdentifier>{6d2ba41b-56a1-4768-913b-93f937195ac7}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK\SDK Base">
 | 
			
		||||
      <UniqueIdentifier>{6752d054-aa0a-4fed-a669-d40513172473}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Pawn Includes">
 | 
			
		||||
      <UniqueIdentifier>{2deb0e1f-fb04-4734-ae4a-39fa3d4eab86}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\moduleconfig.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\NBase.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\NPD.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\Utils.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\dodfun.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>Module SDK</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodconst.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodfun.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										94
									
								
								modules/dod/dodfun/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								modules/dod/dodfun/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DoD Fun Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodfun.h"
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon(void* mValue){
 | 
			
		||||
  static int iState;
 | 
			
		||||
  static int iId;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0: 
 | 
			
		||||
    iState = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
    if (!iState) break; 
 | 
			
		||||
    iId = *(int*)mValue;
 | 
			
		||||
	mPlayer->current = iId;
 | 
			
		||||
	break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_InitObj(void* mValue){
 | 
			
		||||
  static int num;
 | 
			
		||||
 | 
			
		||||
  if ( mDest != MSG_ALL )
 | 
			
		||||
	  return;
 | 
			
		||||
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0:
 | 
			
		||||
	  num = 0;
 | 
			
		||||
	  mObjects.count = *(int*)mValue;
 | 
			
		||||
	  if ( mObjects.count == 0 )
 | 
			
		||||
		  mObjects.Clear();
 | 
			
		||||
	  break;
 | 
			
		||||
  case 1:
 | 
			
		||||
	  mObjects.obj[num].pEdict = INDEXENT(*(int*)mValue);
 | 
			
		||||
	  break;
 | 
			
		||||
  case 2:
 | 
			
		||||
	  mObjects.obj[num].index = *(int*)mValue;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 3:
 | 
			
		||||
	  mObjects.obj[num].default_owner = *(int*)mValue;
 | 
			
		||||
	  mObjects.obj[num].owner = mObjects.obj[num].default_owner;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 4:
 | 
			
		||||
	  mObjects.obj[num].visible = *(int*)mValue; 
 | 
			
		||||
	  break;
 | 
			
		||||
  case 5:
 | 
			
		||||
	  mObjects.obj[num].icon_neutral = *(int*)mValue;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 6:
 | 
			
		||||
	  mObjects.obj[num].icon_allies = *(int*)mValue;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 7:
 | 
			
		||||
	  mObjects.obj[num].icon_axis = *(int*)mValue;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 8:
 | 
			
		||||
	  mObjects.obj[num].origin_x = *(float*)mValue;
 | 
			
		||||
	  break;
 | 
			
		||||
  case 9: // 8,9 coord
 | 
			
		||||
	  mObjects.obj[num].origin_y = *(float*)mValue;
 | 
			
		||||
	  mState = 1;
 | 
			
		||||
	  num++;
 | 
			
		||||
	  if ( num == mObjects.count ){
 | 
			
		||||
		  mObjects.Sort();
 | 
			
		||||
		  MF_ExecuteForward( iFInitCP );
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
	  break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_SetObj(void* mValue){
 | 
			
		||||
  static int id;
 | 
			
		||||
  switch (mState++){
 | 
			
		||||
  case 0:
 | 
			
		||||
	  id = *(int*)mValue; 
 | 
			
		||||
     break;
 | 
			
		||||
  case 1:
 | 
			
		||||
	  mObjects.obj[id].owner = *(int*)mValue;
 | 
			
		||||
	break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										101
									
								
								modules/dod/dodfun/version.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								modules/dod/dodfun/version.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#include <winresrc.h>
 | 
			
		||||
#include <moduleconfig.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 AMXX_VERSION_FILE
 | 
			
		||||
 PRODUCTVERSION AMXX_VERSION_FILE
 | 
			
		||||
 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", "AMX Mod X"
 | 
			
		||||
            VALUE "FileDescription", "AMX Mod X"
 | 
			
		||||
            VALUE "FileVersion", AMXX_VERSION
 | 
			
		||||
            VALUE "InternalName", MODULE_LIBRARY
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright (c) AMX Mod X Dev Team"
 | 
			
		||||
            VALUE "OriginalFilename", MODULE_LIBRARY "_amxx.dll"
 | 
			
		||||
            VALUE "ProductName", MODULE_NAME
 | 
			
		||||
            VALUE "ProductVersion", AMXX_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/dod/dodx/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/dod/dodx/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'dodx')
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'CRank.cpp',
 | 
			
		||||
  'CMisc.cpp',
 | 
			
		||||
  'NBase.cpp',
 | 
			
		||||
  'NRank.cpp',
 | 
			
		||||
  'usermsg.cpp',
 | 
			
		||||
  'Utils.cpp',
 | 
			
		||||
  'moduleconfig.cpp',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
  
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										527
									
								
								modules/dod/dodx/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										527
									
								
								modules/dod/dodx/CMisc.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,527 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
void CPlayer::Disconnect()
 | 
			
		||||
{
 | 
			
		||||
	ingame = false;
 | 
			
		||||
	bot = false;
 | 
			
		||||
	savedScore = 0;
 | 
			
		||||
 | 
			
		||||
	oldteam = 0;
 | 
			
		||||
	oldclass = 0;
 | 
			
		||||
	oldprone = 0;
 | 
			
		||||
	oldstamina = 0.0f;
 | 
			
		||||
 | 
			
		||||
	// Model Stuff
 | 
			
		||||
	sModel.is_model_set = false;
 | 
			
		||||
	sModel.body_num = 0;
 | 
			
		||||
 | 
			
		||||
	// Object stuff
 | 
			
		||||
	object.pEdict = NULL;
 | 
			
		||||
	object.type = 0;
 | 
			
		||||
	object.carrying = false;
 | 
			
		||||
	object.do_forward = false;
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) || !isModuleActive() ) // ignore if he is bot and bots rank is disabled or module is paused
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	rank->updatePosition( &life );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::PutInServer(){
 | 
			
		||||
 | 
			
		||||
	ingame = true;
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	restartStats();
 | 
			
		||||
 | 
			
		||||
	const char* unique;
 | 
			
		||||
	const char* name = STRING(pEdict->v.netname);
 | 
			
		||||
	bool isip = false;
 | 
			
		||||
	switch((int)dodstats_rank->value) {
 | 
			
		||||
	case 1:
 | 
			
		||||
		if ( (unique = GETPLAYERAUTHID(pEdict)) == 0 )
 | 
			
		||||
			unique = name; // failed to get authid
 | 
			
		||||
		break;
 | 
			
		||||
	case 2:
 | 
			
		||||
		unique = ip;
 | 
			
		||||
		isip = true;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		unique = name;
 | 
			
		||||
	}
 | 
			
		||||
	if ( ( rank = g_rank.findEntryInRank( unique , name , isip) ) == 0 )
 | 
			
		||||
		ingame = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Connect(const char* nn,const char* ippp ){
 | 
			
		||||
	bot = IsBot();
 | 
			
		||||
	strcpy(ip,ippp);
 | 
			
		||||
	// Strip the port from the ip
 | 
			
		||||
	for (size_t i = 0; i < sizeof(ip); i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (ip[i] == ':')
 | 
			
		||||
		{
 | 
			
		||||
			ip[i] = '\0';
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::restartStats(bool all)
 | 
			
		||||
{
 | 
			
		||||
	if ( all )
 | 
			
		||||
	{
 | 
			
		||||
		memset(weapons,0,sizeof(weapons));
 | 
			
		||||
		memset(&round,0,sizeof(round));
 | 
			
		||||
		memset(weaponsRnd,0,sizeof(weaponsRnd));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	memset(weaponsLife,0,sizeof(weaponsLife));   //DEC-Weapon (Round) stats
 | 
			
		||||
	memset(attackers,0,sizeof(attackers));
 | 
			
		||||
	memset(victims,0,sizeof(victims));
 | 
			
		||||
	memset(&life,0,sizeof(life));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Init( int pi, edict_t* pe )
 | 
			
		||||
{
 | 
			
		||||
	aiming = 0;
 | 
			
		||||
	wpnModel = 0;
 | 
			
		||||
	wpnscount = 0;
 | 
			
		||||
	lastScore = 0;
 | 
			
		||||
	sendScore = 0;
 | 
			
		||||
	clearRound = 0.0f;
 | 
			
		||||
    pEdict = pe;
 | 
			
		||||
    index = pi;
 | 
			
		||||
	current = 0;
 | 
			
		||||
	clearStats = 0.0f;
 | 
			
		||||
	ingame =  false;
 | 
			
		||||
	bot = false;
 | 
			
		||||
	savedScore = 0;
 | 
			
		||||
	oldteam = 0;
 | 
			
		||||
	oldclass = 0;
 | 
			
		||||
	oldprone = 0;
 | 
			
		||||
	oldstamina = 0.0f;
 | 
			
		||||
 | 
			
		||||
	do_scoped = false;
 | 
			
		||||
	is_scoped = false;
 | 
			
		||||
	
 | 
			
		||||
	// Model Stuff
 | 
			
		||||
	sModel.is_model_set = false;
 | 
			
		||||
	sModel.body_num = 0;
 | 
			
		||||
 | 
			
		||||
	// Object stuff
 | 
			
		||||
	object.pEdict = NULL;
 | 
			
		||||
	object.type = 0;
 | 
			
		||||
	object.carrying = false;
 | 
			
		||||
	object.do_forward = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveKill(CPlayer* pVictim, int wweapon, int hhs, int ttk){
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict,pVictim->pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ( pVictim->index == index )
 | 
			
		||||
	{ // killed self
 | 
			
		||||
		pVictim->weapons[0].deaths++;
 | 
			
		||||
		pVictim->life.deaths++;
 | 
			
		||||
		pVictim->round.deaths++;
 | 
			
		||||
		pVictim->weaponsLife[0].deaths++;       // DEC-Weapon (life) stats
 | 
			
		||||
		pVictim->weaponsRnd[0].deaths++;       // DEC-Weapon (round) stats
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int vw = get_weaponid(pVictim);
 | 
			
		||||
 | 
			
		||||
	pVictim->attackers[index].name = (char*)weaponData[wweapon].name;
 | 
			
		||||
	pVictim->attackers[index].kills++;
 | 
			
		||||
	pVictim->attackers[index].hs += hhs;
 | 
			
		||||
	pVictim->attackers[index].tks += ttk;
 | 
			
		||||
	pVictim->attackers[0].kills++;
 | 
			
		||||
	pVictim->attackers[0].hs += hhs;
 | 
			
		||||
	pVictim->attackers[0].tks += ttk;
 | 
			
		||||
	pVictim->weapons[vw].deaths++;
 | 
			
		||||
	pVictim->weapons[0].deaths++;
 | 
			
		||||
	pVictim->life.deaths++;
 | 
			
		||||
	pVictim->round.deaths++;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	pVictim->weaponsLife[vw].deaths++; // DEC-Weapon (life) stats
 | 
			
		||||
	pVictim->weaponsLife[0].deaths++;                // DEC-Weapon (life) stats
 | 
			
		||||
	pVictim->weaponsRnd[vw].deaths++; // DEC-Weapon (round) stats
 | 
			
		||||
	pVictim->weaponsRnd[0].deaths++;                // DEC-Weapon (round) stats
 | 
			
		||||
 | 
			
		||||
	int vi = pVictim->index;
 | 
			
		||||
	victims[vi].name = (char*)weaponData[wweapon].name;
 | 
			
		||||
	victims[vi].deaths++;
 | 
			
		||||
	victims[vi].hs += hhs;
 | 
			
		||||
	victims[vi].tks += ttk;
 | 
			
		||||
	victims[0].deaths++;
 | 
			
		||||
	victims[0].hs += hhs;
 | 
			
		||||
	victims[0].tks += ttk;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	weaponsLife[wweapon].kills++;                // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[wweapon].hs += hhs;         // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[wweapon].tks += ttk;     // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].kills++;                     // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].hs += hhs;              // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].tks += ttk;          // DEC-Weapon (life) stats
 | 
			
		||||
 | 
			
		||||
	weaponsRnd[wweapon].kills++;                // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].hs += hhs;         // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].tks += ttk;     // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].kills++;                     // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].hs += hhs;              // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].tks += ttk;          // DEC-Weapon (round) stats
 | 
			
		||||
 | 
			
		||||
	weapons[wweapon].kills++;
 | 
			
		||||
	weapons[wweapon].hs += hhs;
 | 
			
		||||
	weapons[wweapon].tks += ttk;
 | 
			
		||||
	weapons[0].kills++;
 | 
			
		||||
	weapons[0].hs += hhs;
 | 
			
		||||
	weapons[0].tks += ttk;
 | 
			
		||||
	life.kills++;
 | 
			
		||||
	life.hs += hhs;
 | 
			
		||||
	life.tks += ttk;
 | 
			
		||||
	round.kills++;
 | 
			
		||||
	round.hs += hhs;
 | 
			
		||||
	round.tks += ttk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveHit(CPlayer* pVictim, int wweapon, int ddamage, int bbody){
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict,pVictim->pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	pVictim->attackers[index].hits++;
 | 
			
		||||
	pVictim->attackers[index].damage += ddamage;
 | 
			
		||||
	pVictim->attackers[index].bodyHits[bbody]++;
 | 
			
		||||
	pVictim->attackers[0].hits++;
 | 
			
		||||
	pVictim->attackers[0].damage += ddamage;
 | 
			
		||||
	pVictim->attackers[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	int vi = pVictim->index;
 | 
			
		||||
	victims[vi].hits++;
 | 
			
		||||
	victims[vi].damage += ddamage;
 | 
			
		||||
	victims[vi].bodyHits[bbody]++;
 | 
			
		||||
	victims[0].hits++;
 | 
			
		||||
	victims[0].damage += ddamage;
 | 
			
		||||
	victims[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	weaponsLife[wweapon].hits++;              // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[wweapon].damage += ddamage;    // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[wweapon].bodyHits[bbody]++;   // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].hits++;                   // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].damage += ddamage;         // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].bodyHits[bbody]++;        // DEC-Weapon (life) stats
 | 
			
		||||
 | 
			
		||||
	weaponsRnd[wweapon].hits++;              // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].damage += ddamage;    // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[wweapon].bodyHits[bbody]++;   // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].hits++;                   // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].damage += ddamage;         // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].bodyHits[bbody]++;        // DEC-Weapon (round) stats
 | 
			
		||||
 | 
			
		||||
	weapons[wweapon].hits++;
 | 
			
		||||
	weapons[wweapon].damage += ddamage;
 | 
			
		||||
	weapons[wweapon].bodyHits[bbody]++;
 | 
			
		||||
	weapons[0].hits++;
 | 
			
		||||
	weapons[0].damage += ddamage;
 | 
			
		||||
	weapons[0].bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	life.hits++;
 | 
			
		||||
	life.damage += ddamage;
 | 
			
		||||
	life.bodyHits[bbody]++;
 | 
			
		||||
 | 
			
		||||
	round.hits++;
 | 
			
		||||
	round.damage += ddamage;
 | 
			
		||||
	round.bodyHits[bbody]++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::saveShot(int weapon)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	victims[0].shots++;
 | 
			
		||||
	weapons[weapon].shots++;
 | 
			
		||||
	weapons[0].shots++;
 | 
			
		||||
	life.shots++;
 | 
			
		||||
	round.shots++;
 | 
			
		||||
	weaponsLife[weapon].shots++;       // DEC-Weapon (life) stats
 | 
			
		||||
	weaponsLife[0].shots++;            // DEC-Weapon (life) stats
 | 
			
		||||
 | 
			
		||||
	weaponsRnd[weapon].shots++;       // DEC-Weapon (round) stats
 | 
			
		||||
	weaponsRnd[0].shots++;            // DEC-Weapon (round) stats
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::updateScore(int weapon, int score)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	if ( ignoreBots(pEdict) )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	life.points += score;
 | 
			
		||||
	round.points += score;
 | 
			
		||||
	weaponsLife[weapon].points += score;
 | 
			
		||||
	weaponsLife[0].points += score;
 | 
			
		||||
	weaponsRnd[weapon].points += score;
 | 
			
		||||
	weaponsRnd[0].points += score;
 | 
			
		||||
	weapons[weapon].points += score;
 | 
			
		||||
	weapons[0].points += score;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::killPlayer()
 | 
			
		||||
{
 | 
			
		||||
	pEdict->v.dmg_inflictor = NULL;
 | 
			
		||||
	pEdict->v.health = 0;
 | 
			
		||||
	pEdict->v.deadflag = DEAD_RESPAWNABLE;
 | 
			
		||||
	pEdict->v.weaponmodel = 0;
 | 
			
		||||
	pEdict->v.weapons = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::initModel(char* model)
 | 
			
		||||
{
 | 
			
		||||
	strcpy(sModel.modelclass, (const char*)model);
 | 
			
		||||
	sModel.is_model_set = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::clearModel()
 | 
			
		||||
{
 | 
			
		||||
	sModel.is_model_set = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CPlayer::setModel()
 | 
			
		||||
{
 | 
			
		||||
	if(!ingame || ignoreBots(pEdict))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if(sModel.is_model_set)
 | 
			
		||||
	{
 | 
			
		||||
		ENTITY_SET_KEYVALUE(pEdict, "model", sModel.modelclass);
 | 
			
		||||
		pEdict->v.body = sModel.body_num;
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::setBody(int bn)
 | 
			
		||||
{
 | 
			
		||||
	if(!ingame || ignoreBots(pEdict))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	sModel.body_num = bn;
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	iuser3 = 0 standing up
 | 
			
		||||
	iuser3 = 1 going prone or mg tearing down
 | 
			
		||||
	iuser3 = 2 setting up mg while laying down
 | 
			
		||||
*/
 | 
			
		||||
void CPlayer::PreThink()
 | 
			
		||||
{
 | 
			
		||||
	if(!ingame || ignoreBots(pEdict))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if(oldteam != pEdict->v.team && iFTeamForward != -1)
 | 
			
		||||
		MF_ExecuteForward(iFTeamForward, index, pEdict->v.team, oldteam);
 | 
			
		||||
 | 
			
		||||
	if(oldclass != pEdict->v.playerclass && iFClassForward != -1)
 | 
			
		||||
		MF_ExecuteForward(iFClassForward, index, pEdict->v.playerclass, oldclass);
 | 
			
		||||
 | 
			
		||||
	if(oldprone != pEdict->v.iuser3 && oldprone != 2 && pEdict->v.iuser3 != 2 && iFProneForward != -1)
 | 
			
		||||
		MF_ExecuteForward(iFProneForward, index, pEdict->v.iuser3);
 | 
			
		||||
 | 
			
		||||
	if(oldstamina > pEdict->v.fuser4 && iFStaminaForward != -1)
 | 
			
		||||
		MF_ExecuteForward(iFStaminaForward, index, ((int)pEdict->v.fuser4));
 | 
			
		||||
 | 
			
		||||
	if(wpns_bitfield != pEdict->v.weapons)
 | 
			
		||||
		WeaponsCheck(pEdict->v.weapons & ~(1<<31));
 | 
			
		||||
 | 
			
		||||
	// Set the old variables for 
 | 
			
		||||
	oldprone = pEdict->v.iuser3;
 | 
			
		||||
	oldteam = pEdict->v.team;
 | 
			
		||||
	oldclass = pEdict->v.playerclass;
 | 
			
		||||
	oldstamina = pEdict->v.fuser4;
 | 
			
		||||
 | 
			
		||||
	wpns_bitfield = pEdict->v.weapons & ~(1<<31);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::Scoping(int value)
 | 
			
		||||
{
 | 
			
		||||
	// Everyone gets a 0 then another call for 90, so I need to figure out
 | 
			
		||||
	// what weapon they have before I can then check if they are scoped or not
 | 
			
		||||
 | 
			
		||||
	do_scoped = false;
 | 
			
		||||
 | 
			
		||||
	switch(value)
 | 
			
		||||
	{
 | 
			
		||||
	// This is when the scope is dropped from the eye
 | 
			
		||||
	case 0:
 | 
			
		||||
		// Is this an initial call
 | 
			
		||||
		if(mPlayer->current == 0)
 | 
			
		||||
			return;
 | 
			
		||||
 | 
			
		||||
		//			SKar					Spring					SFG42						SEnfield
 | 
			
		||||
		if((mPlayer->current == 6 || mPlayer->current == 9 || mPlayer->current == 32 || mPlayer->current == 35) && is_scoped)
 | 
			
		||||
		{
 | 
			
		||||
			is_scoped = false;
 | 
			
		||||
			do_scoped = true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	// This is when the scope is put up to the eye
 | 
			
		||||
	case 20:
 | 
			
		||||
		//			SKar					Spring					SFG42						SEnfield
 | 
			
		||||
		if((mPlayer->current == 6 || mPlayer->current == 9 || mPlayer->current == 32 || mPlayer->current == 35) && !is_scoped)
 | 
			
		||||
		{
 | 
			
		||||
			is_scoped = true;
 | 
			
		||||
			do_scoped = true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	// This means the scope has been initialized
 | 
			
		||||
	case 90:
 | 
			
		||||
		is_scoped = false;
 | 
			
		||||
		return;
 | 
			
		||||
	};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::ScopingCheck()
 | 
			
		||||
{
 | 
			
		||||
	if(do_scoped)
 | 
			
		||||
		MF_ExecuteForward(iFScopeForward, index, (int)is_scoped);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CPlayer::WeaponsCheck(int weapons)
 | 
			
		||||
{
 | 
			
		||||
	if(wpns_bitfield == 0)
 | 
			
		||||
		return;
 | 
			
		||||
	
 | 
			
		||||
	else if(pEdict->v.weapons == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	int old;
 | 
			
		||||
	int cur;
 | 
			
		||||
 | 
			
		||||
	for(int i = 1; i < MAX_WEAPONS; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		// Check to see we are not talking about a grenade and we have changed
 | 
			
		||||
		if(i != 13 && i != 14 && i != 15 && i != 16 && i != 36)
 | 
			
		||||
		{
 | 
			
		||||
			old = wpns_bitfield&(1<<i);
 | 
			
		||||
			cur = weapons&(1<<i);
 | 
			
		||||
 | 
			
		||||
			if(old != cur)
 | 
			
		||||
				MF_ExecuteForward(iFWpnPickupForward, index, i, ((weapons&(1<<i)) ? 1 : 0));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Grenades
 | 
			
		||||
// *****************************************************
 | 
			
		||||
void Grenades::put(edict_t* grenade, float time, int type, CPlayer* player )
 | 
			
		||||
{
 | 
			
		||||
	Obj* a = new Obj;
 | 
			
		||||
	a->player = player;
 | 
			
		||||
	a->grenade = grenade;
 | 
			
		||||
	a->time = gpGlobals->time + time;
 | 
			
		||||
	a->type = type;
 | 
			
		||||
	a->next = head;
 | 
			
		||||
	head = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Grenades::find( edict_t* enemy, CPlayer** p, int& type )
 | 
			
		||||
{
 | 
			
		||||
	bool found = false;
 | 
			
		||||
	float lastTime = 0.0;
 | 
			
		||||
	Obj** a = &head;
 | 
			
		||||
 | 
			
		||||
	while(*a)
 | 
			
		||||
	{
 | 
			
		||||
		if((*a)->time > gpGlobals->time) 
 | 
			
		||||
		{
 | 
			
		||||
			if((*a)->grenade == enemy) 
 | 
			
		||||
			{
 | 
			
		||||
				found = true;
 | 
			
		||||
 | 
			
		||||
				// we need this because of catched grenades
 | 
			
		||||
				if((*a)->time > lastTime)
 | 
			
		||||
				{ 
 | 
			
		||||
					(*p) = (*a)->player;      // two people can have the same nade in our list
 | 
			
		||||
					type = (*a)->type;
 | 
			
		||||
					lastTime = (*a)->time;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		else 
 | 
			
		||||
		{
 | 
			
		||||
			Obj* next = (*a)->next;
 | 
			
		||||
			delete *a;
 | 
			
		||||
			*a = next;
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		a = &(*a)->next;
 | 
			
		||||
	}
 | 
			
		||||
	return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Grenades::clear()
 | 
			
		||||
{
 | 
			
		||||
	while(head)
 | 
			
		||||
	{
 | 
			
		||||
		Obj* a = head->next;
 | 
			
		||||
		delete head;
 | 
			
		||||
		head = a;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CMapInfo
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
void CMapInfo::Init()
 | 
			
		||||
{
 | 
			
		||||
	pEdict = 0;
 | 
			
		||||
	initialized = false;
 | 
			
		||||
 | 
			
		||||
	/* default values from dod.fgd */
 | 
			
		||||
	detect_axis_paras = 0;
 | 
			
		||||
	detect_allies_paras = 0;
 | 
			
		||||
	detect_allies_country = 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										196
									
								
								modules/dod/dodx/CMisc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								modules/dod/dodx/CMisc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,196 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CMISC_H
 | 
			
		||||
#define CMISC_H
 | 
			
		||||
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
 | 
			
		||||
#define DODMAX_CUSTOMWPNS	5	// custom weapons
 | 
			
		||||
#define DODMAX_WEAPONS		42 + DODMAX_CUSTOMWPNS
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
#define LINUXOFFSET	0
 | 
			
		||||
#else
 | 
			
		||||
#define LINUXOFFSET	5
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DOD_VERSION "0.1"
 | 
			
		||||
 | 
			
		||||
#define MAX_TRACE	6
 | 
			
		||||
 | 
			
		||||
struct traceVault 
 | 
			
		||||
{
 | 
			
		||||
	char szName[16];
 | 
			
		||||
	int iId;
 | 
			
		||||
	int iAction;
 | 
			
		||||
	float fDel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ACT_NADE_NONE		(0)
 | 
			
		||||
#define ACT_NADE_SHOT		(1<<0)
 | 
			
		||||
#define ACT_NADE_PUT		(1<<1)
 | 
			
		||||
#define ACT_NADE_THROW		(1<<2)
 | 
			
		||||
 | 
			
		||||
#define ACT_ROCKET_NONE		(0)
 | 
			
		||||
#define ACT_ROCKET_SHOT		(1<<0)
 | 
			
		||||
#define ACT_ROCKET_PUT		(1<<3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CPlayer
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class CPlayer 
 | 
			
		||||
{
 | 
			
		||||
	private:
 | 
			
		||||
		char ip[32];
 | 
			
		||||
 | 
			
		||||
	public:
 | 
			
		||||
		edict_t* pEdict;
 | 
			
		||||
		int index;
 | 
			
		||||
		int aiming;
 | 
			
		||||
		int current;
 | 
			
		||||
		int old;
 | 
			
		||||
		int wpnModel;
 | 
			
		||||
		int wpnscount;
 | 
			
		||||
		int wpns_bitfield;
 | 
			
		||||
		int old_weapons[DODMAX_WEAPONS];
 | 
			
		||||
 | 
			
		||||
		float savedScore;
 | 
			
		||||
		int lastScore;
 | 
			
		||||
		int sendScore;
 | 
			
		||||
 | 
			
		||||
		bool ingame;
 | 
			
		||||
		bool bot;
 | 
			
		||||
		float clearStats;
 | 
			
		||||
		float clearRound;
 | 
			
		||||
 | 
			
		||||
		int oldteam;
 | 
			
		||||
		int oldclass;
 | 
			
		||||
		float oldstamina;
 | 
			
		||||
 | 
			
		||||
		struct ModelStruct
 | 
			
		||||
		{
 | 
			
		||||
			int body_num;
 | 
			
		||||
			bool is_model_set;
 | 
			
		||||
			char modelclass[64];
 | 
			
		||||
		}
 | 
			
		||||
		sModel;
 | 
			
		||||
 | 
			
		||||
		int oldprone;
 | 
			
		||||
		bool do_scoped;
 | 
			
		||||
		bool is_scoped;
 | 
			
		||||
 | 
			
		||||
		struct ObjectStruct
 | 
			
		||||
		{
 | 
			
		||||
			edict_t* pEdict;
 | 
			
		||||
			bool carrying;
 | 
			
		||||
			bool do_forward;
 | 
			
		||||
			int type;
 | 
			
		||||
		}
 | 
			
		||||
		object;
 | 
			
		||||
 | 
			
		||||
		struct PlayerWeapon : public Stats 
 | 
			
		||||
		{
 | 
			
		||||
			char*		name;
 | 
			
		||||
			int			ammo;
 | 
			
		||||
			int			clip;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		PlayerWeapon	weapons[DODMAX_WEAPONS];
 | 
			
		||||
		PlayerWeapon	attackers[33];
 | 
			
		||||
		PlayerWeapon	victims[33];
 | 
			
		||||
		Stats			weaponsLife[DODMAX_WEAPONS]; // DEC-Weapon (Life) stats
 | 
			
		||||
		Stats			weaponsRnd[DODMAX_WEAPONS]; // DEC-Weapon (Round) stats
 | 
			
		||||
		Stats			life;
 | 
			
		||||
		Stats			round;
 | 
			
		||||
 | 
			
		||||
		RankSystem::RankStats*	rank;
 | 
			
		||||
 | 
			
		||||
		void Init(  int pi, edict_t* pe );
 | 
			
		||||
		void Connect(const char* name,const char* ip );
 | 
			
		||||
		void PutInServer();
 | 
			
		||||
		void Disconnect();
 | 
			
		||||
		void saveKill(CPlayer* pVictim, int weapon, int hs, int tk);
 | 
			
		||||
		void saveHit(CPlayer* pVictim, int weapon, int damage, int aiming);
 | 
			
		||||
		void saveShot(int weapon);
 | 
			
		||||
		void updateScore(int weapon, int score);
 | 
			
		||||
		void restartStats(bool all = true);
 | 
			
		||||
		void killPlayer();
 | 
			
		||||
		void initModel(char*);
 | 
			
		||||
		void clearModel();
 | 
			
		||||
		bool setModel();
 | 
			
		||||
		void setBody(int);
 | 
			
		||||
		void PreThink();
 | 
			
		||||
		void Scoping(int);
 | 
			
		||||
		void ScopingCheck();
 | 
			
		||||
		void WeaponsCheck(int);
 | 
			
		||||
 | 
			
		||||
		inline bool IsBot()
 | 
			
		||||
		{
 | 
			
		||||
			const char* auth= (*g_engfuncs.pfnGetPlayerAuthId)(pEdict);
 | 
			
		||||
			return ( auth && !strcmp( auth , "BOT" ) );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline bool IsAlive()
 | 
			
		||||
		{
 | 
			
		||||
			return ((pEdict->v.deadflag==DEAD_NO)&&(pEdict->v.health>0));
 | 
			
		||||
		}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Grenades
 | 
			
		||||
// *****************************************************
 | 
			
		||||
class Grenades // : public CObject
 | 
			
		||||
{
 | 
			
		||||
  struct Obj
 | 
			
		||||
  {
 | 
			
		||||
    CPlayer* player;
 | 
			
		||||
    edict_t* grenade;
 | 
			
		||||
    float time;
 | 
			
		||||
    int type;
 | 
			
		||||
    Obj* next;
 | 
			
		||||
  } *head;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	Grenades() { head = 0; }
 | 
			
		||||
	~Grenades() { clear(); }
 | 
			
		||||
	void put(edict_t* grenade, float time, int type, CPlayer* player);
 | 
			
		||||
	bool find(edict_t* enemy, CPlayer** p, int& type);
 | 
			
		||||
	void clear();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class CMapInfo
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class CMapInfo
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	edict_t* pEdict;
 | 
			
		||||
	bool initialized;
 | 
			
		||||
 | 
			
		||||
	int detect_axis_paras;
 | 
			
		||||
	int detect_allies_paras;
 | 
			
		||||
	int detect_allies_country;
 | 
			
		||||
 | 
			
		||||
	void Init();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // CMISC_H
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										350
									
								
								modules/dod/dodx/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								modules/dod/dodx/CRank.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,350 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
Stats::Stats(){
 | 
			
		||||
	hits = shots = damage = hs = tks = points = kills = deaths = 0;
 | 
			
		||||
	memset( bodyHits , 0 ,sizeof( bodyHits ) );
 | 
			
		||||
}
 | 
			
		||||
void Stats::commit(Stats* a){
 | 
			
		||||
	hits += a->hits;
 | 
			
		||||
	shots += a->shots;
 | 
			
		||||
	damage += a->damage;
 | 
			
		||||
	hs += a->hs;
 | 
			
		||||
	tks += a->tks;
 | 
			
		||||
	points += a->points;
 | 
			
		||||
	kills += a->kills;
 | 
			
		||||
	deaths += a->deaths;
 | 
			
		||||
	for(int i = 1; i < 8; ++i)
 | 
			
		||||
		bodyHits[i] += a->bodyHits[i];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
RankSystem::RankStats::RankStats( const char* uu, const char* nn, RankSystem* pp ) {
 | 
			
		||||
	name = 0;
 | 
			
		||||
	namelen = 0;
 | 
			
		||||
	unique = 0;
 | 
			
		||||
	uniquelen = 0;
 | 
			
		||||
	score = 0;
 | 
			
		||||
	parent = pp;
 | 
			
		||||
	id = ++parent->rankNum;
 | 
			
		||||
	next = prev = 0;
 | 
			
		||||
	setName( nn );
 | 
			
		||||
	setUnique( uu );
 | 
			
		||||
}
 | 
			
		||||
RankSystem::RankStats::~RankStats() {
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	--parent->rankNum;
 | 
			
		||||
}
 | 
			
		||||
void RankSystem::RankStats::setName( const char* nn  )	{
 | 
			
		||||
	delete[] name;
 | 
			
		||||
	namelen = strlen(nn) + 1;
 | 
			
		||||
	name = new char[namelen];
 | 
			
		||||
	if ( name )
 | 
			
		||||
		strcpy( name , nn );
 | 
			
		||||
	else
 | 
			
		||||
		namelen = 0;
 | 
			
		||||
}
 | 
			
		||||
void RankSystem::RankStats::setUnique( const char* nn  )	{
 | 
			
		||||
	delete[] unique;
 | 
			
		||||
	uniquelen = strlen(nn) + 1;
 | 
			
		||||
	unique = new char[uniquelen];
 | 
			
		||||
	if ( unique )
 | 
			
		||||
		strcpy( unique , nn );	
 | 
			
		||||
	else
 | 
			
		||||
		uniquelen = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankSystem() { 
 | 
			
		||||
	head = 0; 
 | 
			
		||||
	tail = 0; 
 | 
			
		||||
	rankNum = 0;
 | 
			
		||||
	calc.code = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::~RankSystem() {
 | 
			
		||||
	clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::put_before( RankStats* a, RankStats* ptr ){
 | 
			
		||||
	a->next = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->prev = ptr->prev;
 | 
			
		||||
		ptr->prev = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->prev = head;
 | 
			
		||||
		head = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->prev )	a->prev->next = a;
 | 
			
		||||
	else tail = a;
 | 
			
		||||
}
 | 
			
		||||
void  RankSystem::put_after( RankStats* a, RankStats* ptr ) {
 | 
			
		||||
	a->prev = ptr;
 | 
			
		||||
	if ( ptr ){
 | 
			
		||||
		a->next = ptr->next;
 | 
			
		||||
		ptr->next = a;
 | 
			
		||||
	}
 | 
			
		||||
	else{
 | 
			
		||||
		a->next = tail;
 | 
			
		||||
		tail = a;
 | 
			
		||||
	}
 | 
			
		||||
	if ( a->next )	a->next->prev = a;
 | 
			
		||||
	else head = a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unlink( RankStats* ptr ){
 | 
			
		||||
	if (ptr->prev) ptr->prev->next = ptr->next;
 | 
			
		||||
	else tail = ptr->next;
 | 
			
		||||
	if (ptr->next) ptr->next->prev = ptr->prev;
 | 
			
		||||
	else head = ptr->prev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::clear(){
 | 
			
		||||
	while( tail ){
 | 
			
		||||
		head = tail->next;
 | 
			
		||||
		delete tail;
 | 
			
		||||
		tail = head;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool RankSystem::loadCalc(const char* filename, char* error)
 | 
			
		||||
{
 | 
			
		||||
	if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error,0)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)||
 | 
			
		||||
		(MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){
 | 
			
		||||
		LOG_CONSOLE( PLID, "Couldn't load plugin (file \"%s\")",filename);
 | 
			
		||||
		MF_UnloadAmxScript(&calc.amx, &calc.code);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::unloadCalc()
 | 
			
		||||
{
 | 
			
		||||
	MF_UnloadAmxScript(&calc.amx , &calc.code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RankSystem::RankStats* RankSystem::findEntryInRank(const char* unique, const char* name, bool isip)
 | 
			
		||||
{
 | 
			
		||||
	RankStats* a = head;
 | 
			
		||||
	
 | 
			
		||||
	if (isip) // IP lookups need to strip the port from already saved instances.
 | 
			
		||||
	{         // Otherwise the stats file would be essentially reset.
 | 
			
		||||
	
 | 
			
		||||
		// The IP passed does not contain the port any more for unique
 | 
			
		||||
		size_t iplen = strlen(unique);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		while ( a )
 | 
			
		||||
		{
 | 
			
		||||
			const char* targetUnique = a->getUnique();
 | 
			
		||||
			if ( strncmp( targetUnique, unique, iplen) == 0 )
 | 
			
		||||
			{
 | 
			
		||||
				// It mostly matches, make sure this isn't a false match
 | 
			
		||||
				// eg: checking 4.2.2.2 would match 4.2.2.24 here.
 | 
			
		||||
				
 | 
			
		||||
				// Get the next character stored in targetUnique
 | 
			
		||||
				char c = targetUnique[iplen];
 | 
			
		||||
				
 | 
			
		||||
				// If c is either a colon or end of line, then this
 | 
			
		||||
				// is a valid match.
 | 
			
		||||
				if (c == ':' ||
 | 
			
		||||
					c == '\0')
 | 
			
		||||
				{
 | 
			
		||||
					// Yes, this is a match.
 | 
			
		||||
					return a;
 | 
			
		||||
				}
 | 
			
		||||
				// Any other case was a false match.
 | 
			
		||||
				a = a->prev;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else // No special case
 | 
			
		||||
	{
 | 
			
		||||
		while ( a )
 | 
			
		||||
		{
 | 
			
		||||
			if (  strcmp( a->getUnique() ,unique ) == 0 )
 | 
			
		||||
				return a;
 | 
			
		||||
 | 
			
		||||
			a = a->prev;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	a = new RankStats( unique ,name,this );
 | 
			
		||||
	if ( a == 0 ) return 0;
 | 
			
		||||
	put_after( a  , 0 );
 | 
			
		||||
	return a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::updatePos(  RankStats* rr ,  Stats* s )
 | 
			
		||||
{
 | 
			
		||||
	rr->addStats( s );
 | 
			
		||||
 | 
			
		||||
	if ( calc.code ) {
 | 
			
		||||
		calc.physAddr1[0] = rr->kills;
 | 
			
		||||
		calc.physAddr1[1] = rr->deaths;
 | 
			
		||||
		calc.physAddr1[2] = rr->hs;
 | 
			
		||||
		calc.physAddr1[3] = rr->tks;
 | 
			
		||||
		calc.physAddr1[4] = rr->shots;
 | 
			
		||||
		calc.physAddr1[5] = rr->hits;
 | 
			
		||||
		calc.physAddr1[6] = rr->damage;
 | 
			
		||||
		calc.physAddr1[7] = rr->points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			calc.physAddr2[i] = rr->bodyHits[i];
 | 
			
		||||
		cell result = 0;
 | 
			
		||||
		int err;
 | 
			
		||||
		MF_AmxPush(&calc.amx, calc.amxAddr2);
 | 
			
		||||
		MF_AmxPush(&calc.amx, calc.amxAddr1);
 | 
			
		||||
		if ((err = MF_AmxExec(&calc.amx,&result, calc.func)) != AMX_ERR_NONE)
 | 
			
		||||
			MF_LogError(&calc.amx, err, "Fatal error calculating stats");
 | 
			
		||||
		rr->score = result;
 | 
			
		||||
	}
 | 
			
		||||
	else rr->score = rr->kills - rr->deaths;
 | 
			
		||||
 | 
			
		||||
	RankStats* aa = rr->next;
 | 
			
		||||
	while ( aa && (aa->score <= rr->score) ) { // try to nominate
 | 
			
		||||
		rr->goUp();
 | 
			
		||||
		aa->goDown();
 | 
			
		||||
		aa = aa->next;		// go to next rank
 | 
			
		||||
	}
 | 
			
		||||
	if ( aa != rr->next )
 | 
			
		||||
	{
 | 
			
		||||
		unlink( rr );
 | 
			
		||||
		put_before( rr, aa );
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		aa = rr->prev;
 | 
			
		||||
		while ( aa && (aa->score > rr->score) ) { // go down
 | 
			
		||||
			rr->goDown();
 | 
			
		||||
			aa->goUp();
 | 
			
		||||
			aa = aa->prev;	// go to prev rank
 | 
			
		||||
		}
 | 
			
		||||
		if ( aa != rr->prev ){
 | 
			
		||||
			unlink( rr );
 | 
			
		||||
			put_after( rr, aa );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * Who put these backwards...
 | 
			
		||||
 */
 | 
			
		||||
#define TRYREAD(t_var, t_num, t_size, t_file) \
 | 
			
		||||
	if (fread(t_var, t_size, t_num, t_file) != static_cast<size_t>(t_num)) { \
 | 
			
		||||
		break; \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void RankSystem::loadRank(const char* filename)
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen(filename , "rb");
 | 
			
		||||
	
 | 
			
		||||
	if (!bfp)
 | 
			
		||||
	{
 | 
			
		||||
		MF_Log("Could not load stats file: %s", filename);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	short int i = 0;
 | 
			
		||||
	if (fread(&i, sizeof(short int), 1, bfp) != 1)
 | 
			
		||||
	{
 | 
			
		||||
		fclose(bfp);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	if (i == RANK_VERSION)
 | 
			
		||||
	{
 | 
			
		||||
		Stats d;
 | 
			
		||||
		char unique[64], name[64];
 | 
			
		||||
		if (fread(&i, sizeof(short int), 1, bfp) != 1)
 | 
			
		||||
		{
 | 
			
		||||
			fclose(bfp);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		while(i && !feof(bfp))
 | 
			
		||||
		{
 | 
			
		||||
			TRYREAD(name, i, sizeof(char), bfp);
 | 
			
		||||
			TRYREAD(&i, 1, sizeof(short int), bfp);
 | 
			
		||||
			TRYREAD(unique, i, sizeof(char) , bfp);
 | 
			
		||||
			TRYREAD(&d.tks, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.damage, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.deaths, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.kills, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.shots, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.hits, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.hs, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(&d.points, 1, sizeof(int), bfp);
 | 
			
		||||
			TRYREAD(d.bodyHits, 1, sizeof(d.bodyHits), bfp);
 | 
			
		||||
			TRYREAD(&i, 1, sizeof(short int), bfp);
 | 
			
		||||
 | 
			
		||||
			RankSystem::RankStats* a = findEntryInRank( unique , name );
 | 
			
		||||
			if ( a ) a->updatePosition( &d );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RankSystem::saveRank( const char* filename )
 | 
			
		||||
{
 | 
			
		||||
	FILE *bfp = fopen(filename, "wb");
 | 
			
		||||
	
 | 
			
		||||
	if ( !bfp ) return;
 | 
			
		||||
	
 | 
			
		||||
	short int i = RANK_VERSION;
 | 
			
		||||
	
 | 
			
		||||
	fwrite(&i, 1, sizeof(short int) , bfp);
 | 
			
		||||
	
 | 
			
		||||
	RankSystem::iterator a = front();
 | 
			
		||||
	
 | 
			
		||||
	while ( a )
 | 
			
		||||
	{
 | 
			
		||||
		if ( (*a).score != (1<<31) ) // score must be different than mincell
 | 
			
		||||
		{
 | 
			
		||||
			fwrite( &(*a).namelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).name , (*a).namelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).uniquelen , 1, sizeof(short int), bfp);
 | 
			
		||||
			fwrite( (*a).unique ,  (*a).uniquelen , sizeof(char) , bfp);
 | 
			
		||||
			fwrite( &(*a).tks, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).damage, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).deaths, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).kills, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).shots, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hits, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).hs, 1, sizeof(int), bfp);
 | 
			
		||||
			fwrite( &(*a).points, 1,sizeof(int), bfp);
 | 
			
		||||
			fwrite( (*a).bodyHits, 1, sizeof((*a).bodyHits), bfp);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		--a;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	i = 0;
 | 
			
		||||
	fwrite( &i , 1, sizeof(short int), bfp); // null terminator
 | 
			
		||||
	
 | 
			
		||||
	fclose(bfp);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										128
									
								
								modules/dod/dodx/CRank.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								modules/dod/dodx/CRank.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CRANK_H
 | 
			
		||||
#define CRANK_H
 | 
			
		||||
 | 
			
		||||
#define RANK_VERSION 5
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class Stats
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
struct Stats {
 | 
			
		||||
	int hits;
 | 
			
		||||
	int shots;
 | 
			
		||||
	int damage;
 | 
			
		||||
	int hs;
 | 
			
		||||
	int tks;
 | 
			
		||||
	int points; // DoD score
 | 
			
		||||
	int kills;
 | 
			
		||||
	int deaths;
 | 
			
		||||
	int bodyHits[8];
 | 
			
		||||
	Stats();
 | 
			
		||||
	void commit(Stats* a);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *****************************************************
 | 
			
		||||
// class RankSystem
 | 
			
		||||
// *****************************************************
 | 
			
		||||
 | 
			
		||||
class RankSystem
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	class RankStats;
 | 
			
		||||
	friend class RankStats;
 | 
			
		||||
	class iterator;
 | 
			
		||||
 | 
			
		||||
	class RankStats : public Stats {
 | 
			
		||||
		friend class RankSystem;
 | 
			
		||||
		friend class iterator;
 | 
			
		||||
		RankSystem*	parent;
 | 
			
		||||
		RankStats*	next;
 | 
			
		||||
		RankStats*	prev;
 | 
			
		||||
		char*		unique;
 | 
			
		||||
		short int	uniquelen;
 | 
			
		||||
		char*		name;
 | 
			
		||||
		short int	namelen;
 | 
			
		||||
		int			score;
 | 
			
		||||
		int			id;
 | 
			
		||||
		RankStats( const char* uu, const char* nn,  RankSystem* pp );
 | 
			
		||||
		~RankStats();
 | 
			
		||||
		void setUnique( const char* nn  );
 | 
			
		||||
		inline void goDown() {++id;}
 | 
			
		||||
		inline void goUp() {--id;}
 | 
			
		||||
		inline void addStats(Stats* a) { commit( a ); }
 | 
			
		||||
	public:
 | 
			
		||||
		void setName( const char* nn  );
 | 
			
		||||
		inline const char* getName() const { return name ? name : ""; }
 | 
			
		||||
		inline const char* getUnique() const { return unique ? unique : ""; }
 | 
			
		||||
		inline int getPosition() const { return id; }
 | 
			
		||||
		inline void updatePosition( Stats* points ) {
 | 
			
		||||
			parent->updatePos( this , points );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	RankStats* head;
 | 
			
		||||
	RankStats* tail;
 | 
			
		||||
	int rankNum;
 | 
			
		||||
 | 
			
		||||
	struct scoreCalc{
 | 
			
		||||
		AMX amx;
 | 
			
		||||
		void* code;
 | 
			
		||||
		int func;
 | 
			
		||||
		cell amxAddr1;
 | 
			
		||||
		cell amxAddr2;
 | 
			
		||||
		cell *physAddr1;
 | 
			
		||||
		cell *physAddr2;
 | 
			
		||||
	} calc;
 | 
			
		||||
 | 
			
		||||
	void put_before( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void put_after( RankStats* a, RankStats* ptr );
 | 
			
		||||
	void unlink( RankStats* ptr );
 | 
			
		||||
	void updatePos( RankStats* r ,  Stats* s );
 | 
			
		||||
	
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	RankSystem();
 | 
			
		||||
	~RankSystem();
 | 
			
		||||
 | 
			
		||||
	void saveRank( const char* filename );
 | 
			
		||||
	void loadRank( const char* filename );
 | 
			
		||||
	RankStats* findEntryInRank(const char* unique, const char* name , bool isip = false);
 | 
			
		||||
	bool loadCalc(const char* filename, char* error);
 | 
			
		||||
	inline int getRankNum( ) const { return rankNum; }
 | 
			
		||||
	void clear();
 | 
			
		||||
	void unloadCalc();
 | 
			
		||||
 | 
			
		||||
	class iterator {
 | 
			
		||||
		RankStats* ptr;
 | 
			
		||||
	public:
 | 
			
		||||
		iterator(RankStats* a): ptr(a){}
 | 
			
		||||
		inline iterator& operator--() { ptr = ptr->prev; return *this;}
 | 
			
		||||
		inline iterator& operator++() {	ptr = ptr->next; return *this; }
 | 
			
		||||
		inline RankStats& operator*() {	return *ptr;}
 | 
			
		||||
		operator bool () { return (ptr != 0); }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	inline iterator front() {  return iterator(head);  }
 | 
			
		||||
	inline iterator begin() {  return iterator(tail);  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								modules/dod/dodx/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								modules/dod/dodx/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../../metamod/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = dodx
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp moduleconfig.cpp
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										651
									
								
								modules/dod/dodx/NBase.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										651
									
								
								modules/dod/dodx/NBase.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,651 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
#define WEAPONLIST 71
 | 
			
		||||
 | 
			
		||||
/* Weapon names aren't send in WeaponList message in DoD */
 | 
			
		||||
weaponlist_s weaponlist[] = 
 | 
			
		||||
{ 
 | 
			
		||||
	{ 0,     0,	  0,	false}, // 0,
 | 
			
		||||
	{ -1,    0,	 -1,	true }, // DODW_AMERKNIFE = 1,
 | 
			
		||||
	{ -1,    0,	 -1,	true }, // DODW_GERKNIFE,
 | 
			
		||||
	{  4,   64,	  7,	true }, // DODW_COLT,
 | 
			
		||||
	{  4,   64,	  8,	true }, // DODW_LUGER,
 | 
			
		||||
	{  3,  128,	  8,	true }, // DODW_GARAND,
 | 
			
		||||
	{  3,  128,	  5,	true }, // DODW_SCOPED_KAR,
 | 
			
		||||
	{  1,  128,	 30,	true }, // DODW_THOMPSON,
 | 
			
		||||
	{  6,  128,	 30,	true }, // DODW_STG44,
 | 
			
		||||
	{  5,  128,	  5,	true }, // DODW_SPRINGFIELD,
 | 
			
		||||
	{  3,  128,	  5,	true }, // DODW_KAR,
 | 
			
		||||
	{  6,  128,	 20,	true }, // DODW_BAR,
 | 
			
		||||
	{  1,  130,	 30,	true }, // DODW_MP40,
 | 
			
		||||
	{  9,   24,	 -1,	true }, // DODW_HANDGRENADE,
 | 
			
		||||
	{ 11,   24,	 -1,	true }, // DODW_STICKGRENADE,
 | 
			
		||||
	{ 12,   24,	 -1,	true }, // DODW_STICKGRENADE_EX,
 | 
			
		||||
	{ 10,   24,	 -1,	true }, // DODW_HANDGRENADE_EX,
 | 
			
		||||
	{  7, 2178,	250,	true }, // DODW_MG42,
 | 
			
		||||
	{  8,  130,	150,	true }, // DODW_30_CAL,
 | 
			
		||||
	{ -1,    0,	 -1,	true }, // DODW_SPADE,
 | 
			
		||||
	{  2,  128,	 15,	true }, // DODW_M1_CARBINE,
 | 
			
		||||
	{  2,  130,	 75,	true }, // DODW_MG34,
 | 
			
		||||
	{  1,  128,	 30,	true }, // DODW_GREASEGUN,
 | 
			
		||||
	{  6,  128,	 20,	true }, // DODW_FG42,
 | 
			
		||||
	{  2,  128,	 10,	true }, // DODW_K43,
 | 
			
		||||
	{  3,  128,	 10,	true }, // DODW_ENFIELD,
 | 
			
		||||
	{  1,  128,	 30,	true }, // DODW_STEN,
 | 
			
		||||
	{  6,  128,	 30,	true }, // DODW_BREN,
 | 
			
		||||
	{  4,   64,	  6,	true }, // DODW_WEBLEY,
 | 
			
		||||
	{ 13,  642,	  1,	true }, // DODW_BAZOOKA,
 | 
			
		||||
	{ 13,  642,	  1,	true }, // DODW_PANZERSCHRECK,
 | 
			
		||||
	{ 13,  642,	  1,	true }, // DODW_PIAT,
 | 
			
		||||
	{  3,  128,	 20,	true }, // DODW_SCOPED_FG42, UNSURE ABOUT THIS ONE
 | 
			
		||||
	{  2,  128,	 15,	true }, // DODW_FOLDING_CARBINE,
 | 
			
		||||
	{  0,    0,	  0,	false}, // DODW_KAR_BAYONET,
 | 
			
		||||
	{  3,  128,	 10,	true }, // DODW_SCOPED_ENFIELD, UNSURE ABOUT THIS ONE
 | 
			
		||||
	{  9,   24,	 -1,	true }, // DODW_MILLS_BOMB,
 | 
			
		||||
	{ -1,    0,	 -1,	true }, // DODW_BRITKNIFE,
 | 
			
		||||
	{ 38,    0,	  0,	false}, // DODW_GARAND_BUTT,
 | 
			
		||||
	{ 39,    0,	  0,	false}, // DODW_ENFIELD_BAYONET,
 | 
			
		||||
	{ 40,    0,	  0,	false}, // DODW_MORTAR,
 | 
			
		||||
	{ 41,    0,	  0,	false}, // DODW_K43_BUTT,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// from id to name 3 params id, name, len
 | 
			
		||||
static cell AMX_NATIVE_CALL get_weapon_name(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
 | 
			
		||||
	if(id < 0 || id >= DODMAX_WEAPONS)
 | 
			
		||||
	{ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return MF_SetAmxString(amx,params[2],weaponData[id].name,params[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// from log to name
 | 
			
		||||
static cell AMX_NATIVE_CALL wpnlog_to_name(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int iLen;
 | 
			
		||||
	char *log = MF_GetAmxString(amx,params[1],0,&iLen);
 | 
			
		||||
 | 
			
		||||
	for(int i = 0; i < DODMAX_WEAPONS; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if(strcmp(log,weaponData[i].logname ) == 0)
 | 
			
		||||
			return MF_SetAmxString(amx,params[2],weaponData[i].name,params[3]);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// from log to id
 | 
			
		||||
static cell AMX_NATIVE_CALL wpnlog_to_id(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int iLen;
 | 
			
		||||
	char *log = MF_GetAmxString(amx, params[1], 0, &iLen);
 | 
			
		||||
 | 
			
		||||
	for(int i = 0; i < DODMAX_WEAPONS; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if(strcmp(log,weaponData[i].logname) == 0)
 | 
			
		||||
			return i;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// from id to log
 | 
			
		||||
static cell AMX_NATIVE_CALL get_weapon_logname(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
 | 
			
		||||
	if (id<0 || id>=DODMAX_WEAPONS)
 | 
			
		||||
	{ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return MF_SetAmxString(amx,params[2],weaponData[id].logname,params[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_melee(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
 | 
			
		||||
	if(id < 0 || id >= DODMAX_WEAPONS)
 | 
			
		||||
	{ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", id);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return weaponData[id].melee;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_team_score(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
 | 
			
		||||
	switch ( index )
 | 
			
		||||
	{
 | 
			
		||||
	case 1:
 | 
			
		||||
		return AlliesScore;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 2:
 | 
			
		||||
		return AxisScore;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_score(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
		return (cell)pPlayer->savedScore;
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_class(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
		return pPlayer->pEdict->v.playerclass;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL user_kill(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if(pPlayer->ingame && pPlayer->IsAlive())
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->killPlayer();
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}	
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_map_info(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	switch(params[1])
 | 
			
		||||
	{
 | 
			
		||||
	case 0:
 | 
			
		||||
		return g_map.detect_allies_country;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 1:
 | 
			
		||||
		return g_map.detect_allies_paras;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 2:
 | 
			
		||||
		return g_map.detect_axis_paras;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid map info id %d", params[1]);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_pronestate(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
			return pPlayer->pEdict->v.iuser3;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_weapon(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		int wpn = pPlayer->current;
 | 
			
		||||
		cell *cpTemp = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		*cpTemp = pPlayer->weapons[wpn].clip;
 | 
			
		||||
		cpTemp = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		*cpTemp = pPlayer->weapons[wpn].ammo;
 | 
			
		||||
		return wpn;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* We want to get just the weapon of whichever type that the player is on him */
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_weapon_type(AMX *amx, cell *params) /* 2 params */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	int type = params[2];
 | 
			
		||||
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	if(type < DODWT_PRIMARY || type > DODWT_OTHER)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon type id %d", type);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
 | 
			
		||||
	if(pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		int weaponsbit = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
 | 
			
		||||
 | 
			
		||||
		for(int x = 1; x < MAX_WEAPONS; ++x)
 | 
			
		||||
		{
 | 
			
		||||
			if((weaponsbit&(1<<x)) > 0)
 | 
			
		||||
			{
 | 
			
		||||
				if(weaponData[x].type == type)
 | 
			
		||||
					return x;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// forward 
 | 
			
		||||
static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
 | 
			
		||||
	#ifdef FORWARD_OLD_SYSTEM
 | 
			
		||||
		int iFunctionIndex;
 | 
			
		||||
		int err;
 | 
			
		||||
		switch( params[1] )
 | 
			
		||||
		{
 | 
			
		||||
		case 0:
 | 
			
		||||
			if((err = MF_AmxFindPublic(amx, "client_damage", &iFunctionIndex)) == AMX_ERR_NONE)
 | 
			
		||||
				g_damage_info.put( amx , iFunctionIndex );
 | 
			
		||||
 | 
			
		||||
			else
 | 
			
		||||
				MF_LogError(amx, err, "client_damage not found");
 | 
			
		||||
				return 0;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 1:
 | 
			
		||||
			if((err = MF_AmxFindPublic(amx, "client_death", &iFunctionIndex)) == AMX_ERR_NONE)
 | 
			
		||||
				g_death_info.put( amx , iFunctionIndex );
 | 
			
		||||
 | 
			
		||||
			else
 | 
			
		||||
				MF_LogError(amx, err, "client_Death not found");
 | 
			
		||||
				return 0;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 2:
 | 
			
		||||
			if((err = MF_AmxFindPublic(amx, "client_score", &iFunctionIndex)) == AMX_ERR_NONE)
 | 
			
		||||
				g_score_info.put( amx , iFunctionIndex );
 | 
			
		||||
 | 
			
		||||
			else
 | 
			
		||||
				MF_LogError(amx, err, "client_score not found");
 | 
			
		||||
				return 0;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Invalid forward id %d", params[2]);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// name,logname,melee=0 
 | 
			
		||||
static cell AMX_NATIVE_CALL register_cwpn(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int i;
 | 
			
		||||
	bool bFree = false;
 | 
			
		||||
 | 
			
		||||
	for(i = DODMAX_WEAPONS - DODMAX_CUSTOMWPNS; i < DODMAX_WEAPONS; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if(!weaponData[i].needcheck)
 | 
			
		||||
		{
 | 
			
		||||
			bFree = true;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(!bFree)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	int iLen;
 | 
			
		||||
	char *szName = MF_GetAmxString(amx, params[1], 0, &iLen);
 | 
			
		||||
	char *szLogName = MF_GetAmxString(amx, params[3], 0, &iLen);
 | 
			
		||||
 | 
			
		||||
	strcpy(weaponData[i].name,szName);
 | 
			
		||||
	strcpy(weaponData[i].logname,szLogName);
 | 
			
		||||
	weaponData[i].needcheck = true;
 | 
			
		||||
	weaponData[i].melee = params[2] ? true:false;
 | 
			
		||||
	return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// wid,att,vic,dmg,hp=0
 | 
			
		||||
static cell AMX_NATIVE_CALL cwpn_dmg(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int weapon = params[1];
 | 
			
		||||
 | 
			
		||||
	// only for custom weapons
 | 
			
		||||
	if(weapon < DODMAX_WEAPONS-DODMAX_CUSTOMWPNS)
 | 
			
		||||
	{ 
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid custom weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int att = params[2];
 | 
			
		||||
	CHECK_PLAYER(params[2]);
 | 
			
		||||
 | 
			
		||||
	int vic = params[3];
 | 
			
		||||
	CHECK_PLAYER(params[3]);
 | 
			
		||||
	
 | 
			
		||||
	int dmg = params[4];
 | 
			
		||||
	if(dmg<1)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid damage %d", dmg);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	int aim = params[5];
 | 
			
		||||
	if(aim < 0 || aim > 7)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid aim %d", aim);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pAtt = GET_PLAYER_POINTER_I(att);
 | 
			
		||||
	CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
 | 
			
		||||
 | 
			
		||||
	pVic->pEdict->v.dmg_inflictor = NULL;
 | 
			
		||||
 | 
			
		||||
	if(pAtt->index != pVic->index)
 | 
			
		||||
		pAtt->saveHit(pVic , weapon , dmg, aim);
 | 
			
		||||
 | 
			
		||||
	if(!pAtt) 
 | 
			
		||||
		pAtt = pVic;
 | 
			
		||||
 | 
			
		||||
	int TA = 0;
 | 
			
		||||
 | 
			
		||||
	if((pVic->pEdict->v.team == pAtt->pEdict->v.team) && (pVic != pAtt))
 | 
			
		||||
		TA = 1;
 | 
			
		||||
 | 
			
		||||
	MF_ExecuteForward(iFDamage,pAtt->index, pVic->index, dmg, weapon, aim, TA);
 | 
			
		||||
 | 
			
		||||
	if(pVic->IsAlive())
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	pAtt->saveKill(pVic,weapon,( aim == 1 ) ? 1:0 ,TA);
 | 
			
		||||
 | 
			
		||||
	MF_ExecuteForward(iFDeath,pAtt->index, pVic->index, weapon, aim, TA);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// player,wid
 | 
			
		||||
static cell AMX_NATIVE_CALL cwpn_shot(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int index = params[2];
 | 
			
		||||
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	int weapon = params[1];
 | 
			
		||||
	if(weapon < DODMAX_WEAPONS-DODMAX_CUSTOMWPNS)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid custom weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	pPlayer->saveShot(weapon);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_maxweapons(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return DODMAX_WEAPONS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_stats_size(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return 9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL is_custom(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int weapon = params[1];
 | 
			
		||||
 | 
			
		||||
	if(weapon < DODMAX_WEAPONS-DODMAX_CUSTOMWPNS)
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// player,wid
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_get_user_team(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	return pPlayer->pEdict->v.team;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// player,wid
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params)
 | 
			
		||||
{ 
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	int iTeam = pPlayer->pEdict->v.team; 
 | 
			
		||||
 | 
			
		||||
	if ( params[3] )
 | 
			
		||||
	{ 
 | 
			
		||||
		const char *szTeam = ""; 
 | 
			
		||||
		switch(iTeam)
 | 
			
		||||
		{
 | 
			
		||||
		case 1: 
 | 
			
		||||
			szTeam = "Allies"; 
 | 
			
		||||
			break; 
 | 
			
		||||
 | 
			
		||||
		case 2: 
 | 
			
		||||
			szTeam = "Axis"; 
 | 
			
		||||
			break; 
 | 
			
		||||
		} 
 | 
			
		||||
 | 
			
		||||
		MF_SetAmxString(amx,params[2],szTeam,params[3]); 
 | 
			
		||||
	} 
 | 
			
		||||
	return iTeam; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_set_model(AMX *amx, cell *params) // player,model
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if(!pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid Player, Not on Server");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int length;
 | 
			
		||||
	pPlayer->initModel((char*)STRING(ALLOC_STRING(MF_GetAmxString(amx, params[2], 1, &length))));
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_set_body(AMX *amx, cell *params) // player,bodynumber
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if(!pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid Player, Not on Server");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pPlayer->setBody(params[2]);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_clear_model(AMX *amx, cell *params) // player
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if(!pPlayer->ingame)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	pPlayer->clearModel();
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
0 [Byte]	1	// Weapons Groupings
 | 
			
		||||
1 [Byte]	210	// Total Rounds Allowed
 | 
			
		||||
2 [Byte]	-1	// Undefined Not Used
 | 
			
		||||
3 [Byte]	-1	// Undefined Not Used
 | 
			
		||||
4 [Byte]	2	// Weapon Slot
 | 
			
		||||
5 [Byte]	0	// Bucket ( Position Under Weapon Slot )
 | 
			
		||||
6 [Short]	7	// Weapon Number / Bit Field for the weapon
 | 
			
		||||
7 [Byte]	128	// Bit Field for the Ammo or Ammo Type
 | 
			
		||||
8 [Byte]	30	// Rounds Per Mag
 | 
			
		||||
 | 
			
		||||
id, wpnID, slot, position, totalrds
 | 
			
		||||
*/
 | 
			
		||||
static cell AMX_NATIVE_CALL dod_weaponlist(AMX *amx, cell *params) // player
 | 
			
		||||
{
 | 
			
		||||
	if(!weaponlist[params[1]].changeable)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "This Weapon Cannot be Changed");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int id = params[1];
 | 
			
		||||
	int wpnID = params[2];
 | 
			
		||||
	int slot = params[3];
 | 
			
		||||
	int position = params[4];
 | 
			
		||||
	int totalrds = params[5];
 | 
			
		||||
 | 
			
		||||
	UTIL_LogPrintf("ID (%d) WpnID (%d) Slot (%d) Pos (%d) Rounds (%d)", id, wpnID, slot, position, totalrds);
 | 
			
		||||
 | 
			
		||||
	CHECK_PLAYER(id);
 | 
			
		||||
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(id);
 | 
			
		||||
	if(!pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid Player, Not on Server");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "WeaponList", NULL), NULL, INDEXENT(id));
 | 
			
		||||
	WRITE_BYTE(weaponlist[wpnID].grp);
 | 
			
		||||
		WRITE_BYTE(totalrds);
 | 
			
		||||
		WRITE_BYTE(-1);
 | 
			
		||||
		WRITE_BYTE(-1);
 | 
			
		||||
		WRITE_BYTE(slot - 1);
 | 
			
		||||
		WRITE_BYTE(position);
 | 
			
		||||
		WRITE_SHORT(wpnID);
 | 
			
		||||
		WRITE_BYTE(weaponlist[wpnID].bitfield);
 | 
			
		||||
 | 
			
		||||
		// Is it grenades
 | 
			
		||||
		if(wpnID == 13 || wpnID == 14 || wpnID == 15 || wpnID == 16 || wpnID == 36)
 | 
			
		||||
			WRITE_BYTE(-1);
 | 
			
		||||
		else if(wpnID == 29 || wpnID == 30 || wpnID == 31)
 | 
			
		||||
			WRITE_BYTE(1);
 | 
			
		||||
		else
 | 
			
		||||
			WRITE_BYTE(weaponlist[wpnID].clip);
 | 
			
		||||
	MESSAGE_END();
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO base_Natives[] = 
 | 
			
		||||
{
 | 
			
		||||
	{ "dod_wpnlog_to_name", wpnlog_to_name },
 | 
			
		||||
	{ "dod_wpnlog_to_id", wpnlog_to_id },
 | 
			
		||||
 | 
			
		||||
	{ "dod_get_team_score", get_team_score },
 | 
			
		||||
	{ "dod_get_user_score", get_user_score },
 | 
			
		||||
	{ "dod_get_user_class", get_user_class },
 | 
			
		||||
	{ "dod_get_user_weapon", get_user_weapon },
 | 
			
		||||
	
 | 
			
		||||
	{ "dod_weapon_type", dod_weapon_type },
 | 
			
		||||
 | 
			
		||||
	{ "dod_get_map_info", get_map_info },
 | 
			
		||||
	{ "dod_user_kill", user_kill },
 | 
			
		||||
	{ "dod_get_pronestate", get_user_pronestate },
 | 
			
		||||
 | 
			
		||||
	{ "xmod_get_wpnname", get_weapon_name },
 | 
			
		||||
	{ "xmod_get_wpnlogname", get_weapon_logname },
 | 
			
		||||
	{ "xmod_is_melee_wpn", is_melee },
 | 
			
		||||
	{ "xmod_get_maxweapons", get_maxweapons },
 | 
			
		||||
	{ "xmod_get_stats_size", get_stats_size },
 | 
			
		||||
	{ "xmod_is_custom_wpn", is_custom },
 | 
			
		||||
  
 | 
			
		||||
	{ "register_statsfwd",register_forward },
 | 
			
		||||
 | 
			
		||||
	// Custom Weapon Support
 | 
			
		||||
	{ "custom_weapon_add", register_cwpn }, // name,melee,logname
 | 
			
		||||
	{ "custom_weapon_dmg", cwpn_dmg },
 | 
			
		||||
	{ "custom_weapon_shot", cwpn_shot },
 | 
			
		||||
 | 
			
		||||
	//****************************************
 | 
			
		||||
 | 
			
		||||
	{ "get_user_team", get_user_team },
 | 
			
		||||
	{ "get_weaponname", get_weapon_name },
 | 
			
		||||
	{ "get_user_weapon", get_user_weapon },
 | 
			
		||||
	{ "dod_get_user_team", dod_get_user_team },
 | 
			
		||||
	{ "dod_get_wpnname", get_weapon_name },
 | 
			
		||||
	{ "dod_get_wpnlogname", get_weapon_logname },
 | 
			
		||||
	{ "dod_is_melee", is_melee },
 | 
			
		||||
 | 
			
		||||
	{"dod_set_model",		dod_set_model},
 | 
			
		||||
	{"dod_set_body_number",	dod_set_body},
 | 
			
		||||
	{"dod_clear_model",		dod_clear_model},
 | 
			
		||||
	{"dod_set_weaponlist",	dod_weaponlist},
 | 
			
		||||
 | 
			
		||||
	///*******************
 | 
			
		||||
	{ NULL, NULL } 
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										286
									
								
								modules/dod/dodx/NRank.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										286
									
								
								modules/dod/dodx/NRank.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,286 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_astats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int attacker = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(attacker);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->attackers[attacker].hits){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->attackers[attacker];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		if (params[6] && attacker && stats->name)
 | 
			
		||||
			MF_SetAmxString(amx,params[5],stats->name,params[6]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_vstats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYERRANGE(index);
 | 
			
		||||
	int victim = params[2];
 | 
			
		||||
	CHECK_PLAYERRANGE(victim);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->victims[victim].hits){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->victims[victim];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		if (params[6] && victim && stats->name)
 | 
			
		||||
			MF_SetAmxString(amx,params[5],stats->name,params[6]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_wlstats(AMX *amx, cell *params) /* 4 param */ // DEC-Weapon (round) stats (end)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	int weapon = params[2];
 | 
			
		||||
	if (weapon<0||weapon>=DODMAX_WEAPONS){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->weaponsLife[weapon].shots){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		Stats* stats = &pPlayer->weaponsLife[weapon];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		cpStats[7] = stats->points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_wrstats(AMX *amx, cell *params) /* 4 param */ // DEC-Weapon (round) stats (end)
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index)
 | 
			
		||||
	int weapon = params[2];
 | 
			
		||||
	if (weapon<0||weapon>=DODMAX_WEAPONS){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->weaponsLife[weapon].shots){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		Stats* stats = &pPlayer->weaponsRnd[weapon];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		cpStats[7] = stats->points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_wstats(AMX *amx, cell *params) /* 4 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index)
 | 
			
		||||
	int weapon = params[2];
 | 
			
		||||
	if (weapon<0||weapon>=DODMAX_WEAPONS){
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon id %d", weapon);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->weapons[weapon].shots){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		CPlayer::PlayerWeapon* stats = &pPlayer->weapons[weapon];
 | 
			
		||||
		cpStats[0] = stats->kills;
 | 
			
		||||
		cpStats[1] = stats->deaths;
 | 
			
		||||
		cpStats[2] = stats->hs;
 | 
			
		||||
		cpStats[3] = stats->tks;
 | 
			
		||||
		cpStats[4] = stats->shots;
 | 
			
		||||
		cpStats[5] = stats->hits;
 | 
			
		||||
		cpStats[6] = stats->damage;
 | 
			
		||||
		cpStats[7] = stats->points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = stats->bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL reset_user_wstats(AMX *amx, cell *params) /* 6 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	pPlayer->restartStats();
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_stats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if ( pPlayer->ingame ){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cpStats[0] = pPlayer->rank->kills;
 | 
			
		||||
		cpStats[1] = pPlayer->rank->deaths;
 | 
			
		||||
		cpStats[2] = pPlayer->rank->hs;
 | 
			
		||||
		cpStats[3] = pPlayer->rank->tks;
 | 
			
		||||
		cpStats[4] = pPlayer->rank->shots;
 | 
			
		||||
		cpStats[5] = pPlayer->rank->hits;
 | 
			
		||||
		cpStats[6] = pPlayer->rank->damage;
 | 
			
		||||
		cpStats[7] = pPlayer->rank->points;
 | 
			
		||||
		cpStats[8] = pPlayer->rank->getPosition();
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = pPlayer->rank->bodyHits[i];
 | 
			
		||||
		return pPlayer->rank->getPosition();
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_lstats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index);
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cpStats[0] = pPlayer->life.kills;
 | 
			
		||||
		cpStats[1] = pPlayer->life.deaths;
 | 
			
		||||
		cpStats[2] = pPlayer->life.hs;
 | 
			
		||||
		cpStats[3] = pPlayer->life.tks;
 | 
			
		||||
		cpStats[4] = pPlayer->life.shots;
 | 
			
		||||
		cpStats[5] = pPlayer->life.hits;
 | 
			
		||||
		cpStats[6] = pPlayer->life.damage;
 | 
			
		||||
		cpStats[7] = pPlayer->life.points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = pPlayer->life.bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_user_rstats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	CHECK_PLAYER(index)
 | 
			
		||||
	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
 | 
			
		||||
	if (pPlayer->ingame){
 | 
			
		||||
		cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cpStats[0] = pPlayer->round.kills;
 | 
			
		||||
		cpStats[1] = pPlayer->round.deaths;
 | 
			
		||||
		cpStats[2] = pPlayer->round.hs;
 | 
			
		||||
		cpStats[3] = pPlayer->round.tks;
 | 
			
		||||
		cpStats[4] = pPlayer->round.shots;
 | 
			
		||||
		cpStats[5] = pPlayer->round.hits;
 | 
			
		||||
		cpStats[6] = pPlayer->round.damage;
 | 
			
		||||
		cpStats[7] = pPlayer->round.points;
 | 
			
		||||
		for(int i = 1; i < 8; ++i)
 | 
			
		||||
			cpBodyHits[i] = pPlayer->round.bodyHits[i];
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_stats(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
	int index = params[1] + 1;
 | 
			
		||||
	for(RankSystem::iterator a = g_rank.front(); a ; --a){
 | 
			
		||||
		if ((*a).getPosition() == index)  {
 | 
			
		||||
			cell *cpStats = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
			cell *cpBodyHits = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
			cpStats[0] = (*a).kills;
 | 
			
		||||
			cpStats[1] = (*a).deaths;
 | 
			
		||||
			cpStats[2] = (*a).hs;
 | 
			
		||||
			cpStats[3] = (*a).tks;
 | 
			
		||||
			cpStats[4] = (*a).shots;
 | 
			
		||||
			cpStats[5] = (*a).hits;
 | 
			
		||||
			cpStats[6] = (*a).damage;
 | 
			
		||||
			cpStats[7] = (*a).points;
 | 
			
		||||
			cpStats[8] = (*a).getPosition();
 | 
			
		||||
			MF_SetAmxString(amx,params[4],(*a).getName(),params[5]);
 | 
			
		||||
			for(int i = 1; i < 8; ++i)
 | 
			
		||||
				cpBodyHits[i] = (*a).bodyHits[i];
 | 
			
		||||
			return --a ? (*a).getPosition() : 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_statsnum(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	return g_rank.getRankNum();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO stats_Natives[] = {
 | 
			
		||||
	{ "get_stats",      get_stats},
 | 
			
		||||
	{ "get_statsnum",   get_statsnum},
 | 
			
		||||
	{ "get_user_astats",  get_user_astats },
 | 
			
		||||
	{ "get_user_rstats",  get_user_rstats }, // round stats , cleared after RoundState = 1
 | 
			
		||||
	{ "get_user_lstats",  get_user_lstats }, // from spawn to spawn stats
 | 
			
		||||
	{ "get_user_stats",   get_user_stats },
 | 
			
		||||
	{ "get_user_vstats",  get_user_vstats },
 | 
			
		||||
	{ "get_user_wlstats",  get_user_wlstats}, // DEC-Weapon(Life) Stats
 | 
			
		||||
	{ "get_user_wrstats",  get_user_wrstats}, // DEC-Weapon(Round) Stats
 | 
			
		||||
	{ "get_user_wstats",  get_user_wstats},
 | 
			
		||||
	{ "reset_user_wstats",  reset_user_wstats },
 | 
			
		||||
 | 
			
		||||
	{ NULL, NULL }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										169
									
								
								modules/dod/dodx/Utils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								modules/dod/dodx/Utils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
/* Weapon names aren't send in WeaponList message in DoD */
 | 
			
		||||
weapon_t weaponData[] = 
 | 
			
		||||
{
 | 
			
		||||
	{ false,	false,	{"mortar"},			{"mortar"},			0, DODWT_OTHER },
 | 
			
		||||
	{ true,		true,	{"amerknife"},		{"knife"},			0, DODWT_MELEE }, // aknife->bknife
 | 
			
		||||
	{ false,	true,	{"gerknife"},		{"knife"},			0, DODWT_MELEE },
 | 
			
		||||
	{ false,	false,	{"colt"},			{"Colt"},				4, DODWT_SECONDARY }, 
 | 
			
		||||
	{ false,	false,	{"luger"},			{"Luger"},			4, DODWT_SECONDARY },
 | 
			
		||||
	{ true,		false,	{"garand"},			{"Garand"},			3, DODWT_PRIMARY }, // Garand->Garand butt
 | 
			
		||||
	{ false,	false,	{"scopedkar"},		{"scoped K98"},		3, DODWT_PRIMARY }, 
 | 
			
		||||
	{ false,	false,	{"thompson"},		{"Thompson"},			1, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"mp44"},			{"STG44"},			6, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"spring"},			{"Springfield"},		5, DODWT_PRIMARY },  
 | 
			
		||||
	{ true,		false,	{"kar"},			{"K98"},				3, DODWT_PRIMARY }, // KAR->KAR bayonet
 | 
			
		||||
	{ false,	false,	{"bar"},			{"BAR"},				6, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"mp40"},			{"MP40"},				1, DODWT_PRIMARY }, 
 | 
			
		||||
	{ false,	false,	{"grenade"},		{"handgrenade"},		9, DODWT_GRENADE },
 | 
			
		||||
	{ false,	false,	{"grenade2"},		{"stickgrenade"},		11, DODWT_GRENADE },
 | 
			
		||||
	{ false,	false,	{"stickgrenade_ex"},{"stickgrenade_ex"},	11, DODWT_GRENADE },
 | 
			
		||||
	{ false,	false,	{"handgrenade_ex"},	{"handgrenade_ex"},	 9, DODWT_GRENADE },
 | 
			
		||||
	{ false,	false,	{"mg42"},			{"MG42"},				 7, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"30cal"},			{".30 cal"},			 8, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	true,	{"spade"},			{"spade"},			 0, DODWT_MELEE },
 | 
			
		||||
	{ true,		false,	{"m1carbine"},		{"M1 Carbine"},		 2, DODWT_PRIMARY },  // M1 Carbine->Folding Carbine
 | 
			
		||||
	{ false,	false,	{"mg34"},			{"MG34"},				 2, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"greasegun"},		{"Greasegun"},		 1, DODWT_PRIMARY },
 | 
			
		||||
	{ true,		false,	{"fg42"},			{"FG42"},				 6, DODWT_PRIMARY }, // FG42 -> scoped FG42
 | 
			
		||||
	{ true,		false,	{"k43"},			{"K43"},				 2, DODWT_PRIMARY },
 | 
			
		||||
	{ true,		false,	{"enfield"},		{"Enfield"},			 3, DODWT_PRIMARY }, // Enfield->Scoped Enfield->Enfield bayonet
 | 
			
		||||
	{ false,	false,	{"sten"},			{"Sten"},				 1, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"bren"},			{"Bren"},				 6, DODWT_PRIMARY }, 
 | 
			
		||||
	{ false,	false,	{"webley"},			{"Webley"},			 4, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"bazooka"},		{"Bazooka"},			13, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"pschreck"},		{"Panzerschrek"},		13, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"piat"},			{"Piat"},				13, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"scoped_fg42"},	{"scoped FG42"},		 6, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"fcarbine"},		{"Folding Carbine"},	 0, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	true,	{"bayonet"},		{"K98 bayonet"},		 0, DODWT_MELEE }, // KAR bayonet
 | 
			
		||||
	{ false,	false,	{"scoped_enfield"},	{"scoped Enfield"},	 3, DODWT_PRIMARY },
 | 
			
		||||
	{ false,	false,	{"mills_bomb"},		{"mills bomb"},		 9, DODWT_GRENADE },
 | 
			
		||||
	{ false,	true,	{"brit_knife"},		{"knife"},			 0, DODWT_MELEE }, 
 | 
			
		||||
	{ false,	true,	{"garandbutt"},		{"Garand butt"},		 0, DODWT_MELEE }, // Garand butt
 | 
			
		||||
	{ false,	true,	{"enf_bayonet"},	{"Enfield bayonet"},	 0, DODWT_MELEE },
 | 
			
		||||
	{ false,	false,	{"mortar"},			{"mortar"},			 0, DODWT_OTHER }, // mortar new id
 | 
			
		||||
	{ false,	true,	{"k43butt"},		{"K43 butt"},			 0, DODWT_MELEE },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Function will select correct id */
 | 
			
		||||
int get_weaponid(CPlayer* pPlayer)
 | 
			
		||||
{
 | 
			
		||||
	int weapon = pPlayer->current;
 | 
			
		||||
	const char *sz;
 | 
			
		||||
	switch(weapon) 
 | 
			
		||||
	{
 | 
			
		||||
	case  1: 
 | 
			
		||||
		if(g_map.detect_allies_country) weapon = 37; 
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case  5: 
 | 
			
		||||
		if(pPlayer->pEdict->v.button&IN_ATTACK2) weapon = 38; 
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 10: 
 | 
			
		||||
		if(pPlayer->pEdict->v.button&IN_ATTACK2) weapon = 34; 
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 20: 
 | 
			
		||||
		if(g_map.detect_allies_paras) weapon = 33;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 23: 
 | 
			
		||||
        sz = STRING(pPlayer->pEdict->v.weaponmodel);
 | 
			
		||||
        if(sz[13] == 's')
 | 
			
		||||
			weapon = 32; 	
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 24: 
 | 
			
		||||
		if(pPlayer->pEdict->v.button&IN_ATTACK2) weapon = 41; 
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 25:
 | 
			
		||||
        sz = STRING(pPlayer->pEdict->v.weaponmodel);
 | 
			
		||||
        if(sz[16] == 's')
 | 
			
		||||
			 weapon = 35; 
 | 
			
		||||
		else if(pPlayer->pEdict->v.button&IN_ATTACK2)
 | 
			
		||||
			 weapon = 39;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case 15:
 | 
			
		||||
        weapon = 14;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case 16:
 | 
			
		||||
        if(g_map.detect_allies_country) weapon = 36;
 | 
			
		||||
        else weapon = 13;
 | 
			
		||||
        break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return weapon;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
traceVault traceData[] = 
 | 
			
		||||
{
 | 
			
		||||
	{ "grenade", 13, ACT_NADE_PUT|ACT_NADE_SHOT, 2.0 }, // or 36
 | 
			
		||||
	{ "grenade2", 14, ACT_NADE_PUT|ACT_NADE_SHOT, 2.0 },  
 | 
			
		||||
	{ "shell_bazooka", 29, ACT_ROCKET_PUT|ACT_ROCKET_SHOT, 2.0 },
 | 
			
		||||
	{ "shell_pschreck", 30, ACT_ROCKET_PUT|ACT_ROCKET_SHOT, 2.0 },
 | 
			
		||||
	{ "shell_piat", 31, ACT_ROCKET_PUT|ACT_ROCKET_SHOT, 2.0 },
 | 
			
		||||
	{ "monster_mortar", 40, ACT_NADE_PUT|ACT_NADE_SHOT, 2.0 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
bool ignoreBots (edict_t *pEnt, edict_t *pOther)
 | 
			
		||||
{
 | 
			
		||||
	if(!rankBots && (pEnt->v.flags & FL_FAKECLIENT || (pOther && pOther->v.flags & FL_FAKECLIENT)))
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool isModuleActive()
 | 
			
		||||
{
 | 
			
		||||
	if(!(int)CVAR_GET_FLOAT("dodstats_pause"))
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityByString(edict_t *pentStart, const char *szKeyword, const char *szValue)
 | 
			
		||||
{
 | 
			
		||||
	edict_t *pentEntity;
 | 
			
		||||
	pentEntity = FIND_ENTITY_BY_STRING(pentStart, szKeyword, szValue);
 | 
			
		||||
 | 
			
		||||
	if(!FNullEnt(pentEntity))
 | 
			
		||||
		return pentEntity;
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName)
 | 
			
		||||
{
 | 
			
		||||
	return FindEntityByString(pentStart, "classname", szName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
edict_t *FindEntityInSphere(edict_t *pentStart, edict_t *origin, float radius)
 | 
			
		||||
{
 | 
			
		||||
	edict_t* temp = FIND_ENTITY_IN_SPHERE(pentStart, origin->v.origin, radius);
 | 
			
		||||
 | 
			
		||||
	if(!temp)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	return temp;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										201
									
								
								modules/dod/dodx/dodx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								modules/dod/dodx/dodx.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef DODX_H
 | 
			
		||||
#define DODX_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "CMisc.h"
 | 
			
		||||
#include "CRank.h"
 | 
			
		||||
 | 
			
		||||
#define GET_PLAYER_POINTER(e)   (&players[ENTINDEX(e)])
 | 
			
		||||
#define GET_PLAYER_POINTER_I(i) (&players[i])
 | 
			
		||||
 | 
			
		||||
#ifndef GETPLAYERAUTHID
 | 
			
		||||
	#define GETPLAYERAUTHID		(*g_engfuncs.pfnGetPlayerAuthId)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO stats_Natives[];
 | 
			
		||||
extern AMX_NATIVE_INFO base_Natives[];
 | 
			
		||||
extern AMX_NATIVE_INFO pd_Natives[];
 | 
			
		||||
 | 
			
		||||
// Weapons grabbing by type
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	DODWT_PRIMARY = 0,
 | 
			
		||||
	DODWT_SECONDARY,
 | 
			
		||||
	DODWT_MELEE,
 | 
			
		||||
	DODWT_GRENADE, 
 | 
			
		||||
	DODWT_OTHER
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Model Sequences
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	DOD_SEQ_PRONE_IDLE = 15,
 | 
			
		||||
	DOD_SEQ_PRONE_FORWARD,
 | 
			
		||||
	DOD_SEQ_PRONE_DOWN,
 | 
			
		||||
	DOD_SEQ_PRONE_UP
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Weapons Structure
 | 
			
		||||
struct weapon_t 
 | 
			
		||||
{
 | 
			
		||||
	bool needcheck;
 | 
			
		||||
	bool melee;
 | 
			
		||||
	char logname[16];
 | 
			
		||||
	char name[32];
 | 
			
		||||
	int ammoSlot;
 | 
			
		||||
	int type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct weaponlist_s
 | 
			
		||||
{
 | 
			
		||||
	int grp;
 | 
			
		||||
	int bitfield;
 | 
			
		||||
	int clip;
 | 
			
		||||
	bool changeable;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern bool rankBots;
 | 
			
		||||
extern int mState;
 | 
			
		||||
extern int mDest;
 | 
			
		||||
extern int mCurWpnEnd;
 | 
			
		||||
extern int mPlayerIndex;
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon(void*);
 | 
			
		||||
void Client_CurWeapon_End(void*);
 | 
			
		||||
void Client_Health_End(void*);
 | 
			
		||||
void Client_ResetHUD_End(void*);
 | 
			
		||||
void Client_ObjScore(void*);
 | 
			
		||||
void Client_TeamScore(void*);
 | 
			
		||||
void Client_RoundState(void*);
 | 
			
		||||
void Client_AmmoX(void*);
 | 
			
		||||
void Client_AmmoShort(void*);
 | 
			
		||||
void Client_SetFOV(void*);
 | 
			
		||||
void Client_SetFOV_End(void*);
 | 
			
		||||
void Client_Object(void*);
 | 
			
		||||
void Client_Object_End(void*);
 | 
			
		||||
void Client_PStatus(void*);
 | 
			
		||||
 | 
			
		||||
typedef void (*funEventCall)(void*);
 | 
			
		||||
 | 
			
		||||
extern int AlliesScore;
 | 
			
		||||
extern int AxisScore;
 | 
			
		||||
 | 
			
		||||
extern int gmsgCurWeapon;
 | 
			
		||||
extern int gmsgCurWeaponEnd;
 | 
			
		||||
extern int gmsgHealth;
 | 
			
		||||
extern int gmsgResetHUD;
 | 
			
		||||
extern int gmsgObjScore;
 | 
			
		||||
extern int gmsgRoundState;
 | 
			
		||||
extern int gmsgTeamScore;
 | 
			
		||||
extern int gmsgScoreShort;
 | 
			
		||||
extern int gmsgPTeam;
 | 
			
		||||
extern int gmsgAmmoX;
 | 
			
		||||
extern int gmsgAmmoShort;
 | 
			
		||||
extern int gmsgSetFOV;
 | 
			
		||||
extern int gmsgSetFOV_End;
 | 
			
		||||
extern int gmsgObject;
 | 
			
		||||
extern int gmsgObject_End;
 | 
			
		||||
extern int gmsgPStatus;
 | 
			
		||||
 | 
			
		||||
extern int iFDamage;
 | 
			
		||||
extern int iFDeath;
 | 
			
		||||
extern int iFScore;
 | 
			
		||||
extern int iFSpawnForward;
 | 
			
		||||
extern int iFTeamForward;
 | 
			
		||||
extern int iFClassForward;
 | 
			
		||||
extern int iFScopeForward;
 | 
			
		||||
extern int iFProneForward;
 | 
			
		||||
extern int iFWpnPickupForward;
 | 
			
		||||
extern int iFCurWpnForward;
 | 
			
		||||
extern int iFGrenadeExplode;
 | 
			
		||||
extern int iFRocketExplode;
 | 
			
		||||
extern int iFObjectTouched;
 | 
			
		||||
extern int iFStaminaForward;
 | 
			
		||||
 | 
			
		||||
extern cvar_t* dodstats_maxsize;
 | 
			
		||||
extern cvar_t* dodstats_rank;
 | 
			
		||||
extern cvar_t* dodstats_reset;
 | 
			
		||||
extern cvar_t* dodstats_rankbots;
 | 
			
		||||
extern cvar_t* dodstats_pause;
 | 
			
		||||
 | 
			
		||||
extern weapon_t weaponData[DODMAX_WEAPONS];
 | 
			
		||||
extern traceVault traceData[MAX_TRACE];
 | 
			
		||||
 | 
			
		||||
extern Grenades g_grenades;
 | 
			
		||||
extern RankSystem g_rank;
 | 
			
		||||
extern CPlayer players[33];
 | 
			
		||||
extern CPlayer* mPlayer;
 | 
			
		||||
extern CMapInfo g_map;
 | 
			
		||||
 | 
			
		||||
int get_weaponid(CPlayer* player);
 | 
			
		||||
bool ignoreBots (edict_t *pEnt, edict_t *pOther = NULL );
 | 
			
		||||
bool isModuleActive();
 | 
			
		||||
edict_t *FindEntityByString(edict_t *pentStart, const char *szKeyword, const char *szValue);
 | 
			
		||||
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName);
 | 
			
		||||
edict_t *FindEntityInSphere(edict_t *pentStart, edict_t *origin, float radius);
 | 
			
		||||
 | 
			
		||||
#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_PLAYERRANGE(x) \
 | 
			
		||||
	if (x > gpGlobals->maxClients || x < 0) \
 | 
			
		||||
	{ \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Player out of range (%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 // DODX_H
 | 
			
		||||
							
								
								
									
										509
									
								
								modules/dod/dodx/moduleconfig.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										509
									
								
								modules/dod/dodx/moduleconfig.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,509 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
funEventCall modMsgsEnd[MAX_REG_MSGS];
 | 
			
		||||
funEventCall modMsgs[MAX_REG_MSGS];
 | 
			
		||||
void (*function)(void*);
 | 
			
		||||
void (*endfunction)(void*);
 | 
			
		||||
CPlayer* mPlayer;
 | 
			
		||||
CPlayer players[33];
 | 
			
		||||
CMapInfo g_map;
 | 
			
		||||
 | 
			
		||||
bool rankBots;
 | 
			
		||||
int mState;
 | 
			
		||||
int mDest;
 | 
			
		||||
int mCurWpnEnd;
 | 
			
		||||
int mPlayerIndex;
 | 
			
		||||
 | 
			
		||||
int AlliesScore;
 | 
			
		||||
int AxisScore;
 | 
			
		||||
 | 
			
		||||
int iFDamage = -1;
 | 
			
		||||
int iFDeath = -1;
 | 
			
		||||
int iFScore = -1;
 | 
			
		||||
int iFSpawnForward = -1;
 | 
			
		||||
int iFTeamForward = -1;
 | 
			
		||||
int iFClassForward = -1;
 | 
			
		||||
int iFScopeForward = -1;
 | 
			
		||||
int iFProneForward = -1;
 | 
			
		||||
int iFWpnPickupForward = -1;
 | 
			
		||||
int iFCurWpnForward = -1;
 | 
			
		||||
int iFGrenadeExplode = -1;
 | 
			
		||||
int iFRocketExplode = -1;
 | 
			
		||||
int iFObjectTouched = -1;
 | 
			
		||||
int iFStaminaForward = -1;
 | 
			
		||||
 | 
			
		||||
int gmsgCurWeapon;
 | 
			
		||||
int gmsgCurWeaponEnd;
 | 
			
		||||
int gmsgHealth;
 | 
			
		||||
int gmsgResetHUD;
 | 
			
		||||
int gmsgObjScore;
 | 
			
		||||
int gmsgRoundState;
 | 
			
		||||
int gmsgTeamScore;
 | 
			
		||||
int gmsgScoreShort;
 | 
			
		||||
int gmsgPTeam;
 | 
			
		||||
int gmsgAmmoX;
 | 
			
		||||
int gmsgAmmoShort;
 | 
			
		||||
int gmsgSetFOV;
 | 
			
		||||
int gmsgSetFOV_End;
 | 
			
		||||
int gmsgObject;
 | 
			
		||||
int gmsgObject_End;
 | 
			
		||||
int gmsgPStatus;
 | 
			
		||||
 | 
			
		||||
RankSystem g_rank;
 | 
			
		||||
Grenades g_grenades;
 | 
			
		||||
 | 
			
		||||
cvar_t init_dodstats_maxsize ={"dodstats_maxsize","3500", 0 , 3500.0 };
 | 
			
		||||
cvar_t init_dodstats_reset ={"dodstats_reset","0"};
 | 
			
		||||
cvar_t init_dodstats_rank ={"dodstats_rank","0"};
 | 
			
		||||
cvar_t init_dodstats_rankbots ={"dodstats_rankbots","1"};
 | 
			
		||||
cvar_t init_dodstats_pause = {"dodstats_pause","0"};
 | 
			
		||||
cvar_t *dodstats_maxsize;
 | 
			
		||||
cvar_t *dodstats_reset;
 | 
			
		||||
cvar_t *dodstats_rank;
 | 
			
		||||
cvar_t *dodstats_rankbots;
 | 
			
		||||
cvar_t *dodstats_pause;
 | 
			
		||||
 | 
			
		||||
// User Messages
 | 
			
		||||
struct sUserMsg 
 | 
			
		||||
{
 | 
			
		||||
	const char *name;
 | 
			
		||||
	int* id;
 | 
			
		||||
	funEventCall func;
 | 
			
		||||
	bool endmsg;
 | 
			
		||||
}
 | 
			
		||||
g_user_msg[] = 
 | 
			
		||||
{
 | 
			
		||||
	{ "CurWeapon",	&gmsgCurWeapon,			Client_CurWeapon,		false },
 | 
			
		||||
	{ "CurWeapon",	&gmsgCurWeaponEnd,		Client_CurWeapon_End,	true  },
 | 
			
		||||
	{ "ObjScore",	&gmsgObjScore,			Client_ObjScore,		false },
 | 
			
		||||
	{ "RoundState",	&gmsgRoundState,		Client_RoundState,		false },
 | 
			
		||||
	{ "Health",		&gmsgHealth,			Client_Health_End,		true  },
 | 
			
		||||
	{ "ResetHUD",	&gmsgResetHUD,			Client_ResetHUD_End,	true  },
 | 
			
		||||
	{ "TeamScore",	&gmsgTeamScore,			Client_TeamScore,		false },
 | 
			
		||||
	{ "AmmoX",		&gmsgAmmoX,				Client_AmmoX,			false },
 | 
			
		||||
	{ "AmmoShort",	&gmsgAmmoShort,			Client_AmmoShort,		false },
 | 
			
		||||
	{ "SetFOV",		&gmsgSetFOV,			Client_SetFOV,			false },
 | 
			
		||||
	{ "SetFOV",		&gmsgSetFOV_End,		Client_SetFOV_End,		true  },
 | 
			
		||||
	{ "Object",		&gmsgObject,			Client_Object,			false },
 | 
			
		||||
	{ "Object",		&gmsgObject_End,		Client_Object_End,		true  },
 | 
			
		||||
	{ "PStatus",	&gmsgPStatus,			Client_PStatus,			false },
 | 
			
		||||
	{ "ScoreShort",	&gmsgScoreShort,		NULL,					false },
 | 
			
		||||
	{ "PTeam",		&gmsgPTeam,				NULL,					false },
 | 
			
		||||
	{ 0,0,0,false }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const char* get_localinfo( const char* name , const char* def = 0 )
 | 
			
		||||
{
 | 
			
		||||
	const char* b = LOCALINFO( (char*)name );
 | 
			
		||||
	if (((b==0)||(*b==0)) && def )
 | 
			
		||||
		SET_LOCALINFO((char*)name,(char*)(b = def) );
 | 
			
		||||
	return b;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int RegUserMsg_Post(const char *pszName, int iSize)
 | 
			
		||||
{
 | 
			
		||||
	for (int i = 0; g_user_msg[i].name; ++i )
 | 
			
		||||
	{
 | 
			
		||||
		if(!*g_user_msg[i].id && strcmp(g_user_msg[i].name, pszName) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			int id = META_RESULT_ORIG_RET(int);
 | 
			
		||||
 | 
			
		||||
			*g_user_msg[i].id = id;
 | 
			
		||||
 | 
			
		||||
			if(g_user_msg[i].endmsg)
 | 
			
		||||
				modMsgsEnd[id] = g_user_msg[i].func;
 | 
			
		||||
			else
 | 
			
		||||
				modMsgs[id] = g_user_msg[i].func;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerActivate_Post( edict_t *pEdictList, int edictCount, int clientMax ){
 | 
			
		||||
 | 
			
		||||
	rankBots = (int)dodstats_rankbots->value ? true:false;
 | 
			
		||||
 | 
			
		||||
	for( int i = 1; i <= gpGlobals->maxClients; ++i )
 | 
			
		||||
		GET_PLAYER_POINTER_I(i)->Init( i , pEdictList + i );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlayerPreThink_Post(edict_t *pEntity) 
 | 
			
		||||
{
 | 
			
		||||
	if ( !isModuleActive() )
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
	if (!pPlayer->ingame)
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
 | 
			
		||||
	// Zors
 | 
			
		||||
	pPlayer->PreThink();
 | 
			
		||||
 | 
			
		||||
	if(pPlayer->clearStats && pPlayer->clearStats < gpGlobals->time)
 | 
			
		||||
	{
 | 
			
		||||
		if(!ignoreBots(pEntity))
 | 
			
		||||
		{
 | 
			
		||||
			pPlayer->clearStats = 0.0f;
 | 
			
		||||
			pPlayer->rank->updatePosition( &pPlayer->life );
 | 
			
		||||
			pPlayer->restartStats(false);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pPlayer->clearRound && pPlayer->clearRound < gpGlobals->time)
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->clearRound = 0.0f;
 | 
			
		||||
		memset(&pPlayer->round,0,sizeof(pPlayer->round));
 | 
			
		||||
		memset(pPlayer->weaponsRnd,0,sizeof(pPlayer->weaponsRnd));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->sendScore && pPlayer->sendScore < gpGlobals->time)
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->sendScore = 0;
 | 
			
		||||
		MF_ExecuteForward(iFScore, pPlayer->index, pPlayer->lastScore, pPlayer->savedScore);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerDeactivate() 
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
	for( i = 1;i<=gpGlobals->maxClients; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
 | 
			
		||||
		if (pPlayer->ingame) pPlayer->Disconnect();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ( (g_rank.getRankNum() >= (int)dodstats_maxsize->value) || ((int)dodstats_reset->value == 1) ) 
 | 
			
		||||
	{
 | 
			
		||||
		CVAR_SET_FLOAT("dodstats_reset",0.0);
 | 
			
		||||
		g_rank.clear();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	g_rank.saveRank( MF_BuildPathname("%s",get_localinfo("dodstats") ) );
 | 
			
		||||
 | 
			
		||||
	// clear custom weapons info
 | 
			
		||||
	for ( i=DODMAX_WEAPONS-DODMAX_CUSTOMWPNS;i<DODMAX_WEAPONS;i++)
 | 
			
		||||
		weaponData[i].needcheck = false;
 | 
			
		||||
 | 
			
		||||
	g_map.Init();
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL ClientConnect_Post( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ]  )
 | 
			
		||||
{
 | 
			
		||||
	GET_PLAYER_POINTER(pEntity)->Connect(pszName,pszAddress);
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientDisconnect( edict_t *pEntity ) 
 | 
			
		||||
{
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
 | 
			
		||||
	if (pPlayer->ingame)
 | 
			
		||||
		pPlayer->Disconnect();
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientPutInServer_Post( edict_t *pEntity ) 
 | 
			
		||||
{
 | 
			
		||||
	GET_PLAYER_POINTER(pEntity)->PutInServer();
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientUserInfoChanged_Post( edict_t *pEntity, char *infobuffer ) 
 | 
			
		||||
{
 | 
			
		||||
	CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
 | 
			
		||||
 | 
			
		||||
	const char* name = INFOKEY_VALUE(infobuffer,"name");
 | 
			
		||||
	const char* oldname = STRING(pEntity->v.netname);
 | 
			
		||||
 | 
			
		||||
	if ( pPlayer->ingame)
 | 
			
		||||
	{
 | 
			
		||||
		if ( strcmp(oldname,name) ) 
 | 
			
		||||
		{
 | 
			
		||||
			if (!dodstats_rank->value)
 | 
			
		||||
				pPlayer->rank = g_rank.findEntryInRank( name, name );
 | 
			
		||||
			else
 | 
			
		||||
				pPlayer->rank->setName( name );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	else if ( pPlayer->IsBot() ) 
 | 
			
		||||
	{
 | 
			
		||||
		pPlayer->Connect( name , "127.0.0.1" );
 | 
			
		||||
		pPlayer->PutInServer();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) 
 | 
			
		||||
{
 | 
			
		||||
	if(ed)
 | 
			
		||||
	{
 | 
			
		||||
		mPlayerIndex = ENTINDEX(ed);
 | 
			
		||||
		mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
 | 
			
		||||
	} 
 | 
			
		||||
	
 | 
			
		||||
	else 
 | 
			
		||||
	{
 | 
			
		||||
		mPlayerIndex = 0;
 | 
			
		||||
		mPlayer = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mDest = msg_dest;
 | 
			
		||||
	mState = 0;
 | 
			
		||||
 | 
			
		||||
	if ( msg_type < 0 || msg_type >= MAX_REG_MSGS )
 | 
			
		||||
		msg_type = 0;
 | 
			
		||||
 | 
			
		||||
	function=modMsgs[msg_type];
 | 
			
		||||
	endfunction=modMsgsEnd[msg_type];
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MessageEnd_Post(void) {
 | 
			
		||||
	if (endfunction) (*endfunction)(NULL);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteByte_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteChar_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteShort_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteLong_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteAngle_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteCoord_Post(float flValue) {
 | 
			
		||||
	if (function) (*function)((void *)&flValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteString_Post(const char *sz) {
 | 
			
		||||
	if (function) (*function)((void *)sz);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WriteEntity_Post(int iValue) {
 | 
			
		||||
	if (function) (*function)((void *)&iValue);
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t *e, TraceResult *ptr) 
 | 
			
		||||
{
 | 
			
		||||
	if(ptr->pHit && (ptr->pHit->v.flags&(FL_CLIENT | FL_FAKECLIENT)) &&	e && (e->v.flags&(FL_CLIENT | FL_FAKECLIENT)))
 | 
			
		||||
	{
 | 
			
		||||
		GET_PLAYER_POINTER(e)->aiming = ptr->iHitgroup;
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(e && e->v.owner && e->v.owner->v.flags&(FL_CLIENT | FL_FAKECLIENT))
 | 
			
		||||
	{
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER(e->v.owner);
 | 
			
		||||
 | 
			
		||||
		for(int i = 0;i < MAX_TRACE; i++)
 | 
			
		||||
		{
 | 
			
		||||
			if(strcmp(traceData[i].szName, STRING(e->v.classname)) == 0)
 | 
			
		||||
			{
 | 
			
		||||
				int grenId = (traceData[i].iId == 13 && g_map.detect_allies_country) ? 36 : traceData[i].iId;
 | 
			
		||||
				int rocketId = traceData[i].iId;
 | 
			
		||||
 | 
			
		||||
				if(traceData[i].iAction&ACT_NADE_SHOT)
 | 
			
		||||
				{
 | 
			
		||||
					if(traceData[i].iId == 13 && g_map.detect_allies_country)
 | 
			
		||||
						pPlayer->saveShot(grenId);
 | 
			
		||||
					else
 | 
			
		||||
						pPlayer->saveShot(traceData[i].iId);
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				else if(traceData[i].iAction&ACT_ROCKET_SHOT)
 | 
			
		||||
						pPlayer->saveShot(traceData[i].iId);
 | 
			
		||||
 | 
			
		||||
				cell position[3];
 | 
			
		||||
				position[0] = amx_ftoc(v2[0]);
 | 
			
		||||
				position[1] = amx_ftoc(v2[1]);
 | 
			
		||||
				position[2] = amx_ftoc(v2[2]);
 | 
			
		||||
				cell pos = MF_PrepareCellArray(position, 3);
 | 
			
		||||
 | 
			
		||||
				if(traceData[i].iAction&ACT_NADE_PUT)
 | 
			
		||||
				{
 | 
			
		||||
					g_grenades.put(e, traceData[i].fDel, grenId, GET_PLAYER_POINTER(e->v.owner));
 | 
			
		||||
					MF_ExecuteForward(iFGrenadeExplode, GET_PLAYER_POINTER(e->v.owner)->index, pos, grenId);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(traceData[i].iAction&ACT_ROCKET_PUT)
 | 
			
		||||
					MF_ExecuteForward(iFRocketExplode, pPlayer->index, pos, rocketId);
 | 
			
		||||
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DispatchKeyValue_Post( edict_t *pentKeyvalue, KeyValueData *pkvd )
 | 
			
		||||
{
 | 
			
		||||
	if ( !pkvd->szClassName ){ 
 | 
			
		||||
		// info_doddetect
 | 
			
		||||
		if ( pkvd->szValue[0]=='i' && pkvd->szValue[5]=='d' ){
 | 
			
		||||
			g_map.pEdict = pentKeyvalue;
 | 
			
		||||
			g_map.initialized = true;
 | 
			
		||||
		}
 | 
			
		||||
		RETURN_META(MRES_IGNORED);
 | 
			
		||||
	}
 | 
			
		||||
	// info_doddetect
 | 
			
		||||
	if ( g_map.initialized && pentKeyvalue == g_map.pEdict ){
 | 
			
		||||
		if ( pkvd->szKeyName[0]=='d' && pkvd->szKeyName[7]=='a' ){
 | 
			
		||||
			if ( pkvd->szKeyName[8]=='l' ){
 | 
			
		||||
				switch ( pkvd->szKeyName[14] ){
 | 
			
		||||
				case 'c':
 | 
			
		||||
					g_map.detect_allies_country=atoi(pkvd->szValue);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'p':
 | 
			
		||||
					g_map.detect_allies_paras=atoi(pkvd->szValue);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else if ( pkvd->szKeyName[12]=='p' ) g_map.detect_axis_paras=atoi(pkvd->szValue);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetClientKeyValue(int id, char *protocol, const char *type, const char *var)
 | 
			
		||||
{
 | 
			
		||||
	// ID: Number
 | 
			
		||||
	// protocol: \name\Sgt.MEOW\topcolor\1\bottomcolor\1\cl_lw\1\team\axis\model\axis-inf 
 | 
			
		||||
	// type: model
 | 
			
		||||
	// var: axis-inf
 | 
			
		||||
 | 
			
		||||
	// Check to see if its a player and we are setting a model
 | 
			
		||||
	if(strcmp(type, "model") == 0 && 
 | 
			
		||||
		(strcmp(var, "axis-inf") == 0 ||
 | 
			
		||||
		 strcmp(var, "axis-para") == 0 || 
 | 
			
		||||
		 strcmp(var, "us-inf") == 0 ||
 | 
			
		||||
		 strcmp(var, "us-para") == 0 || 
 | 
			
		||||
		 strcmp(var, "brit-inf") == 0))
 | 
			
		||||
	{
 | 
			
		||||
		CPlayer *pPlayer = GET_PLAYER_POINTER_I(id);
 | 
			
		||||
		if(!pPlayer->ingame)
 | 
			
		||||
			RETURN_META(MRES_IGNORED);
 | 
			
		||||
 | 
			
		||||
		if(pPlayer->setModel())
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void OnMetaAttach()
 | 
			
		||||
{
 | 
			
		||||
	CVAR_REGISTER (&init_dodstats_maxsize);
 | 
			
		||||
	CVAR_REGISTER (&init_dodstats_reset);
 | 
			
		||||
	CVAR_REGISTER (&init_dodstats_rank);
 | 
			
		||||
	CVAR_REGISTER (&init_dodstats_rankbots);
 | 
			
		||||
	CVAR_REGISTER (&init_dodstats_pause);
 | 
			
		||||
	dodstats_maxsize=CVAR_GET_POINTER(init_dodstats_maxsize.name);
 | 
			
		||||
	dodstats_reset=CVAR_GET_POINTER(init_dodstats_reset.name);
 | 
			
		||||
	dodstats_rank=CVAR_GET_POINTER(init_dodstats_rank.name);
 | 
			
		||||
	dodstats_rankbots = CVAR_GET_POINTER(init_dodstats_rankbots.name);
 | 
			
		||||
	dodstats_pause = CVAR_GET_POINTER(init_dodstats_pause.name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AmxxCheckGame(const char *game)
 | 
			
		||||
{
 | 
			
		||||
	if (strcasecmp(game, "dod") == 0)
 | 
			
		||||
		return AMXX_GAME_OK;
 | 
			
		||||
 | 
			
		||||
	return AMXX_GAME_BAD;
 | 
			
		||||
}
 | 
			
		||||
void OnAmxxAttach()
 | 
			
		||||
{
 | 
			
		||||
	MF_AddNatives( stats_Natives );
 | 
			
		||||
	MF_AddNatives( base_Natives );
 | 
			
		||||
 | 
			
		||||
	const char* path =  get_localinfo("dodstats_score","addons/amxmodx/data/dodstats.amxx");
 | 
			
		||||
 | 
			
		||||
	if ( path && *path )
 | 
			
		||||
	{
 | 
			
		||||
		char error[128];
 | 
			
		||||
		g_rank.loadCalc( MF_BuildPathname("%s",path) , error  );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ( !g_rank.begin() )
 | 
			
		||||
	{
 | 
			
		||||
		g_rank.loadRank( MF_BuildPathname("%s",
 | 
			
		||||
		get_localinfo("dodstats","addons/amxmodx/data/dodstats.dat") ) );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	g_map.Init();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnAmxxDetach()
 | 
			
		||||
{
 | 
			
		||||
	g_rank.clear();
 | 
			
		||||
	g_grenades.clear();
 | 
			
		||||
	g_rank.unloadCalc();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnPluginsLoaded()
 | 
			
		||||
{
 | 
			
		||||
	iFDeath = MF_RegisterForward("client_death",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFDamage = MF_RegisterForward("client_damage",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFScore = MF_RegisterForward("client_score",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
 | 
			
		||||
	iFTeamForward = MF_RegisterForward("dod_client_changeteam",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*team*/,FP_CELL/*oldteam*/,FP_DONE);
 | 
			
		||||
	iFSpawnForward = MF_RegisterForward("dod_client_spawn",ET_IGNORE,FP_CELL/*id*/,FP_DONE);
 | 
			
		||||
	iFClassForward = MF_RegisterForward("dod_client_changeclass",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*class*/,FP_CELL/*oldclass*/,FP_DONE);
 | 
			
		||||
	iFScopeForward = MF_RegisterForward("dod_client_scope",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*value*/,FP_DONE);
 | 
			
		||||
	iFWpnPickupForward = MF_RegisterForward("dod_client_weaponpickup",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*weapon*/,FP_CELL/*value*/,FP_DONE);
 | 
			
		||||
	iFProneForward = MF_RegisterForward("dod_client_prone",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*value*/,FP_DONE);
 | 
			
		||||
	iFCurWpnForward = MF_RegisterForward("dod_client_weaponswitch",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*wpnold*/,FP_CELL/*wpnew*/,FP_DONE);
 | 
			
		||||
	iFGrenadeExplode = MF_RegisterForward("dod_grenade_explosion",ET_IGNORE,FP_CELL/*id*/,FP_ARRAY/*pos[3]*/,FP_CELL/*wpnid*/,FP_DONE);
 | 
			
		||||
	iFRocketExplode = MF_RegisterForward("dod_rocket_explosion",ET_IGNORE,FP_CELL/*id*/,FP_ARRAY/*pos[3]*/,FP_CELL/*wpnid*/,FP_DONE);
 | 
			
		||||
	iFObjectTouched = MF_RegisterForward("dod_client_objectpickup",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*object*/,FP_ARRAY/*pos[3]*/,FP_CELL/*value*/,FP_DONE);
 | 
			
		||||
	iFStaminaForward = MF_RegisterForward("dod_client_stamina",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*stamina*/,FP_DONE);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										512
									
								
								modules/dod/dodx/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										512
									
								
								modules/dod/dodx/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,512 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
#include <amxmodx_version.h>
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "DoDX"
 | 
			
		||||
#define MODULE_VERSION AMXX_VERSION
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org"
 | 
			
		||||
#define MODULE_LOGTAG "DODX"
 | 
			
		||||
#define MODULE_LIBRARY "dodx"
 | 
			
		||||
#define MODULE_LIBCLASS "xstats"
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * AMXX Init functions
 | 
			
		||||
 * Also consider using FN_META_*
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** AMXX query */
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
 | 
			
		||||
/** AMXX Check Game - module API is NOT available here.
 | 
			
		||||
 * Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
 | 
			
		||||
 * syntax: int AmxxCheckGame(const char *game)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_CHECKGAME AmxxCheckGame
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** AMXX attach
 | 
			
		||||
 * Do native functions init here (MF_AddNatives)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
 | 
			
		||||
/** AMXX Detach (unload) */
 | 
			
		||||
#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
 | 
			
		||||
/** All plugins loaded
 | 
			
		||||
 * Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/** All plugins are about to be unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADING OnPluginsUnloading
 | 
			
		||||
 | 
			
		||||
/** All plugins are now unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADED OnPluginsUnloaded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta detach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				DispatchSpawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				DispatchThink				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				DispatchUse					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				DispatchTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			DispatchKeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
// #define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
#define FN_ClientDisconnect				ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
// #define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
// #define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
#define FN_ServerDeactivate				ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
// #define FN_PlayerPreThink			PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
// #define FN_PlayerPostThink			PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
#define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
#define FN_ClientConnect_Post					ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
// #define FN_ClientKill_Post					ClientKill_Post
 | 
			
		||||
#define FN_ClientPutInServer_Post				ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
#define FN_ClientUserInfoChanged_Post			ClientUserInfoChanged_Post
 | 
			
		||||
#define FN_ServerActivate_Post					ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
#define FN_PlayerPreThink_Post					PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
// #define FN_StartFrame_Post					StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
// #define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
// #define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
// #define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
// #define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
#define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
// #define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
// #define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
// #define FN_EmitSound_Post					EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
#define FN_TraceLine_Post						TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post					TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
#define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
#define FN_MessageEnd_Post						MessageEnd_Post
 | 
			
		||||
#define FN_WriteByte_Post						WriteByte_Post
 | 
			
		||||
#define FN_WriteChar_Post						WriteChar_Post
 | 
			
		||||
#define FN_WriteShort_Post						WriteShort_Post
 | 
			
		||||
#define FN_WriteLong_Post						WriteLong_Post
 | 
			
		||||
#define FN_WriteAngle_Post						WriteAngle_Post
 | 
			
		||||
#define FN_WriteCoord_Post						WriteCoord_Post
 | 
			
		||||
#define FN_WriteString_Post						WriteString_Post
 | 
			
		||||
#define FN_WriteEntity_Post						WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
#define FN_RegUserMsg_Post						RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/dod/dodx/msvc12/dodx.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/dod/dodx/msvc12/dodx.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dodx", "dodx.vcxproj", "{9008A886-2DD0-443C-B468-AD84868D89B0}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{9008A886-2DD0-443C-B468-AD84868D89B0}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{9008A886-2DD0-443C-B468-AD84868D89B0}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{9008A886-2DD0-443C-B468-AD84868D89B0}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{9008A886-2DD0-443C-B468-AD84868D89B0}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										166
									
								
								modules/dod/dodx/msvc12/dodx.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								modules/dod/dodx/msvc12/dodx.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,166 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{9008A886-2DD0-443C-B468-AD84868D89B0}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>dodx</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Release/dodx.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>dodx_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <StructMemberAlignment>4Bytes</StructMemberAlignment>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Release/dodx.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Release/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <ProgramDatabaseFile>.\Release/dodx_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Release/dodx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MkTypLibCompatible>true</MkTypLibCompatible>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <TargetEnvironment>Win32</TargetEnvironment>
 | 
			
		||||
      <TypeLibraryName>.\Debug/dodx.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\..\public;..\..\..\..\public\sdk; ..\..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;dodx_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <PrecompiledHeaderOutputFile>.\Debug/dodx.pch</PrecompiledHeaderOutputFile>
 | 
			
		||||
      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
 | 
			
		||||
      <ObjectFileName>.\Debug/</ObjectFileName>
 | 
			
		||||
      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
 | 
			
		||||
      <BrowseInformation>true</BrowseInformation>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
      <CompileAs>Default</CompileAs>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0409</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <SuppressStartupBanner>true</SuppressStartupBanner>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>.\Debug/dodx_amxx.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <ImportLibrary>.\Debug/dodx_amxx.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp" />
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp" />
 | 
			
		||||
    <ClCompile Include="..\moduleconfig.cpp" />
 | 
			
		||||
    <ClCompile Include="..\NBase.cpp" />
 | 
			
		||||
    <ClCompile Include="..\NRank.cpp" />
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp" />
 | 
			
		||||
    <ClCompile Include="..\Utils.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h" />
 | 
			
		||||
    <ClInclude Include="..\CRank.h" />
 | 
			
		||||
    <ClInclude Include="..\dodx.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodconst.inc" />
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodstats.inc" />
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodx.inc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										76
									
								
								modules/dod/dodx/msvc12/dodx.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								modules/dod/dodx/msvc12/dodx.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{7b3bf548-685a-4efe-a39e-9a9150707224}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{0d75ff4c-4fee-4555-960e-4c6bef90a583}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK">
 | 
			
		||||
      <UniqueIdentifier>{3c361b8e-4250-46f4-9a55-2ae9c7cf46bd}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK\SDK Base">
 | 
			
		||||
      <UniqueIdentifier>{e54cb8e3-b926-4c43-bb8b-1ccde53f2af3}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Pawn Includes">
 | 
			
		||||
      <UniqueIdentifier>{d13b95f6-bd1e-4c68-a7f1-57e4f39ffde3}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\CMisc.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\CRank.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\moduleconfig.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\NBase.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\NRank.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\usermsg.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\Utils.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\CMisc.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\CRank.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\dodx.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>Module SDK</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\..\public\sdk\amxxmodule.h">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodconst.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodstats.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\..\plugins\include\dodx.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										347
									
								
								modules/dod/dodx/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										347
									
								
								modules/dod/dodx/usermsg.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,347 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
// Copyright (C) 2004 Lukasz Wlasinski.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// DODX Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include "dodx.h"
 | 
			
		||||
 | 
			
		||||
void Client_ResetHUD_End(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	mPlayer->clearStats = gpGlobals->time + 0.25f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_RoundState(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	if ( mPlayer ) return;
 | 
			
		||||
	int result = *(int*)mValue;
 | 
			
		||||
	if ( result == 1 )
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=1;i<=gpGlobals->maxClients;i++)
 | 
			
		||||
		{
 | 
			
		||||
			CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
 | 
			
		||||
			if (pPlayer->ingame) 
 | 
			
		||||
			{
 | 
			
		||||
				pPlayer->clearRound = gpGlobals->time + 0.25f;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_TeamScore(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	static int index;
 | 
			
		||||
 | 
			
		||||
	switch(mState++)
 | 
			
		||||
	{
 | 
			
		||||
	case 0:
 | 
			
		||||
		index = *(int*)mValue;
 | 
			
		||||
		break;
 | 
			
		||||
	case 1:
 | 
			
		||||
		switch (index)
 | 
			
		||||
		{
 | 
			
		||||
		case 1:
 | 
			
		||||
			AlliesScore = *(int*)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:
 | 
			
		||||
			AxisScore = *(int*)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_ObjScore(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	static CPlayer *pPlayer;
 | 
			
		||||
	static int score;
 | 
			
		||||
 | 
			
		||||
	switch(mState++)
 | 
			
		||||
	{
 | 
			
		||||
	case 0:
 | 
			
		||||
		pPlayer = GET_PLAYER_POINTER_I(*(int*)mValue);
 | 
			
		||||
		break;
 | 
			
		||||
	case 1:
 | 
			
		||||
		score = *(int*)mValue;
 | 
			
		||||
		if ( (pPlayer->lastScore = score - (int)(pPlayer->savedScore)) && isModuleActive() )
 | 
			
		||||
		{
 | 
			
		||||
			pPlayer->updateScore(pPlayer->current,pPlayer->lastScore);
 | 
			
		||||
			pPlayer->sendScore = (int)(gpGlobals->time + 0.25f);
 | 
			
		||||
		}
 | 
			
		||||
		pPlayer->savedScore = score;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	static int iState;
 | 
			
		||||
	static int iId;
 | 
			
		||||
 | 
			
		||||
	switch (mState++)
 | 
			
		||||
	{
 | 
			
		||||
		case 0: 
 | 
			
		||||
			iState = *(int*)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 1:
 | 
			
		||||
			if (!iState) 
 | 
			
		||||
				break; 
 | 
			
		||||
 | 
			
		||||
			iId = *(int*)mValue;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 2:
 | 
			
		||||
			if(!iState || !isModuleActive())
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			int iClip = *(int*)mValue;
 | 
			
		||||
			mPlayer->old = mPlayer->current;
 | 
			
		||||
			mPlayer->current = iId;
 | 
			
		||||
 | 
			
		||||
			if(weaponData[iId].needcheck)
 | 
			
		||||
			{
 | 
			
		||||
				iId = get_weaponid(mPlayer);
 | 
			
		||||
				mPlayer->current = iId;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(iClip > -1) 
 | 
			
		||||
			{
 | 
			
		||||
				if(mPlayer->current == 17)
 | 
			
		||||
				{
 | 
			
		||||
					if(iClip+2 == mPlayer->weapons[iId].clip)
 | 
			
		||||
					mPlayer->saveShot(iId);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				else 
 | 
			
		||||
				{
 | 
			
		||||
					if ( iClip+1 == mPlayer->weapons[iId].clip)
 | 
			
		||||
						mPlayer->saveShot(iId);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			mPlayer->weapons[iId].clip = iClip;
 | 
			
		||||
			mCurWpnEnd = 1;
 | 
			
		||||
			break;
 | 
			
		||||
	};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_CurWeapon_End(void*)
 | 
			
		||||
{
 | 
			
		||||
	if(mCurWpnEnd == 1 && mPlayer->index && mPlayer->current && mPlayer->old && (mPlayer->current != mPlayer->old))
 | 
			
		||||
		MF_ExecuteForward(iFCurWpnForward, mPlayer->index, mPlayer->current, mPlayer->old);
 | 
			
		||||
 | 
			
		||||
	mCurWpnEnd = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Nie ma damage event ...
 | 
			
		||||
*/
 | 
			
		||||
void Client_Health_End(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
    if ( !isModuleActive() )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	edict_t *enemy = mPlayer->pEdict->v.dmg_inflictor;
 | 
			
		||||
	int damage = (int)mPlayer->pEdict->v.dmg_take;
 | 
			
		||||
 | 
			
		||||
	if ( !mPlayer || !damage || !enemy )
 | 
			
		||||
		return;
 | 
			
		||||
	
 | 
			
		||||
	int weapon = 0;
 | 
			
		||||
	int aim = 0;
 | 
			
		||||
		
 | 
			
		||||
	mPlayer->pEdict->v.dmg_take = 0.0; 
 | 
			
		||||
	
 | 
			
		||||
	CPlayer* pAttacker = NULL;
 | 
			
		||||
 | 
			
		||||
	if(enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT))
 | 
			
		||||
	{
 | 
			
		||||
		pAttacker = GET_PLAYER_POINTER(enemy);
 | 
			
		||||
		weapon = pAttacker->current;
 | 
			
		||||
 | 
			
		||||
		if ( weaponData[weapon].needcheck )
 | 
			
		||||
			weapon = get_weaponid(pAttacker);
 | 
			
		||||
 | 
			
		||||
		aim = pAttacker->aiming;
 | 
			
		||||
 | 
			
		||||
		if ( weaponData[weapon].melee )
 | 
			
		||||
			pAttacker->saveShot(weapon);
 | 
			
		||||
	}
 | 
			
		||||
	else 
 | 
			
		||||
	{
 | 
			
		||||
		g_grenades.find(enemy , &pAttacker , weapon);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int TA = 0;
 | 
			
		||||
	
 | 
			
		||||
	if ( !pAttacker )
 | 
			
		||||
	{
 | 
			
		||||
		pAttacker = mPlayer;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ( pAttacker->index != mPlayer->index )
 | 
			
		||||
	{ 
 | 
			
		||||
		pAttacker->saveHit( mPlayer , weapon , damage, aim );
 | 
			
		||||
 | 
			
		||||
		if ( mPlayer->pEdict->v.team == pAttacker->pEdict->v.team )
 | 
			
		||||
			TA = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	MF_ExecuteForward( iFDamage, pAttacker->index, mPlayer->index, damage, weapon, aim, TA );
 | 
			
		||||
 | 
			
		||||
	if ( !mPlayer->IsAlive() )
 | 
			
		||||
	{
 | 
			
		||||
		pAttacker->saveKill(mPlayer,weapon,( aim == 1 ) ? 1:0 ,TA);
 | 
			
		||||
		MF_ExecuteForward( iFDeath, pAttacker->index, mPlayer->index, weapon, aim, TA );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_AmmoX(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
  static int iAmmo;
 | 
			
		||||
 | 
			
		||||
  switch (mState++)
 | 
			
		||||
  {
 | 
			
		||||
  case 0:
 | 
			
		||||
    iAmmo = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
  case 1:
 | 
			
		||||
	if (!mPlayer ) 
 | 
			
		||||
		break;
 | 
			
		||||
    for(int i = 1; i < MAX_WEAPONS ; ++i)
 | 
			
		||||
	{
 | 
			
		||||
      if (iAmmo == weaponData[i].ammoSlot)
 | 
			
		||||
        mPlayer->weapons[i].ammo = *(int*)mValue;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_AmmoShort(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
  static int iAmmo;
 | 
			
		||||
 | 
			
		||||
  switch (mState++)
 | 
			
		||||
  {
 | 
			
		||||
  case 0:
 | 
			
		||||
    iAmmo = *(int*)mValue;
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 1:
 | 
			
		||||
	if(!mPlayer ) 
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
    for(int i = 1; i < MAX_WEAPONS ; ++i) 
 | 
			
		||||
	{
 | 
			
		||||
      if (iAmmo == weaponData[i].ammoSlot)
 | 
			
		||||
		  mPlayer->weapons[i].ammo = *(int*)mValue;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Called with a value of 90 at start 20 when someone scopes in and 0 when they scope out
 | 
			
		||||
void Client_SetFOV(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	if(!mPlayer)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	mPlayer->Scoping(*(int*)mValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_SetFOV_End(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	if(!mPlayer)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	mPlayer->ScopingCheck();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_Object(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	if(!mPlayer) 
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	// First need to find out what was picked up
 | 
			
		||||
	const char *classname;
 | 
			
		||||
	edict_t* pObject = NULL;
 | 
			
		||||
 | 
			
		||||
	//const char* value;
 | 
			
		||||
 | 
			
		||||
	//if(mValue)
 | 
			
		||||
	//{
 | 
			
		||||
	//	value = (char*)mValue;
 | 
			
		||||
	//}
 | 
			
		||||
 | 
			
		||||
	if(!mPlayer->object.carrying)
 | 
			
		||||
	{
 | 
			
		||||
		// We grab the first object within the sphere of our player
 | 
			
		||||
		pObject = FindEntityInSphere(mPlayer->pEdict, mPlayer->pEdict, 50.0);
 | 
			
		||||
 | 
			
		||||
		// The loop through all the objects within the sphere
 | 
			
		||||
		while(pObject && !FNullEnt(pObject))
 | 
			
		||||
		{
 | 
			
		||||
			classname = STRING(pObject->v.classname);
 | 
			
		||||
 | 
			
		||||
			if(strcmp(classname, "dod_object") == 0)
 | 
			
		||||
			{
 | 
			
		||||
				mPlayer->object.pEdict = pObject;
 | 
			
		||||
				mPlayer->object.do_forward = true;
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			pObject = FindEntityInSphere(pObject, mPlayer->pEdict, 50.0);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		mPlayer->object.do_forward = true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Client_Object_End(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	if(!mPlayer) 
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	float fposition[3];
 | 
			
		||||
 | 
			
		||||
	if(mPlayer->object.do_forward)
 | 
			
		||||
	{
 | 
			
		||||
		mPlayer->object.do_forward = (mPlayer->object.do_forward) ? false : true;
 | 
			
		||||
		mPlayer->object.carrying = (mPlayer->object.carrying) ? false : true;
 | 
			
		||||
 | 
			
		||||
		mPlayer->object.pEdict->v.origin.CopyToArray(fposition);
 | 
			
		||||
		cell position[3]; 
 | 
			
		||||
		position[0] = amx_ftoc(fposition[0]);
 | 
			
		||||
		position[1] = amx_ftoc(fposition[1]);
 | 
			
		||||
		position[2] = amx_ftoc(fposition[2]);
 | 
			
		||||
		cell pos = MF_PrepareCellArray(position, 3);
 | 
			
		||||
		MF_ExecuteForward(iFObjectTouched, mPlayer->index, ENTINDEX(mPlayer->object.pEdict), pos, mPlayer->object.carrying);
 | 
			
		||||
 | 
			
		||||
		if(!mPlayer->object.carrying)
 | 
			
		||||
			mPlayer->object.pEdict = NULL;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This seems to be only called when the player spawns
 | 
			
		||||
void Client_PStatus(void* mValue)
 | 
			
		||||
{
 | 
			
		||||
	switch(mState++)
 | 
			
		||||
	{
 | 
			
		||||
		case 0:
 | 
			
		||||
			MF_ExecuteForward(iFSpawnForward, *(int*)mValue);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										101
									
								
								modules/dod/dodx/version.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								modules/dod/dodx/version.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#include <winresrc.h>
 | 
			
		||||
#include <moduleconfig.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 AMXX_VERSION_FILE
 | 
			
		||||
 PRODUCTVERSION AMXX_VERSION_FILE
 | 
			
		||||
 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", "AMX Mod X"
 | 
			
		||||
            VALUE "FileDescription", "AMX Mod X"
 | 
			
		||||
            VALUE "FileVersion", AMXX_VERSION
 | 
			
		||||
            VALUE "InternalName", MODULE_LIBRARY
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright (c) AMX Mod X Dev Team"
 | 
			
		||||
            VALUE "OriginalFilename", MODULE_LIBRARY "_amxx.dll"
 | 
			
		||||
            VALUE "ProductName", MODULE_NAME
 | 
			
		||||
            VALUE "ProductVersion", AMXX_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								modules/engine/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/engine/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'engine')
 | 
			
		||||
 | 
			
		||||
binary.compiler.defines += [
 | 
			
		||||
  'HAVE_STDINT_H',
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'amxxapi.cpp',
 | 
			
		||||
  'engine.cpp',
 | 
			
		||||
  'entity.cpp',
 | 
			
		||||
  'globals.cpp',
 | 
			
		||||
  'forwards.cpp',
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
  binary.sources += ['version.rc']
 | 
			
		||||
    
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										124
									
								
								modules/engine/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								modules/engine/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../metamod/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = engine
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp amxxapi.cpp engine.cpp entity.cpp globals.cpp forwards.cpp
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/pm_shared\
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										257
									
								
								modules/engine/amxxapi.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								modules/engine/amxxapi.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,257 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "engine.h"
 | 
			
		||||
 | 
			
		||||
BOOL CheckForPublic(const char *publicname);
 | 
			
		||||
 | 
			
		||||
edict_t *g_player_edicts[33];
 | 
			
		||||
 | 
			
		||||
int AmxStringToEngine(AMX *amx, cell param, int &len)
 | 
			
		||||
{
 | 
			
		||||
	char *szString = MF_GetAmxString(amx, param, 0, &len);
 | 
			
		||||
 | 
			
		||||
	return ALLOC_STRING(szString);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClearHooks()
 | 
			
		||||
{
 | 
			
		||||
	size_t i;
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<Touches.length(); i++)
 | 
			
		||||
		delete Touches[i];
 | 
			
		||||
	for (i=0; i<Impulses.length(); i++)
 | 
			
		||||
		delete Impulses[i];
 | 
			
		||||
	for (i=0; i<Thinks.length(); i++)
 | 
			
		||||
		delete Thinks[i];
 | 
			
		||||
 | 
			
		||||
	Touches.clear();
 | 
			
		||||
	Impulses.clear();
 | 
			
		||||
	Thinks.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnAmxxAttach()
 | 
			
		||||
{
 | 
			
		||||
	pfnTouchForward = 0;
 | 
			
		||||
	pfnThinkForward = 0;
 | 
			
		||||
	PlayerPreThinkForward = 0;
 | 
			
		||||
	PlayerPostThinkForward = 0;
 | 
			
		||||
	ClientKillForward = 0;
 | 
			
		||||
	ClientImpulseForward = 0;
 | 
			
		||||
	CmdStartForward = 0;
 | 
			
		||||
	StartFrameForward = 0;
 | 
			
		||||
	MF_AddNatives(ent_Natives);
 | 
			
		||||
	MF_AddNewNatives(ent_NewNatives);
 | 
			
		||||
	MF_AddNatives(engine_Natives);
 | 
			
		||||
	MF_AddNewNatives(engine_NewNatives);
 | 
			
		||||
	MF_AddNatives(global_Natives);
 | 
			
		||||
	memset(glinfo.szLastLights, 0x0, 128);
 | 
			
		||||
	memset(glinfo.szRealLights, 0x0, 128);
 | 
			
		||||
	glinfo.fNextLights = 0;
 | 
			
		||||
	glinfo.bCheckLights = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OnPluginsLoaded()
 | 
			
		||||
{
 | 
			
		||||
	g_CameraCount=0;
 | 
			
		||||
	pfnThinkForward = MF_RegisterForward("pfn_think", ET_STOP, FP_CELL, FP_DONE);  // done
 | 
			
		||||
	PlayerPreThinkForward = MF_RegisterForward("client_PreThink", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	PlayerPostThinkForward = MF_RegisterForward("client_PostThink", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	ClientKillForward = MF_RegisterForward("client_kill", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	ClientImpulseForward = MF_RegisterForward("client_impulse", ET_STOP, FP_CELL, FP_CELL, FP_DONE); // done
 | 
			
		||||
	CmdStartForward = MF_RegisterForward("client_cmdStart", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	StartFrameForward = MF_RegisterForward("server_frame", ET_IGNORE, FP_DONE); // done
 | 
			
		||||
	DispatchKeyForward = MF_RegisterForward("pfn_keyvalue", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	PlaybackForward = MF_RegisterForward("pfn_playbackevent", ET_STOP, FP_CELL, FP_CELL, FP_CELL, FP_FLOAT, FP_ARRAY, FP_ARRAY, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); // done
 | 
			
		||||
	SpawnForward = MF_RegisterForward("pfn_spawn", ET_STOP, FP_CELL, FP_DONE); // done
 | 
			
		||||
	pfnTouchForward = MF_RegisterForward("pfn_touch", ET_STOP, FP_CELL, FP_CELL, FP_DONE);  // done
 | 
			
		||||
	VexdTouchForward = MF_RegisterForward("vexd_pfntouch", ET_IGNORE, FP_CELL, FP_CELL, FP_DONE); // done
 | 
			
		||||
	VexdServerForward = MF_RegisterForward("ServerFrame", ET_IGNORE, FP_DONE); // done
 | 
			
		||||
	// Reset all standard engine callbacks
 | 
			
		||||
 | 
			
		||||
	// These will be reset through native calls, if need be
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnAddToFullPack=NULL;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnKeyValue=NULL;
 | 
			
		||||
	if (CheckForPublic("pfn_keyvalue"))
 | 
			
		||||
		g_pFunctionTable->pfnKeyValue=KeyValue;
 | 
			
		||||
 | 
			
		||||
	g_pengfuncsTable->pfnPlaybackEvent=NULL; // "pfn_playbackevent"
 | 
			
		||||
	if (CheckForPublic("pfn_playbackevent"))
 | 
			
		||||
		g_pengfuncsTable->pfnPlaybackEvent=PlaybackEvent;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnPlayerPreThink=NULL; // "client_PreThink"
 | 
			
		||||
	if (CheckForPublic("client_PreThink"))
 | 
			
		||||
		g_pFunctionTable->pfnPlayerPreThink=PlayerPreThink;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable_Post->pfnPlayerPostThink=NULL; // "client_PostThink"
 | 
			
		||||
	if (CheckForPublic("client_PostThink"))
 | 
			
		||||
		g_pFunctionTable->pfnPlayerPostThink=PlayerPostThink_Post;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnSpawn=NULL; // "pfn_spawn"
 | 
			
		||||
	//if (CheckForPublic("pfn_spawn")) // JGHG: I commented this if out because we always need the Spawn to precache the rocket mdl used with SetView native
 | 
			
		||||
	g_pFunctionTable->pfnSpawn=Spawn;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnClientKill=NULL; // "client_kill"
 | 
			
		||||
	if (CheckForPublic("client_kill"))
 | 
			
		||||
		g_pFunctionTable->pfnClientKill=ClientKill;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnCmdStart=NULL; // "client_impulse","register_impulse","client_cmdStart"
 | 
			
		||||
	if (CheckForPublic("client_impulse") || CheckForPublic("client_cmdStart"))
 | 
			
		||||
		g_pFunctionTable->pfnCmdStart=CmdStart;
 | 
			
		||||
	
 | 
			
		||||
	g_pFunctionTable->pfnThink=NULL; // "pfn_think", "register_think"
 | 
			
		||||
	if (CheckForPublic("pfn_think"))
 | 
			
		||||
		g_pFunctionTable->pfnThink=Think;
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnStartFrame=NULL; // "server_frame","ServerFrame"
 | 
			
		||||
	if (CheckForPublic("server_frame"))
 | 
			
		||||
		g_pFunctionTable->pfnStartFrame=StartFrame;
 | 
			
		||||
 | 
			
		||||
	if (CheckForPublic("ServerFrame"))
 | 
			
		||||
		g_pFunctionTable->pfnStartFrame=StartFrame;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	g_pFunctionTable->pfnTouch=NULL; // "pfn_touch","vexd_pfntouch"
 | 
			
		||||
	if (CheckForPublic("pfn_touch"))
 | 
			
		||||
		g_pFunctionTable->pfnTouch=pfnTouch;
 | 
			
		||||
 | 
			
		||||
	if (CheckForPublic("vexd_pfntouch"))
 | 
			
		||||
		g_pFunctionTable->pfnTouch=pfnTouch;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qboolean Voice_SetClientListening(int iReceiver, int iSender, qboolean bListen)
 | 
			
		||||
{
 | 
			
		||||
	if((plinfo[iSender].iSpeakFlags & SPEAK_MUTED) != 0) {
 | 
			
		||||
		(g_engfuncs.pfnVoice_SetClientListening)(iReceiver, iSender, false);
 | 
			
		||||
		RETURN_META_VALUE(MRES_SUPERCEDE, false);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if((plinfo[iSender].iSpeakFlags & SPEAK_ALL) != 0) {
 | 
			
		||||
		(g_engfuncs.pfnVoice_SetClientListening)(iReceiver, iSender, true);
 | 
			
		||||
		RETURN_META_VALUE(MRES_SUPERCEDE, true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if((plinfo[iReceiver].iSpeakFlags & SPEAK_LISTENALL) != 0) {
 | 
			
		||||
		(g_engfuncs.pfnVoice_SetClientListening)(iReceiver, iSender, true);
 | 
			
		||||
		RETURN_META_VALUE(MRES_SUPERCEDE, true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, bListen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AddToFullPack_Post(struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet)
 | 
			
		||||
{
 | 
			
		||||
	if( player && ent == host && plinfo[ENTINDEX(ent)].iViewType != CAMERA_NONE )
 | 
			
		||||
	{
 | 
			
		||||
		state->rendermode = kRenderTransTexture;
 | 
			
		||||
		state->renderamt = 100;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientDisconnect(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	int id = ENTINDEX(pEntity);
 | 
			
		||||
 | 
			
		||||
	if (plinfo[ENTINDEX(pEntity)].iViewType != CAMERA_NONE) // Verify that they were originally in a modified view
 | 
			
		||||
	{
 | 
			
		||||
		g_CameraCount--;
 | 
			
		||||
		if (g_CameraCount < 0)
 | 
			
		||||
			g_CameraCount=0;
 | 
			
		||||
		if (g_CameraCount==0) // Reset the AddToFullPack pointer if there's no more cameras in use...
 | 
			
		||||
			g_pFunctionTable->pfnAddToFullPack=NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	plinfo[id].iSpeakFlags = SPEAK_NORMAL;
 | 
			
		||||
	plinfo[id].iViewType = CAMERA_NONE;
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL ClientConnect(edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128])
 | 
			
		||||
{
 | 
			
		||||
	int id = ENTINDEX(pEntity);
 | 
			
		||||
 | 
			
		||||
	plinfo[id].iSpeakFlags = SPEAK_NORMAL;
 | 
			
		||||
	plinfo[id].iViewType = CAMERA_NONE;
 | 
			
		||||
	plinfo[id].pViewEnt = NULL;
 | 
			
		||||
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerDeactivate()
 | 
			
		||||
{
 | 
			
		||||
	memset(glinfo.szLastLights, 0x0, 128);
 | 
			
		||||
	memset(glinfo.szRealLights, 0x0, 128);
 | 
			
		||||
	glinfo.bCheckLights = false;
 | 
			
		||||
	glinfo.fNextLights = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Reset all forwarding function tables (so that forwards won't be called before plugins are initialized)
 | 
			
		||||
	g_pFunctionTable->pfnAddToFullPack=NULL;
 | 
			
		||||
	g_pFunctionTable->pfnKeyValue=NULL;
 | 
			
		||||
	g_pengfuncsTable->pfnPlaybackEvent=NULL; // "pfn_playbackevent"
 | 
			
		||||
	g_pFunctionTable->pfnPlayerPreThink=NULL; // "client_PreThink"
 | 
			
		||||
	g_pFunctionTable_Post->pfnPlayerPostThink=NULL; // "client_PostThink"
 | 
			
		||||
	g_pFunctionTable->pfnSpawn=NULL; // "pfn_spawn"
 | 
			
		||||
	g_pFunctionTable->pfnClientKill=NULL; // "client_kill"
 | 
			
		||||
	g_pFunctionTable->pfnCmdStart=NULL; // "client_impulse","register_impulse"
 | 
			
		||||
	g_pFunctionTable->pfnThink=NULL; // "pfn_think", "register_think"
 | 
			
		||||
	g_pFunctionTable->pfnStartFrame=NULL; // "server_frame","ServerFrame"
 | 
			
		||||
	g_pFunctionTable->pfnTouch=NULL; // "pfn_touch","vexd_pfntouch"
 | 
			
		||||
	g_pFunctionTable_Post->pfnStartFrame = NULL; // "set_lights"
 | 
			
		||||
 | 
			
		||||
	ClearHooks();
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
 | 
			
		||||
{
 | 
			
		||||
	for(int f = 1; f <= gpGlobals->maxClients;f++) 
 | 
			
		||||
		g_player_edicts[f]=pEdictList + f;
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LightStyle(int style, const char *val) {
 | 
			
		||||
	if (!style) {
 | 
			
		||||
		memset(glinfo.szRealLights, 0x0, 128);
 | 
			
		||||
		memcpy(glinfo.szRealLights, val, strlen(val));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL CheckForPublic(const char *publicname)
 | 
			
		||||
{
 | 
			
		||||
	AMX* amx;
 | 
			
		||||
	char blah[64];
 | 
			
		||||
	strncpy(blah,publicname,63);
 | 
			
		||||
	int iFunctionIndex;
 | 
			
		||||
	int i=0;
 | 
			
		||||
	// Loop through all running scripts
 | 
			
		||||
	while((amx=MF_GetScriptAmx(i++))!=NULL)
 | 
			
		||||
	{ 
 | 
			
		||||
		// Scan for public
 | 
			
		||||
		if (MF_AmxFindPublic(amx, blah, &iFunctionIndex) == AMX_ERR_NONE)
 | 
			
		||||
		{
 | 
			
		||||
			// Public was found.
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return FALSE; // no public found in any loaded script
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1000
									
								
								modules/engine/engine.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1000
									
								
								modules/engine/engine.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										234
									
								
								modules/engine/engine.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								modules/engine/engine.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,234 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef _ENGINE_INCLUDE_H
 | 
			
		||||
#define _ENGINE_INCLUDE_H
 | 
			
		||||
 | 
			
		||||
#include "amxxmodule.h"
 | 
			
		||||
#include <extdll.h>	
 | 
			
		||||
#include <string.h> 
 | 
			
		||||
#include <meta_api.h>
 | 
			
		||||
#include <sdk_util.h>
 | 
			
		||||
#include <usercmd.h>
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "gpglobals.h"
 | 
			
		||||
#include "entity_state.h"
 | 
			
		||||
#include <am-vector.h>
 | 
			
		||||
#include <am-string.h>
 | 
			
		||||
 | 
			
		||||
extern DLL_FUNCTIONS *g_pFunctionTable;
 | 
			
		||||
extern DLL_FUNCTIONS *g_pFunctionTable_Post;
 | 
			
		||||
extern enginefuncs_t *g_pengfuncsTable;
 | 
			
		||||
extern enginefuncs_t *g_pengfuncsTable_Post;
 | 
			
		||||
 | 
			
		||||
extern int SpawnForward;
 | 
			
		||||
extern int ChangelevelForward;
 | 
			
		||||
extern int PlaybackForward;
 | 
			
		||||
extern int DispatchKeyForward;
 | 
			
		||||
extern int pfnTouchForward;
 | 
			
		||||
extern int pfnThinkForward;
 | 
			
		||||
extern int PlayerPreThinkForward;
 | 
			
		||||
extern int PlayerPostThinkForward;
 | 
			
		||||
extern int ClientKillForward;
 | 
			
		||||
extern int ClientImpulseForward;
 | 
			
		||||
extern int CmdStartForward;
 | 
			
		||||
extern int StartFrameForward;
 | 
			
		||||
extern int DispatchUseForward;
 | 
			
		||||
extern int VexdTouchForward;
 | 
			
		||||
extern int VexdServerForward;
 | 
			
		||||
 | 
			
		||||
#define AMS_OFFSET 0.01
 | 
			
		||||
 | 
			
		||||
#define GETINFOKEYBUFFER	(*g_engfuncs.pfnGetInfoKeyBuffer)
 | 
			
		||||
#define INFO_KEY_BUFFER		(*g_engfuncs.pfnGetInfoKeyBuffer)
 | 
			
		||||
#define INFO_KEY_VALUE		(*g_engfuncs.pfnInfoKeyValue)
 | 
			
		||||
 | 
			
		||||
#define SPEAK_NORMAL 0
 | 
			
		||||
#define SPEAK_MUTED 1
 | 
			
		||||
#define SPEAK_ALL 2
 | 
			
		||||
#define SPEAK_LISTENALL 4
 | 
			
		||||
 | 
			
		||||
#define CAMERA_NONE 0
 | 
			
		||||
#define CAMERA_3RDPERSON 1
 | 
			
		||||
#define CAMERA_UPLEFT 2
 | 
			
		||||
#define CAMERA_TOPDOWN 3
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	usercmd_float_start,
 | 
			
		||||
	usercmd_forwardmove,		// Float
 | 
			
		||||
	usercmd_sidemove,			// Float
 | 
			
		||||
	usercmd_upmove,				// Float
 | 
			
		||||
	usercmd_float_end,
 | 
			
		||||
	usercmd_int_start,
 | 
			
		||||
	usercmd_lerp_msec,			// short
 | 
			
		||||
	usercmd_msec,				// byte
 | 
			
		||||
	usercmd_lightlevel,			// byte
 | 
			
		||||
	usercmd_buttons,			// unsigned short
 | 
			
		||||
	usercmd_impulse,			// byte
 | 
			
		||||
	usercmd_weaponselect,		// byte
 | 
			
		||||
 | 
			
		||||
	usercmd_impact_index,		// in
 | 
			
		||||
	usercmd_int_end,
 | 
			
		||||
	usercmd_vec_start,
 | 
			
		||||
	usercmd_viewangles,			// Vector
 | 
			
		||||
	usercmd_impact_position,	// vec
 | 
			
		||||
	usercmd_vec_end
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Used by the traceresult() native.
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	TR_AllSolid,			// (int) if true, plane is not valid
 | 
			
		||||
	TR_StartSolid,		// (int) if true, the initial point was in a solid area
 | 
			
		||||
	TR_InOpen,		// (int)
 | 
			
		||||
	TR_InWater,	// (int)
 | 
			
		||||
	TR_Fraction,			// (float) time completed, 1.0 = didn't hit anything
 | 
			
		||||
	TR_EndPos,			// (vector) final position
 | 
			
		||||
	TR_PlaneDist,		// (float)
 | 
			
		||||
	TR_PlaneNormal,		// (vector) surface normal at impact
 | 
			
		||||
	TR_Hit,				// (entity) entity the surface is on
 | 
			
		||||
	TR_Hitgroup			// (int) 0 == generic, non zero is specific body part
 | 
			
		||||
};
 | 
			
		||||
enum {
 | 
			
		||||
	Meta_GetUserMsgID,		// int )		(plid_t plid, const char *msgname, int *size);
 | 
			
		||||
	Meta_GetUserMsgName,	// const char *)	(plid_t plid, int msgid, int *size);
 | 
			
		||||
	Meta_GetPluginPath,		// const char *)		(plid_t plid);
 | 
			
		||||
	Meta_GetGameInfo		// const char *)		(plid_t plid, ginfo_t tag);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//These two structs are relics from VexD
 | 
			
		||||
struct PlayerInfo {
 | 
			
		||||
	int iSpeakFlags;
 | 
			
		||||
	edict_t *pViewEnt;
 | 
			
		||||
	int iViewType;
 | 
			
		||||
	//int iRenderMode;
 | 
			
		||||
	//float fRenderAmt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct GlobalInfo {
 | 
			
		||||
	float fNextLights;
 | 
			
		||||
	char szLastLights[128];
 | 
			
		||||
	char szRealLights[128];
 | 
			
		||||
	bool bCheckLights;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class Impulse
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	~Impulse()
 | 
			
		||||
	{
 | 
			
		||||
		if (Forward != -1)
 | 
			
		||||
			MF_UnregisterSPForward(Forward);
 | 
			
		||||
	}
 | 
			
		||||
	int Forward;
 | 
			
		||||
	int Check;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class Touch
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	int Forward;
 | 
			
		||||
	ke::AString Toucher;
 | 
			
		||||
	ke::AString Touched;
 | 
			
		||||
	~Touch()
 | 
			
		||||
	{
 | 
			
		||||
		if (Forward != -1)
 | 
			
		||||
			MF_UnregisterSPForward(Forward);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class EntClass
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	int Forward;
 | 
			
		||||
	ke::AString Class;
 | 
			
		||||
	~EntClass()
 | 
			
		||||
	{
 | 
			
		||||
		if (Forward != -1)
 | 
			
		||||
			MF_UnregisterSPForward(Forward);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int is_ent_valid(int iEnt);
 | 
			
		||||
int AmxStringToEngine(AMX *amx, cell param, int &len);
 | 
			
		||||
edict_t *UTIL_FindEntityInSphere(edict_t *pStart, const Vector &vecCenter, float flRadius);
 | 
			
		||||
 | 
			
		||||
extern int g_CameraCount;
 | 
			
		||||
extern edict_t *g_player_edicts[33];
 | 
			
		||||
 | 
			
		||||
inline edict_t* INDEXENT2( int iEdictNum )
 | 
			
		||||
{ 
 | 
			
		||||
	if (iEdictNum >= 1 && iEdictNum <= gpGlobals->maxClients)
 | 
			
		||||
		return MF_GetPlayerEdict(iEdictNum);
 | 
			
		||||
 | 
			
		||||
	else
 | 
			
		||||
		return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Spawn(edict_t *pEntity);
 | 
			
		||||
void PlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
 | 
			
		||||
void KeyValue(edict_t *pEntity, KeyValueData *pkvd);
 | 
			
		||||
void StartFrame();
 | 
			
		||||
void CmdStart(const edict_t *player, const struct usercmd_s *_cmd, unsigned int random_seed);
 | 
			
		||||
void ClientKill(edict_t *pEntity);
 | 
			
		||||
void PlayerPreThink(edict_t *pEntity);
 | 
			
		||||
void PlayerPostThink_Post(edict_t *pEntity);
 | 
			
		||||
void pfnTouch(edict_t *pToucher, edict_t *pTouched);
 | 
			
		||||
void Think(edict_t *pent);
 | 
			
		||||
void StartFrame_Post();
 | 
			
		||||
 | 
			
		||||
#define CHECK_ENTITY_SIMPLE(x) \
 | 
			
		||||
	if (x < 0 || x > gpGlobals->maxEntities) { \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \
 | 
			
		||||
		return 0; \
 | 
			
		||||
	} else { \
 | 
			
		||||
		if (x != 0 && FNullEnt(INDEXENT(x))) { \
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \
 | 
			
		||||
			return 0; \
 | 
			
		||||
		} \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#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; \
 | 
			
		||||
			} \
 | 
			
		||||
		} \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
extern bool g_inKeyValue;
 | 
			
		||||
extern KeyValueData *g_pkvd;
 | 
			
		||||
extern bool incmd;
 | 
			
		||||
extern struct usercmd_s *g_cmd;
 | 
			
		||||
extern struct PlayerInfo plinfo[33];
 | 
			
		||||
extern struct GlobalInfo glinfo;
 | 
			
		||||
extern AMX_NATIVE_INFO engine_Natives[];
 | 
			
		||||
extern AMX_NATIVE_INFO engine_NewNatives[];
 | 
			
		||||
extern ke::Vector<Impulse *> Impulses;
 | 
			
		||||
extern ke::Vector<EntClass *> Thinks;
 | 
			
		||||
extern ke::Vector<Touch *> Touches;
 | 
			
		||||
 | 
			
		||||
#endif //_ENGINE_INCLUDE_H
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1635
									
								
								modules/engine/entity.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1635
									
								
								modules/engine/entity.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										170
									
								
								modules/engine/entity.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								modules/engine/entity.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,170 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef _INCLUDE_ENGINE_ENTSTUFF
 | 
			
		||||
#define _INCLUDE_ENGINE_ENTSTUFF
 | 
			
		||||
 | 
			
		||||
#include "engine.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	gamestate,
 | 
			
		||||
	oldbuttons,
 | 
			
		||||
	groupinfo,
 | 
			
		||||
	iuser1,
 | 
			
		||||
	iuser2,
 | 
			
		||||
	iuser3,
 | 
			
		||||
	iuser4,
 | 
			
		||||
	weaponanim,
 | 
			
		||||
	pushmsec,
 | 
			
		||||
	bInDuck,
 | 
			
		||||
	flTimeStepSound,
 | 
			
		||||
	flSwimTime,
 | 
			
		||||
	flDuckTime,
 | 
			
		||||
	iStepLeft,
 | 
			
		||||
	movetype,
 | 
			
		||||
	solid,
 | 
			
		||||
	skin,			
 | 
			
		||||
	body,
 | 
			
		||||
	effects,
 | 
			
		||||
	light_level,
 | 
			
		||||
	sequence,
 | 
			
		||||
	gaitsequence,
 | 
			
		||||
	modelindex,
 | 
			
		||||
	playerclass,
 | 
			
		||||
	waterlevel,
 | 
			
		||||
	watertype,
 | 
			
		||||
	spawnflags,
 | 
			
		||||
	flags,
 | 
			
		||||
	colormap,
 | 
			
		||||
	team,
 | 
			
		||||
	fixangle,
 | 
			
		||||
	weapons,
 | 
			
		||||
	rendermode,
 | 
			
		||||
	renderfx,
 | 
			
		||||
	button,
 | 
			
		||||
	impulse,
 | 
			
		||||
	deadflag,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	impacttime,
 | 
			
		||||
	starttime,
 | 
			
		||||
	idealpitch,
 | 
			
		||||
	pitch_speed,
 | 
			
		||||
	ideal_yaw,
 | 
			
		||||
	yaw_speed,
 | 
			
		||||
	ltime,
 | 
			
		||||
	nextthink,
 | 
			
		||||
	gravity,
 | 
			
		||||
	friction,
 | 
			
		||||
	frame,
 | 
			
		||||
	animtime,
 | 
			
		||||
	framerate,
 | 
			
		||||
	health,
 | 
			
		||||
	frags,
 | 
			
		||||
	takedamage,
 | 
			
		||||
	max_health,
 | 
			
		||||
	teleport_time,
 | 
			
		||||
	armortype,
 | 
			
		||||
	armorvalue,
 | 
			
		||||
	dmg_take,
 | 
			
		||||
	dmg_save,
 | 
			
		||||
	dmg,
 | 
			
		||||
	dmgtime,
 | 
			
		||||
	speed,
 | 
			
		||||
	air_finished,
 | 
			
		||||
	pain_finished,
 | 
			
		||||
	radsuit_finished,
 | 
			
		||||
	scale,
 | 
			
		||||
	renderamt,
 | 
			
		||||
	maxspeed,
 | 
			
		||||
	fov,
 | 
			
		||||
	flFallVelocity,
 | 
			
		||||
	fuser1,
 | 
			
		||||
	fuser2,
 | 
			
		||||
	fuser3,
 | 
			
		||||
	fuser4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	origin,
 | 
			
		||||
	oldorigin,
 | 
			
		||||
	velocity,
 | 
			
		||||
	basevelocity,
 | 
			
		||||
	clbasevelocity,
 | 
			
		||||
	movedir,
 | 
			
		||||
	angles,
 | 
			
		||||
	avelocity,
 | 
			
		||||
	punchangle,
 | 
			
		||||
	v_angle,
 | 
			
		||||
	endpos,
 | 
			
		||||
	startpos,
 | 
			
		||||
	absmin,
 | 
			
		||||
	absmax,
 | 
			
		||||
	mins,
 | 
			
		||||
	maxs,
 | 
			
		||||
	size,
 | 
			
		||||
	rendercolor,
 | 
			
		||||
	view_ofs,
 | 
			
		||||
	vuser1,
 | 
			
		||||
	vuser2,
 | 
			
		||||
	vuser3,
 | 
			
		||||
	vuser4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	chain,
 | 
			
		||||
	dmg_inflictor,
 | 
			
		||||
	enemy,
 | 
			
		||||
	aiment,
 | 
			
		||||
	owner,
 | 
			
		||||
	groundentity,
 | 
			
		||||
	pContainingEntity,
 | 
			
		||||
	euser1,
 | 
			
		||||
	euser2,
 | 
			
		||||
	euser3,
 | 
			
		||||
	euser4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	classname,
 | 
			
		||||
	globalname,
 | 
			
		||||
	model,
 | 
			
		||||
	target,
 | 
			
		||||
	targetname,
 | 
			
		||||
	netname,
 | 
			
		||||
	message,
 | 
			
		||||
	noise,
 | 
			
		||||
	noise1,
 | 
			
		||||
	noise2,
 | 
			
		||||
	noise3,
 | 
			
		||||
	viewmodel,
 | 
			
		||||
	weaponmodel,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	controller1,
 | 
			
		||||
	controller2,
 | 
			
		||||
	controller3,
 | 
			
		||||
	controller4,
 | 
			
		||||
	blending1,
 | 
			
		||||
	blending2,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void UTIL_SetSize(edict_t *pev, const Vector &vecMin, const Vector &vecMax);
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO ent_Natives[];
 | 
			
		||||
extern AMX_NATIVE_INFO ent_NewNatives[];
 | 
			
		||||
 | 
			
		||||
#endif //_INCLUDE_ENGINE_ENTSTUFF
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										326
									
								
								modules/engine/forwards.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								modules/engine/forwards.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,326 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "engine.h"
 | 
			
		||||
 | 
			
		||||
bool incmd = false;
 | 
			
		||||
int DispatchUseForward = 0;
 | 
			
		||||
int SpawnForward = 0;
 | 
			
		||||
int PlaybackForward = 0;
 | 
			
		||||
int DispatchKeyForward = 0;
 | 
			
		||||
int pfnTouchForward = 0;
 | 
			
		||||
int pfnThinkForward = 0;
 | 
			
		||||
int PlayerPreThinkForward = 0;
 | 
			
		||||
int PlayerPostThinkForward = 0;
 | 
			
		||||
int ClientKillForward = 0;
 | 
			
		||||
int ClientImpulseForward = 0;
 | 
			
		||||
int CmdStartForward = 0;
 | 
			
		||||
int StartFrameForward = 0;
 | 
			
		||||
int VexdTouchForward = 0;
 | 
			
		||||
int VexdServerForward = 0;
 | 
			
		||||
ke::Vector<Impulse *> Impulses;
 | 
			
		||||
ke::Vector<EntClass *> Thinks;
 | 
			
		||||
ke::Vector<Touch *> Touches;
 | 
			
		||||
KeyValueData *g_pkvd;
 | 
			
		||||
bool g_inKeyValue=false;
 | 
			
		||||
bool g_precachedStuff = false;
 | 
			
		||||
 | 
			
		||||
int fstrcmp(const char *s1, const char *s2)
 | 
			
		||||
{
 | 
			
		||||
	int i=0;
 | 
			
		||||
	int len1 = strlen(s1);
 | 
			
		||||
	int len2 = strlen(s2);
 | 
			
		||||
	if (len1 != len2)
 | 
			
		||||
		return 0;
 | 
			
		||||
	for (i=0; i<len1; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (s1[i] != s2[i])
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Spawn(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	if (!g_precachedStuff) {
 | 
			
		||||
		// Used for SetView, added by JGHG
 | 
			
		||||
		PRECACHE_MODEL("models/rpgrocket.mdl");
 | 
			
		||||
		g_precachedStuff = true;
 | 
			
		||||
	}
 | 
			
		||||
	if (SpawnForward != -1) {
 | 
			
		||||
		int retVal = 0;
 | 
			
		||||
		int id = ENTINDEX(pEntity);
 | 
			
		||||
		retVal = MF_ExecuteForward(SpawnForward, (cell)id);
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META_VALUE(MRES_SUPERCEDE, -1);
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2)
 | 
			
		||||
{
 | 
			
		||||
	if (PlaybackForward != -1) {
 | 
			
		||||
		edict_t *e = (edict_t *)pInvoker;
 | 
			
		||||
		int retVal = 0;
 | 
			
		||||
		static cell cOrigin[3];
 | 
			
		||||
		static cell cAngles[3];
 | 
			
		||||
		Vector vOrigin = (Vector)origin;
 | 
			
		||||
		Vector vAngles = (Vector)angles;
 | 
			
		||||
		cOrigin[0] = amx_ftoc(vOrigin.x);
 | 
			
		||||
		cOrigin[1] = amx_ftoc(vOrigin.y);
 | 
			
		||||
		cOrigin[2] = amx_ftoc(vOrigin.z);
 | 
			
		||||
		cAngles[0] = amx_ftoc(vAngles.x);
 | 
			
		||||
		cAngles[1] = amx_ftoc(vAngles.y);
 | 
			
		||||
		cAngles[2] = amx_ftoc(vAngles.z);
 | 
			
		||||
		cell CellOrigin = MF_PrepareCellArray(cOrigin, 3);
 | 
			
		||||
		cell CellAngles = MF_PrepareCellArray(cAngles, 3);
 | 
			
		||||
		retVal = MF_ExecuteForward(PlaybackForward, (cell)flags, (cell)ENTINDEX(e), (cell)eventindex, delay, CellOrigin, CellAngles, fparam1, fparam2, (cell)iparam1, (cell)iparam2, (cell)bparam1, (cell)bparam2);
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void KeyValue(edict_t *pEntity, KeyValueData *pkvd)
 | 
			
		||||
{
 | 
			
		||||
	int retVal = 0;
 | 
			
		||||
	g_inKeyValue=true;
 | 
			
		||||
	g_pkvd=pkvd;
 | 
			
		||||
	int index = ENTINDEX(pEntity);
 | 
			
		||||
	if (DispatchKeyForward != -1) {
 | 
			
		||||
		retVal = MF_ExecuteForward(DispatchKeyForward, (cell)index);
 | 
			
		||||
		g_inKeyValue=false;
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
	g_inKeyValue=false;
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StartFrame()
 | 
			
		||||
{
 | 
			
		||||
	if (StartFrameForward != -1)
 | 
			
		||||
		MF_ExecuteForward(StartFrameForward);
 | 
			
		||||
	else if (VexdServerForward != -1)
 | 
			
		||||
		MF_ExecuteForward(VexdServerForward);
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StartFrame_Post()
 | 
			
		||||
{
 | 
			
		||||
	if (glinfo.bCheckLights)
 | 
			
		||||
	{
 | 
			
		||||
		if (glinfo.fNextLights < gpGlobals->time)
 | 
			
		||||
		{
 | 
			
		||||
			(g_engfuncs.pfnLightStyle)(0, glinfo.szLastLights);
 | 
			
		||||
			glinfo.fNextLights = gpGlobals->time + 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CmdStart(const edict_t *player, const struct usercmd_s *_cmd, unsigned int random_seed)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i = 0;
 | 
			
		||||
	int retVal = 0;
 | 
			
		||||
	edict_t *pEntity = (edict_t *)player;
 | 
			
		||||
	g_cmd = (struct usercmd_s *)_cmd;
 | 
			
		||||
	int origImpulse = g_cmd->impulse; // incase a plugin alters it
 | 
			
		||||
	for (i=0; i<Impulses.length(); i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (Impulses[i]->Check == g_cmd->impulse)
 | 
			
		||||
		{
 | 
			
		||||
			retVal = MF_ExecuteForward(Impulses[i]->Forward, (cell)ENTINDEX(pEntity), (cell)origImpulse);
 | 
			
		||||
			
 | 
			
		||||
			// don't return SUPERCEDE in any way here, 
 | 
			
		||||
			// we don't want to break client_impulse forward and access to cmd with [g/s]et_usercmd
 | 
			
		||||
			if (retVal)
 | 
			
		||||
				g_cmd->impulse = 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// client_impulse
 | 
			
		||||
	if (ClientImpulseForward != -1 && origImpulse != 0) 
 | 
			
		||||
	{
 | 
			
		||||
		retVal = MF_ExecuteForward(ClientImpulseForward, (cell)ENTINDEX(pEntity), (cell)origImpulse);
 | 
			
		||||
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			g_cmd->impulse = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// client_CmdStart
 | 
			
		||||
	if (CmdStartForward != -1)
 | 
			
		||||
	{
 | 
			
		||||
		incmd = true;
 | 
			
		||||
		retVal = MF_ExecuteForward(CmdStartForward, (cell)ENTINDEX(pEntity));
 | 
			
		||||
		incmd = false;
 | 
			
		||||
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClientKill(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	int retVal = 0;
 | 
			
		||||
 | 
			
		||||
	if (ClientKillForward != -1) {
 | 
			
		||||
		retVal = MF_ExecuteForward(ClientKillForward, (cell)ENTINDEX(pEntity));
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlayerPreThink(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	MF_ExecuteForward(PlayerPreThinkForward, (cell)ENTINDEX(pEntity));
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlayerPostThink_Post(edict_t *pEntity)
 | 
			
		||||
{
 | 
			
		||||
	if(plinfo[ENTINDEX(pEntity)].pViewEnt) {
 | 
			
		||||
		edict_t *pCamEnt = plinfo[ENTINDEX(pEntity)].pViewEnt;
 | 
			
		||||
 | 
			
		||||
		MAKE_VECTORS(pEntity->v.v_angle + pEntity->v.punchangle);
 | 
			
		||||
		Vector vecSrc	 = pEntity->v.origin + pEntity->v.view_ofs;
 | 
			
		||||
		Vector vecAiming = gpGlobals->v_forward;
 | 
			
		||||
		TraceResult tr;
 | 
			
		||||
 | 
			
		||||
		switch(plinfo[ENTINDEX(pEntity)].iViewType) {
 | 
			
		||||
			case CAMERA_3RDPERSON:
 | 
			
		||||
				TRACE_LINE(vecSrc, vecSrc - (vecAiming * 128), ignore_monsters, ENT(pEntity), &tr);
 | 
			
		||||
				SET_VIEW(pEntity, pCamEnt);
 | 
			
		||||
				pCamEnt->v.origin = tr.vecEndPos;
 | 
			
		||||
				pCamEnt->v.angles = pEntity->v.v_angle;
 | 
			
		||||
				break;
 | 
			
		||||
			case CAMERA_UPLEFT:
 | 
			
		||||
				TRACE_LINE(vecSrc, vecSrc - ((vecAiming * 32) - ((gpGlobals->v_right * 15) + (gpGlobals->v_up * 15))), ignore_monsters, ENT(pEntity), &tr);
 | 
			
		||||
				SET_VIEW(pEntity, pCamEnt);
 | 
			
		||||
				pCamEnt->v.origin = tr.vecEndPos;
 | 
			
		||||
				pCamEnt->v.angles = pEntity->v.v_angle;
 | 
			
		||||
				break;
 | 
			
		||||
			case CAMERA_TOPDOWN:
 | 
			
		||||
				TRACE_LINE(vecSrc, vecSrc + Vector(0,0,2048), dont_ignore_monsters, ENT(pEntity), &tr);
 | 
			
		||||
				SET_VIEW(pEntity, pCamEnt);
 | 
			
		||||
				pCamEnt->v.origin = tr.vecEndPos;
 | 
			
		||||
				pCamEnt->v.origin.z -= 40;
 | 
			
		||||
				pCamEnt->v.angles = Vector(90,pEntity->v.v_angle.y,0);
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				SET_VIEW(pEntity, pEntity);
 | 
			
		||||
				REMOVE_ENTITY(plinfo[ENTINDEX(pEntity)].pViewEnt);
 | 
			
		||||
				plinfo[ENTINDEX(pEntity)].iViewType = CAMERA_NONE;
 | 
			
		||||
				plinfo[ENTINDEX(pEntity)].pViewEnt = NULL;
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (PlayerPostThinkForward != -1)
 | 
			
		||||
	{
 | 
			
		||||
		if (MF_ExecuteForward(PlayerPostThinkForward, (cell)ENTINDEX(pEntity)))
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(MRES_IGNORED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pfnTouch(edict_t *pToucher, edict_t *pTouched)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i = 0;
 | 
			
		||||
	int retVal = 0;
 | 
			
		||||
	const char *ptrClass = STRING(pToucher->v.classname);
 | 
			
		||||
	const char *ptdClass = STRING(pTouched->v.classname);
 | 
			
		||||
	int ptrIndex = ENTINDEX(pToucher);
 | 
			
		||||
	int ptdIndex = ENTINDEX(pTouched);
 | 
			
		||||
	META_RES res=MRES_IGNORED;
 | 
			
		||||
	for (i=0; i<Touches.length(); i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (Touches[i]->Toucher.length() == 0)
 | 
			
		||||
		{
 | 
			
		||||
			if (Touches[i]->Touched.length() == 0)
 | 
			
		||||
			{
 | 
			
		||||
				retVal = MF_ExecuteForward(Touches[i]->Forward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
				if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
 | 
			
		||||
					RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
				else if (retVal)
 | 
			
		||||
					res=MRES_SUPERCEDE;
 | 
			
		||||
			} else if (Touches[i]->Touched.compare(ptdClass)==0) {
 | 
			
		||||
				retVal = MF_ExecuteForward(Touches[i]->Forward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
				if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
 | 
			
		||||
					RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
				else if (retVal)
 | 
			
		||||
					res=MRES_SUPERCEDE;
 | 
			
		||||
			}
 | 
			
		||||
		} else if (Touches[i]->Toucher.compare(ptrClass)==0) {
 | 
			
		||||
			if (Touches[i]->Touched.length() == 0)
 | 
			
		||||
			{
 | 
			
		||||
				retVal = MF_ExecuteForward(Touches[i]->Forward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
				if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
 | 
			
		||||
					RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
				else if (retVal)
 | 
			
		||||
					res=MRES_SUPERCEDE;
 | 
			
		||||
			} else if (Touches[i]->Touched.compare(ptdClass)==0) {
 | 
			
		||||
				retVal = MF_ExecuteForward(Touches[i]->Forward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
				if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
 | 
			
		||||
					RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
				else if (retVal)
 | 
			
		||||
					res=MRES_SUPERCEDE;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	/* Execute pfnTouch forwards */
 | 
			
		||||
	if (pfnTouchForward != -1) {
 | 
			
		||||
		retVal = MF_ExecuteForward(pfnTouchForward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
	if (VexdTouchForward != -1) {
 | 
			
		||||
		retVal = MF_ExecuteForward(VexdTouchForward, (cell)ptrIndex, (cell)ptdIndex);
 | 
			
		||||
		if (retVal)
 | 
			
		||||
			RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RETURN_META(res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Think(edict_t *pent)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i = 0;
 | 
			
		||||
	const char *cls = STRING(pent->v.classname);
 | 
			
		||||
	META_RES res=MRES_IGNORED;
 | 
			
		||||
	int retVal=0;
 | 
			
		||||
	for (i=0; i<Thinks.length(); i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (Thinks[i]->Class.compare(cls)==0)
 | 
			
		||||
		{
 | 
			
		||||
			retVal=MF_ExecuteForward(Thinks[i]->Forward, (cell)ENTINDEX(pent));
 | 
			
		||||
			if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
 | 
			
		||||
				RETURN_META(MRES_SUPERCEDE);
 | 
			
		||||
			else if (retVal)
 | 
			
		||||
				res=MRES_SUPERCEDE;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	retVal=MF_ExecuteForward(pfnThinkForward, (cell)ENTINDEX(pent));
 | 
			
		||||
	if (retVal)
 | 
			
		||||
		res=MRES_SUPERCEDE;
 | 
			
		||||
 | 
			
		||||
	RETURN_META(res);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										189
									
								
								modules/engine/globals.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								modules/engine/globals.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,189 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "gpglobals.h"
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_global_float(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	REAL returnValue;
 | 
			
		||||
 | 
			
		||||
	switch (params[1]) {
 | 
			
		||||
		case GL_coop:
 | 
			
		||||
			returnValue = gpGlobals->coop;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_deathmatch:
 | 
			
		||||
			returnValue = gpGlobals->deathmatch;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_force_retouch:
 | 
			
		||||
			returnValue = gpGlobals->force_retouch;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_found_secrets:
 | 
			
		||||
			returnValue = gpGlobals->found_secrets;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_frametime:
 | 
			
		||||
			returnValue = gpGlobals->frametime;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_serverflags:
 | 
			
		||||
			returnValue = gpGlobals->serverflags;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_teamplay:
 | 
			
		||||
			returnValue = gpGlobals->teamplay;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_time:
 | 
			
		||||
			returnValue = gpGlobals->time;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_allsolid:
 | 
			
		||||
			returnValue = gpGlobals->trace_allsolid;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_fraction:
 | 
			
		||||
			returnValue = gpGlobals->trace_fraction;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_inopen:
 | 
			
		||||
			returnValue = gpGlobals->trace_inopen;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_inwater:
 | 
			
		||||
			returnValue = gpGlobals->trace_inwater;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_plane_dist:
 | 
			
		||||
			returnValue = gpGlobals->trace_plane_dist;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_startsolid:
 | 
			
		||||
			returnValue = gpGlobals->trace_startsolid;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Undefined global_float index %d", params[1]);
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return amx_ftoc(returnValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_global_int(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int returnValue = 0;
 | 
			
		||||
 | 
			
		||||
	switch (params[1]) {
 | 
			
		||||
		case GL_cdAudioTrack:
 | 
			
		||||
			returnValue = gpGlobals->cdAudioTrack;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_maxClients:
 | 
			
		||||
			returnValue = gpGlobals->maxClients;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_maxEntities:
 | 
			
		||||
			returnValue = gpGlobals->maxEntities;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_msg_entity:
 | 
			
		||||
			returnValue = gpGlobals->msg_entity;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_flags:
 | 
			
		||||
			returnValue = gpGlobals->trace_flags;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_hitgroup:
 | 
			
		||||
			returnValue = gpGlobals->trace_hitgroup;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Undefined global_int index %d", params[1]);
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return returnValue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_global_string(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	string_t* returnValue;
 | 
			
		||||
 | 
			
		||||
	switch(params[1]) {
 | 
			
		||||
		case GL_pStringBase: // const char *, so no string_t
 | 
			
		||||
			return MF_SetAmxString(amx, params[2], gpGlobals->pStringBase, params[3]);
 | 
			
		||||
		// The rest are string_t:s...
 | 
			
		||||
		case GL_mapname:
 | 
			
		||||
			returnValue = &(gpGlobals->mapname);
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_startspot:
 | 
			
		||||
			returnValue = &(gpGlobals->startspot);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Undefined global_string index %d", params[1]);
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return MF_SetAmxString(amx, params[2], STRING(*returnValue), params[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_global_vector(AMX *amx, cell *params) // globals_get_vector(variable, Float:vector[3]); = 2 params
 | 
			
		||||
{
 | 
			
		||||
	cell *cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
	vec3_t fetchedVector;
 | 
			
		||||
 | 
			
		||||
	switch (params[1]) {
 | 
			
		||||
		case GL_trace_endpos:
 | 
			
		||||
			fetchedVector = gpGlobals->trace_endpos;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_trace_plane_normal:
 | 
			
		||||
			fetchedVector = gpGlobals->trace_plane_normal;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_v_forward:
 | 
			
		||||
			fetchedVector = gpGlobals->v_forward;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_v_right:
 | 
			
		||||
			fetchedVector = gpGlobals->v_right;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_v_up:
 | 
			
		||||
			fetchedVector = gpGlobals->v_up;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL_vecLandmarkOffset:
 | 
			
		||||
			fetchedVector = gpGlobals->vecLandmarkOffset;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Undefined global_vector index %d", params[1]);
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cRet[0] = amx_ftoc(fetchedVector.x); 
 | 
			
		||||
	cRet[1] = amx_ftoc(fetchedVector.y); 
 | 
			
		||||
	cRet[2] = amx_ftoc(fetchedVector.z); 
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL get_global_edict(AMX *amx, cell *params) // globals_get_edict(variable); = 1 param
 | 
			
		||||
{
 | 
			
		||||
	edict_t* pReturnEntity;
 | 
			
		||||
 | 
			
		||||
	switch (params[1]) {
 | 
			
		||||
		case GL_trace_ent:
 | 
			
		||||
			pReturnEntity = gpGlobals->trace_ent;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			MF_LogError(amx, AMX_ERR_NATIVE, "Undefined global_edict index %d", params[1]);
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Will crash if ENTINDEX() is called on bad pointer?
 | 
			
		||||
	if(!FNullEnt(pReturnEntity))
 | 
			
		||||
		return ENTINDEX(pReturnEntity);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO global_Natives[] = {
 | 
			
		||||
	{"get_global_float",	get_global_float},
 | 
			
		||||
	{"get_global_int",		get_global_int},
 | 
			
		||||
	{"get_global_string",	get_global_string},
 | 
			
		||||
	{"get_global_edict",	get_global_edict},
 | 
			
		||||
	{"get_global_vector",	get_global_vector},
 | 
			
		||||
	{NULL,					NULL},
 | 
			
		||||
	  ///////////////////
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										67
									
								
								modules/engine/gpglobals.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								modules/engine/gpglobals.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Engine Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef _INCLUDE_ENGINE_GLOBAL
 | 
			
		||||
#define _INCLUDE_ENGINE_GLOBAL
 | 
			
		||||
 | 
			
		||||
#include "engine.h"
 | 
			
		||||
 | 
			
		||||
enum globals {
 | 
			
		||||
	// Edict
 | 
			
		||||
	GL_trace_ent = 0,
 | 
			
		||||
 | 
			
		||||
	// Float
 | 
			
		||||
	GL_coop,
 | 
			
		||||
	GL_deathmatch,
 | 
			
		||||
	GL_force_retouch,
 | 
			
		||||
	GL_found_secrets,
 | 
			
		||||
	GL_frametime,
 | 
			
		||||
	GL_serverflags,
 | 
			
		||||
	GL_teamplay,
 | 
			
		||||
	GL_time,
 | 
			
		||||
	GL_trace_allsolid,
 | 
			
		||||
	GL_trace_fraction,
 | 
			
		||||
	GL_trace_inopen,
 | 
			
		||||
	GL_trace_inwater,
 | 
			
		||||
	GL_trace_plane_dist,
 | 
			
		||||
	GL_trace_startsolid,
 | 
			
		||||
 | 
			
		||||
	// Int
 | 
			
		||||
	GL_cdAudioTrack,
 | 
			
		||||
	GL_maxClients,
 | 
			
		||||
	GL_maxEntities,
 | 
			
		||||
	GL_msg_entity,
 | 
			
		||||
	GL_trace_flags,
 | 
			
		||||
	GL_trace_hitgroup,
 | 
			
		||||
 | 
			
		||||
	// String
 | 
			
		||||
	GL_pStringBase,
 | 
			
		||||
	GL_mapname,
 | 
			
		||||
	GL_startspot,
 | 
			
		||||
 | 
			
		||||
	// Vector
 | 
			
		||||
	GL_trace_endpos,
 | 
			
		||||
	GL_trace_plane_normal,
 | 
			
		||||
	GL_v_forward,
 | 
			
		||||
	GL_v_right,
 | 
			
		||||
	GL_v_up,
 | 
			
		||||
	GL_vecLandmarkOffset,
 | 
			
		||||
 | 
			
		||||
	// Void (not supported)
 | 
			
		||||
	GL_pSaveData
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern AMX_NATIVE_INFO global_Natives[];
 | 
			
		||||
 | 
			
		||||
#endif //_INCLUDE_ENGINE_GLOBAL
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										506
									
								
								modules/engine/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										506
									
								
								modules/engine/moduleconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,506 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Module Config
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef __MODULECONFIG_H__
 | 
			
		||||
#define __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
#include <amxmodx_version.h>
 | 
			
		||||
 | 
			
		||||
// Module info
 | 
			
		||||
#define MODULE_NAME "Engine"
 | 
			
		||||
#define MODULE_VERSION AMXX_VERSION
 | 
			
		||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
 | 
			
		||||
#define MODULE_URL "http://www.amxmodx.org"
 | 
			
		||||
#define MODULE_LOGTAG "ENGINE"
 | 
			
		||||
#define MODULE_LIBRARY "engine"
 | 
			
		||||
#define MODULE_LIBCLASS ""
 | 
			
		||||
// If you want the module not to be reloaded on mapchange, remove / comment out the next line
 | 
			
		||||
#define MODULE_RELOAD_ON_MAPCHANGE
 | 
			
		||||
 | 
			
		||||
#ifdef __DATE__
 | 
			
		||||
#define MODULE_DATE __DATE__
 | 
			
		||||
#else // __DATE__
 | 
			
		||||
#define MODULE_DATE "Unknown"
 | 
			
		||||
#endif // __DATE__
 | 
			
		||||
 | 
			
		||||
// metamod plugin?
 | 
			
		||||
#define USE_METAMOD
 | 
			
		||||
 | 
			
		||||
// use memory manager/tester?
 | 
			
		||||
// note that if you use this, you cannot construct/allocate 
 | 
			
		||||
// anything before the module attached (OnAmxxAttach).
 | 
			
		||||
// be careful of default constructors using new/malloc!
 | 
			
		||||
// #define MEMORY_TEST
 | 
			
		||||
 | 
			
		||||
// Unless you use STL or exceptions, keep this commented.
 | 
			
		||||
// It allows you to compile without libstdc++.so as a dependency
 | 
			
		||||
// #define NO_ALLOC_OVERRIDES
 | 
			
		||||
 | 
			
		||||
// Uncomment this if you are using MSVC8 or greater and want to fix some of the compatibility issues yourself 
 | 
			
		||||
// #define NO_MSVC8_AUTO_COMPAT
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 * AMXX Init functions
 | 
			
		||||
 * Also consider using FN_META_*
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** AMXX query */
 | 
			
		||||
//#define FN_AMXX_QUERY OnAmxxQuery
 | 
			
		||||
 | 
			
		||||
/** AMXX attach
 | 
			
		||||
 * Do native functions init here (MF_AddNatives)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_ATTACH OnAmxxAttach
 | 
			
		||||
 | 
			
		||||
/** AMXX Detach (unload) */
 | 
			
		||||
//#define FN_AMXX_DETACH OnAmxxDetach
 | 
			
		||||
 | 
			
		||||
/** All plugins loaded
 | 
			
		||||
 * Do forward functions init here (MF_RegisterForward)
 | 
			
		||||
 */
 | 
			
		||||
#define FN_AMXX_PLUGINSLOADED OnPluginsLoaded
 | 
			
		||||
 | 
			
		||||
/** All plugins are about to be unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADING OnPluginsUnloading
 | 
			
		||||
 | 
			
		||||
/** All plugins are now unloaded */
 | 
			
		||||
//#define FN_AMXX_PLUGINSUNLOADED OnPluginsUnloaded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**** METAMOD ****/
 | 
			
		||||
// If your module doesn't use metamod, you may close the file now :)
 | 
			
		||||
#ifdef USE_METAMOD
 | 
			
		||||
// ----
 | 
			
		||||
// Hook Functions
 | 
			
		||||
// Uncomment these to be called
 | 
			
		||||
// You can also change the function name
 | 
			
		||||
 | 
			
		||||
// - Metamod init functions
 | 
			
		||||
// Also consider using FN_AMXX_*
 | 
			
		||||
// Meta query
 | 
			
		||||
//#define FN_META_QUERY OnMetaQuery
 | 
			
		||||
// Meta attach
 | 
			
		||||
//#define FN_META_ATTACH OnMetaAttach
 | 
			
		||||
// Meta dettach
 | 
			
		||||
//#define FN_META_DETACH OnMetaDetach
 | 
			
		||||
 | 
			
		||||
// (wd) are Will Day's notes
 | 
			
		||||
// - GetEntityAPI2 functions
 | 
			
		||||
// #define FN_GameDLLInit				GameDLLInit					/* pfnGameInit() */
 | 
			
		||||
// #define FN_DispatchSpawn				Spawn				/* pfnSpawn() */
 | 
			
		||||
// #define FN_DispatchThink				Think				/* pfnThink() */
 | 
			
		||||
// #define FN_DispatchUse				Use					/* pfnUse() */
 | 
			
		||||
// #define FN_DispatchTouch				pfnTouch				/* pfnTouch() */
 | 
			
		||||
// #define FN_DispatchBlocked			DispatchBlocked				/* pfnBlocked() */
 | 
			
		||||
// #define FN_DispatchKeyValue			KeyValue			/* pfnKeyValue() */
 | 
			
		||||
// #define FN_DispatchSave				DispatchSave				/* pfnSave() */
 | 
			
		||||
// #define FN_DispatchRestore			DispatchRestore				/* pfnRestore() */
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox	DispatchObjectCollsionBox	/* pfnSetAbsBox() */
 | 
			
		||||
// #define FN_SaveWriteFields			SaveWriteFields				/* pfnSaveWriteFields() */
 | 
			
		||||
// #define FN_SaveReadFields			SaveReadFields				/* pfnSaveReadFields() */
 | 
			
		||||
// #define FN_SaveGlobalState			SaveGlobalState				/* pfnSaveGlobalState() */
 | 
			
		||||
// #define FN_RestoreGlobalState		RestoreGlobalState			/* pfnRestoreGlobalState() */
 | 
			
		||||
// #define FN_ResetGlobalState			ResetGlobalState			/* pfnResetGlobalState() */
 | 
			
		||||
#define FN_ClientConnect				ClientConnect				/* pfnClientConnect()			(wd) Client has connected */
 | 
			
		||||
#define FN_ClientDisconnect			ClientDisconnect			/* pfnClientDisconnect()		(wd) Player has left the game */
 | 
			
		||||
// #define FN_ClientKill				ClientKill					/* pfnClientKill()				(wd) Player has typed "kill" */
 | 
			
		||||
// #define FN_ClientPutInServer			ClientPutInServer			/* pfnClientPutInServer()		(wd) Client is entering the game */
 | 
			
		||||
// #define FN_ClientCommand				ClientCommand				/* pfnClientCommand()			(wd) Player has sent a command (typed or from a bind) */
 | 
			
		||||
// #define FN_ClientUserInfoChanged		ClientUserInfoChanged		/* pfnClientUserInfoChanged()	(wd) Client has updated their setinfo structure */
 | 
			
		||||
#define FN_ServerActivate			ServerActivate				/* pfnServerActivate()			(wd) Server is starting a new map */
 | 
			
		||||
#define FN_ServerDeactivate			ServerDeactivate			/* pfnServerDeactivate()		(wd) Server is leaving the map (shutdown or changelevel); SDK2 */
 | 
			
		||||
// #define FN_PlayerPreThink			PlayerPreThink				/* pfnPlayerPreThink() */
 | 
			
		||||
// #define FN_PlayerPostThink			PlayerPostThink				/* pfnPlayerPostThink() */
 | 
			
		||||
// #define FN_StartFrame				StartFrame					/* pfnStartFrame() */
 | 
			
		||||
// #define FN_ParmsNewLevel				ParmsNewLevel				/* pfnParmsNewLevel() */
 | 
			
		||||
// #define FN_ParmsChangeLevel			ParmsChangeLevel			/* pfnParmsChangeLevel() */
 | 
			
		||||
// #define FN_GetGameDescription		GetGameDescription			/* pfnGetGameDescription()		Returns string describing current .dll.  E.g. "TeamFotrress 2" "Half-Life" */
 | 
			
		||||
// #define FN_PlayerCustomization		PlayerCustomization			/* pfnPlayerCustomization()	Notifies .dll of new customization for player. */
 | 
			
		||||
// #define FN_SpectatorConnect			SpectatorConnect			/* pfnSpectatorConnect()		Called when spectator joins server */
 | 
			
		||||
// #define FN_SpectatorDisconnect		SpectatorDisconnect			/* pfnSpectatorDisconnect()	Called when spectator leaves the server */
 | 
			
		||||
// #define FN_SpectatorThink			SpectatorThink				/* pfnSpectatorThink()			Called when spectator sends a command packet (usercmd_t) */
 | 
			
		||||
// #define FN_Sys_Error					Sys_Error					/* pfnSys_Error()				Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.  SDK2 */
 | 
			
		||||
// #define FN_PM_Move					PM_Move						/* pfnPM_Move()				(wd) SDK2 */
 | 
			
		||||
// #define FN_PM_Init					PM_Init						/* pfnPM_Init()				Server version of player movement initialization; (wd) SDK2 */
 | 
			
		||||
// #define FN_PM_FindTextureType		PM_FindTextureType			/* pfnPM_FindTextureType()		(wd) SDK2 */
 | 
			
		||||
// #define FN_SetupVisibility			SetupVisibility				/* pfnSetupVisibility()		Set up PVS and PAS for networking for this client; (wd) SDK2 */
 | 
			
		||||
// #define FN_UpdateClientData			UpdateClientData			/* pfnUpdateClientData()		Set up data sent only to specific client; (wd) SDK2 */
 | 
			
		||||
// #define FN_AddToFullPack				AddToFullPack				/* pfnAddToFullPack()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateBaseline			CreateBaseline				/* pfnCreateBaseline()			Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
 | 
			
		||||
// #define FN_RegisterEncoders			RegisterEncoders			/* pfnRegisterEncoders()		Callbacks for network encoding; (wd) SDK2 */
 | 
			
		||||
// #define FN_GetWeaponData				GetWeaponData				/* pfnGetWeaponData()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdStart					CmdStart					/* pfnCmdStart()				(wd) SDK2 */
 | 
			
		||||
// #define FN_CmdEnd					CmdEnd						/* pfnCmdEnd()					(wd) SDK2 */
 | 
			
		||||
// #define FN_ConnectionlessPacket		ConnectionlessPacket		/* pfnConnectionlessPacket()	(wd) SDK2 */
 | 
			
		||||
// #define FN_GetHullBounds				GetHullBounds				/* pfnGetHullBounds()			(wd) SDK2 */
 | 
			
		||||
// #define FN_CreateInstancedBaselines	CreateInstancedBaselines	/* pfnCreateInstancedBaselines()	(wd) SDK2 */
 | 
			
		||||
// #define FN_InconsistentFile			InconsistentFile			/* pfnInconsistentFile()		(wd) SDK2 */
 | 
			
		||||
// #define FN_AllowLagCompensation		AllowLagCompensation		/* pfnAllowLagCompensation()	(wd) SDK2 */
 | 
			
		||||
 | 
			
		||||
// - GetEntityAPI2_Post functions
 | 
			
		||||
// #define FN_GameDLLInit_Post					GameDLLInit_Post
 | 
			
		||||
// #define FN_DispatchSpawn_Post				DispatchSpawn_Post
 | 
			
		||||
// #define FN_DispatchThink_Post				DispatchThink_Post
 | 
			
		||||
// #define FN_DispatchUse_Post					DispatchUse_Post
 | 
			
		||||
// #define FN_DispatchTouch_Post				DispatchTouch_Post
 | 
			
		||||
// #define FN_DispatchBlocked_Post				DispatchBlocked_Post
 | 
			
		||||
// #define FN_DispatchKeyValue_Post				DispatchKeyValue_Post
 | 
			
		||||
// #define FN_DispatchSave_Post					DispatchSave_Post
 | 
			
		||||
// #define FN_DispatchRestore_Post				DispatchRestore_Post
 | 
			
		||||
// #define FN_DispatchObjectCollsionBox_Post	DispatchObjectCollsionBox_Post
 | 
			
		||||
// #define FN_SaveWriteFields_Post				SaveWriteFields_Post
 | 
			
		||||
// #define FN_SaveReadFields_Post				SaveReadFields_Post
 | 
			
		||||
// #define FN_SaveGlobalState_Post				SaveGlobalState_Post
 | 
			
		||||
// #define FN_RestoreGlobalState_Post			RestoreGlobalState_Post
 | 
			
		||||
// #define FN_ResetGlobalState_Post				ResetGlobalState_Post
 | 
			
		||||
// #define FN_ClientConnect_Post				ClientConnect_Post
 | 
			
		||||
// #define FN_ClientDisconnect_Post				ClientDisconnect_Post
 | 
			
		||||
// #define FN_ClientKill_Post					ClientKill_Post
 | 
			
		||||
// #define FN_ClientPutInServer_Post			ClientPutInServer_Post
 | 
			
		||||
// #define FN_ClientCommand_Post				ClientCommand_Post
 | 
			
		||||
// #define FN_ClientUserInfoChanged_Post		ClientUserInfoChanged_Post
 | 
			
		||||
// #define FN_ServerActivate_Post				ServerActivate_Post
 | 
			
		||||
// #define FN_ServerDeactivate_Post				ServerDeactivate_Post
 | 
			
		||||
// #define FN_PlayerPreThink_Post				PlayerPreThink_Post
 | 
			
		||||
// #define FN_PlayerPostThink_Post				PlayerPostThink_Post
 | 
			
		||||
// #define FN_StartFrame_Post					StartFrame_Post
 | 
			
		||||
// #define FN_ParmsNewLevel_Post				ParmsNewLevel_Post
 | 
			
		||||
// #define FN_ParmsChangeLevel_Post				ParmsChangeLevel_Post
 | 
			
		||||
// #define FN_GetGameDescription_Post			GetGameDescription_Post
 | 
			
		||||
// #define FN_PlayerCustomization_Post			PlayerCustomization_Post
 | 
			
		||||
// #define FN_SpectatorConnect_Post				SpectatorConnect_Post
 | 
			
		||||
// #define FN_SpectatorDisconnect_Post			SpectatorDisconnect_Post
 | 
			
		||||
// #define FN_SpectatorThink_Post				SpectatorThink_Post
 | 
			
		||||
// #define FN_Sys_Error_Post					Sys_Error_Post
 | 
			
		||||
// #define FN_PM_Move_Post						PM_Move_Post
 | 
			
		||||
// #define FN_PM_Init_Post						PM_Init_Post
 | 
			
		||||
// #define FN_PM_FindTextureType_Post			PM_FindTextureType_Post
 | 
			
		||||
// #define FN_SetupVisibility_Post				SetupVisibility_Post
 | 
			
		||||
// #define FN_UpdateClientData_Post				UpdateClientData_Post
 | 
			
		||||
#define FN_AddToFullPack_Post				AddToFullPack_Post
 | 
			
		||||
// #define FN_CreateBaseline_Post				CreateBaseline_Post
 | 
			
		||||
// #define FN_RegisterEncoders_Post				RegisterEncoders_Post
 | 
			
		||||
// #define FN_GetWeaponData_Post				GetWeaponData_Post
 | 
			
		||||
// #define FN_CmdStart_Post						CmdStart_Post
 | 
			
		||||
// #define FN_CmdEnd_Post						CmdEnd_Post
 | 
			
		||||
// #define FN_ConnectionlessPacket_Post			ConnectionlessPacket_Post
 | 
			
		||||
// #define FN_GetHullBounds_Post				GetHullBounds_Post
 | 
			
		||||
// #define FN_CreateInstancedBaselines_Post		CreateInstancedBaselines_Post
 | 
			
		||||
// #define FN_InconsistentFile_Post				InconsistentFile_Post
 | 
			
		||||
// #define FN_AllowLagCompensation_Post			AllowLagCompensation_Post
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI functions
 | 
			
		||||
// #define FN_PrecacheModel						PrecacheModel
 | 
			
		||||
// #define FN_PrecacheSound						PrecacheSound
 | 
			
		||||
// #define FN_SetModel							SetModel
 | 
			
		||||
// #define FN_ModelIndex						ModelIndex
 | 
			
		||||
// #define FN_ModelFrames						ModelFrames
 | 
			
		||||
// #define FN_SetSize							SetSize
 | 
			
		||||
// #define FN_ChangeLevel						ChangeLevel
 | 
			
		||||
// #define FN_GetSpawnParms						GetSpawnParms
 | 
			
		||||
// #define FN_SaveSpawnParms					SaveSpawnParms
 | 
			
		||||
// #define FN_VecToYaw							VecToYaw
 | 
			
		||||
// #define FN_VecToAngles						VecToAngles
 | 
			
		||||
// #define FN_MoveToOrigin						MoveToOrigin
 | 
			
		||||
// #define FN_ChangeYaw							ChangeYaw
 | 
			
		||||
// #define FN_ChangePitch						ChangePitch
 | 
			
		||||
// #define FN_FindEntityByString				FindEntityByString
 | 
			
		||||
// #define FN_GetEntityIllum					GetEntityIllum
 | 
			
		||||
// #define FN_FindEntityInSphere				FindEntityInSphere
 | 
			
		||||
// #define FN_FindClientInPVS					FindClientInPVS
 | 
			
		||||
// #define FN_EntitiesInPVS						EntitiesInPVS
 | 
			
		||||
// #define FN_MakeVectors						MakeVectors
 | 
			
		||||
// #define FN_AngleVectors						AngleVectors
 | 
			
		||||
// #define FN_CreateEntity						CreateEntity
 | 
			
		||||
// #define FN_RemoveEntity						RemoveEntity
 | 
			
		||||
// #define FN_CreateNamedEntity					CreateNamedEntity
 | 
			
		||||
// #define FN_MakeStatic						MakeStatic
 | 
			
		||||
// #define FN_EntIsOnFloor						EntIsOnFloor
 | 
			
		||||
// #define FN_DropToFloor						DropToFloor
 | 
			
		||||
// #define FN_WalkMove							WalkMove
 | 
			
		||||
// #define FN_SetOrigin							SetOrigin
 | 
			
		||||
// #define FN_EmitSound							EmitSound
 | 
			
		||||
// #define FN_EmitAmbientSound					EmitAmbientSound
 | 
			
		||||
// #define FN_TraceLine							TraceLine
 | 
			
		||||
// #define FN_TraceToss							TraceToss
 | 
			
		||||
// #define FN_TraceMonsterHull					TraceMonsterHull
 | 
			
		||||
// #define FN_TraceHull							TraceHull
 | 
			
		||||
// #define FN_TraceModel						TraceModel
 | 
			
		||||
// #define FN_TraceTexture						TraceTexture
 | 
			
		||||
// #define FN_TraceSphere						TraceSphere
 | 
			
		||||
// #define FN_GetAimVector						GetAimVector
 | 
			
		||||
// #define FN_ServerCommand						ServerCommand
 | 
			
		||||
// #define FN_ServerExecute						ServerExecute
 | 
			
		||||
// #define FN_engClientCommand					engClientCommand
 | 
			
		||||
// #define FN_ParticleEffect					ParticleEffect
 | 
			
		||||
#define FN_LightStyle						LightStyle
 | 
			
		||||
// #define FN_DecalIndex						DecalIndex
 | 
			
		||||
// #define FN_PointContents						PointContents
 | 
			
		||||
// #define FN_MessageBegin						MessageBegin
 | 
			
		||||
// #define FN_MessageEnd						MessageEnd
 | 
			
		||||
// #define FN_WriteByte							WriteByte
 | 
			
		||||
// #define FN_WriteChar							WriteChar
 | 
			
		||||
// #define FN_WriteShort						WriteShort
 | 
			
		||||
// #define FN_WriteLong							WriteLong
 | 
			
		||||
// #define FN_WriteAngle						WriteAngle
 | 
			
		||||
// #define FN_WriteCoord						WriteCoord
 | 
			
		||||
// #define FN_WriteString						WriteString
 | 
			
		||||
// #define FN_WriteEntity						WriteEntity
 | 
			
		||||
// #define FN_CVarRegister						CVarRegister
 | 
			
		||||
// #define FN_CVarGetFloat						CVarGetFloat
 | 
			
		||||
// #define FN_CVarGetString						CVarGetString
 | 
			
		||||
// #define FN_CVarSetFloat						CVarSetFloat
 | 
			
		||||
// #define FN_CVarSetString						CVarSetString
 | 
			
		||||
// #define FN_AlertMessage						AlertMessage
 | 
			
		||||
// #define FN_EngineFprintf						EngineFprintf
 | 
			
		||||
// #define FN_PvAllocEntPrivateData				PvAllocEntPrivateData
 | 
			
		||||
// #define FN_PvEntPrivateData					PvEntPrivateData
 | 
			
		||||
// #define FN_FreeEntPrivateData				FreeEntPrivateData
 | 
			
		||||
// #define FN_SzFromIndex						SzFromIndex
 | 
			
		||||
// #define FN_AllocString						AllocString
 | 
			
		||||
// #define FN_GetVarsOfEnt						GetVarsOfEnt
 | 
			
		||||
// #define FN_PEntityOfEntOffset				PEntityOfEntOffset
 | 
			
		||||
// #define FN_EntOffsetOfPEntity				EntOffsetOfPEntity
 | 
			
		||||
// #define FN_IndexOfEdict						IndexOfEdict
 | 
			
		||||
// #define FN_PEntityOfEntIndex					PEntityOfEntIndex
 | 
			
		||||
// #define FN_FindEntityByVars					FindEntityByVars
 | 
			
		||||
// #define FN_GetModelPtr						GetModelPtr
 | 
			
		||||
// #define FN_RegUserMsg						RegUserMsg
 | 
			
		||||
// #define FN_AnimationAutomove					AnimationAutomove
 | 
			
		||||
// #define FN_GetBonePosition					GetBonePosition
 | 
			
		||||
// #define FN_FunctionFromName					FunctionFromName
 | 
			
		||||
// #define FN_NameForFunction					NameForFunction
 | 
			
		||||
// #define FN_ClientPrintf						ClientPrintf
 | 
			
		||||
// #define FN_ServerPrint						ServerPrint
 | 
			
		||||
// #define FN_Cmd_Args							Cmd_Args
 | 
			
		||||
// #define FN_Cmd_Argv							Cmd_Argv
 | 
			
		||||
// #define FN_Cmd_Argc							Cmd_Argc
 | 
			
		||||
// #define FN_GetAttachment						GetAttachment
 | 
			
		||||
// #define FN_CRC32_Init						CRC32_Init
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer				CRC32_ProcessBuffer
 | 
			
		||||
// #define FN_CRC32_ProcessByte					CRC32_ProcessByte
 | 
			
		||||
// #define FN_CRC32_Final						CRC32_Final
 | 
			
		||||
// #define FN_RandomLong						RandomLong
 | 
			
		||||
// #define FN_RandomFloat						RandomFloat
 | 
			
		||||
// #define FN_SetView							SetView
 | 
			
		||||
// #define FN_Time								Time
 | 
			
		||||
// #define FN_CrosshairAngle					CrosshairAngle
 | 
			
		||||
// #define FN_LoadFileForMe						LoadFileForMe
 | 
			
		||||
// #define FN_FreeFile							FreeFile
 | 
			
		||||
// #define FN_EndSection						EndSection
 | 
			
		||||
// #define FN_CompareFileTime					CompareFileTime
 | 
			
		||||
// #define FN_GetGameDir						GetGameDir
 | 
			
		||||
// #define FN_Cvar_RegisterVariable				Cvar_RegisterVariable
 | 
			
		||||
// #define FN_FadeClientVolume					FadeClientVolume
 | 
			
		||||
// #define FN_SetClientMaxspeed					SetClientMaxspeed
 | 
			
		||||
// #define FN_CreateFakeClient					CreateFakeClient
 | 
			
		||||
// #define FN_RunPlayerMove						RunPlayerMove
 | 
			
		||||
// #define FN_NumberOfEntities					NumberOfEntities
 | 
			
		||||
// #define FN_GetInfoKeyBuffer					GetInfoKeyBuffer
 | 
			
		||||
// #define FN_InfoKeyValue						InfoKeyValue
 | 
			
		||||
// #define FN_SetKeyValue						SetKeyValue
 | 
			
		||||
// #define FN_SetClientKeyValue					SetClientKeyValue
 | 
			
		||||
// #define FN_IsMapValid						IsMapValid
 | 
			
		||||
// #define FN_StaticDecal						StaticDecal
 | 
			
		||||
// #define FN_PrecacheGeneric					PrecacheGeneric
 | 
			
		||||
// #define FN_GetPlayerUserId					GetPlayerUserId
 | 
			
		||||
// #define FN_BuildSoundMsg						BuildSoundMsg
 | 
			
		||||
// #define FN_IsDedicatedServer					IsDedicatedServer
 | 
			
		||||
// #define FN_CVarGetPointer					CVarGetPointer
 | 
			
		||||
// #define FN_GetPlayerWONId					GetPlayerWONId
 | 
			
		||||
// #define FN_Info_RemoveKey					Info_RemoveKey
 | 
			
		||||
// #define FN_GetPhysicsKeyValue				GetPhysicsKeyValue
 | 
			
		||||
// #define FN_SetPhysicsKeyValue				SetPhysicsKeyValue
 | 
			
		||||
// #define FN_GetPhysicsInfoString				GetPhysicsInfoString
 | 
			
		||||
// #define FN_PrecacheEvent						PrecacheEvent
 | 
			
		||||
// #define FN_PlaybackEvent						PlaybackEvent
 | 
			
		||||
// #define FN_SetFatPVS							SetFatPVS
 | 
			
		||||
// #define FN_SetFatPAS							SetFatPAS
 | 
			
		||||
// #define FN_CheckVisibility					CheckVisibility
 | 
			
		||||
// #define FN_DeltaSetField						DeltaSetField
 | 
			
		||||
// #define FN_DeltaUnsetField					DeltaUnsetField
 | 
			
		||||
// #define FN_DeltaAddEncoder					DeltaAddEncoder
 | 
			
		||||
// #define FN_GetCurrentPlayer					GetCurrentPlayer
 | 
			
		||||
// #define FN_CanSkipPlayer						CanSkipPlayer
 | 
			
		||||
// #define FN_DeltaFindField					DeltaFindField
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex				DeltaSetFieldByIndex
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex			DeltaUnsetFieldByIndex
 | 
			
		||||
// #define FN_SetGroupMask						SetGroupMask
 | 
			
		||||
// #define FN_engCreateInstancedBaseline		engCreateInstancedBaseline
 | 
			
		||||
// #define FN_Cvar_DirectSet					Cvar_DirectSet
 | 
			
		||||
// #define FN_ForceUnmodified					ForceUnmodified
 | 
			
		||||
// #define FN_GetPlayerStats					GetPlayerStats
 | 
			
		||||
// #define FN_AddServerCommand					AddServerCommand
 | 
			
		||||
// #define FN_Voice_GetClientListening			Voice_GetClientListening
 | 
			
		||||
#define FN_Voice_SetClientListening			Voice_SetClientListening
 | 
			
		||||
// #define FN_GetPlayerAuthId					GetPlayerAuthId
 | 
			
		||||
 | 
			
		||||
// - GetEngineAPI_Post functions
 | 
			
		||||
// #define FN_PrecacheModel_Post				PrecacheModel_Post
 | 
			
		||||
// #define FN_PrecacheSound_Post				PrecacheSound_Post
 | 
			
		||||
// #define FN_SetModel_Post						SetModel_Post
 | 
			
		||||
// #define FN_ModelIndex_Post					ModelIndex_Post
 | 
			
		||||
// #define FN_ModelFrames_Post					ModelFrames_Post
 | 
			
		||||
// #define FN_SetSize_Post						SetSize_Post
 | 
			
		||||
// #define FN_ChangeLevel_Post					ChangeLevel_Post
 | 
			
		||||
// #define FN_GetSpawnParms_Post				GetSpawnParms_Post
 | 
			
		||||
// #define FN_SaveSpawnParms_Post				SaveSpawnParms_Post
 | 
			
		||||
// #define FN_VecToYaw_Post						VecToYaw_Post
 | 
			
		||||
// #define FN_VecToAngles_Post					VecToAngles_Post
 | 
			
		||||
// #define FN_MoveToOrigin_Post					MoveToOrigin_Post
 | 
			
		||||
// #define FN_ChangeYaw_Post					ChangeYaw_Post
 | 
			
		||||
// #define FN_ChangePitch_Post					ChangePitch_Post
 | 
			
		||||
// #define FN_FindEntityByString_Post			FindEntityByString_Post
 | 
			
		||||
// #define FN_GetEntityIllum_Post				GetEntityIllum_Post
 | 
			
		||||
// #define FN_FindEntityInSphere_Post			FindEntityInSphere_Post
 | 
			
		||||
// #define FN_FindClientInPVS_Post				FindClientInPVS_Post
 | 
			
		||||
// #define FN_EntitiesInPVS_Post				EntitiesInPVS_Post
 | 
			
		||||
// #define FN_MakeVectors_Post					MakeVectors_Post
 | 
			
		||||
// #define FN_AngleVectors_Post					AngleVectors_Post
 | 
			
		||||
// #define FN_CreateEntity_Post					CreateEntity_Post
 | 
			
		||||
// #define FN_RemoveEntity_Post					RemoveEntity_Post
 | 
			
		||||
// #define FN_CreateNamedEntity_Post			CreateNamedEntity_Post
 | 
			
		||||
// #define FN_MakeStatic_Post					MakeStatic_Post
 | 
			
		||||
// #define FN_EntIsOnFloor_Post					EntIsOnFloor_Post
 | 
			
		||||
// #define FN_DropToFloor_Post					DropToFloor_Post
 | 
			
		||||
// #define FN_WalkMove_Post						WalkMove_Post
 | 
			
		||||
// #define FN_SetOrigin_Post					SetOrigin_Post
 | 
			
		||||
// #define FN_EmitSound_Post					EmitSound_Post
 | 
			
		||||
// #define FN_EmitAmbientSound_Post				EmitAmbientSound_Post
 | 
			
		||||
// #define FN_TraceLine_Post					TraceLine_Post
 | 
			
		||||
// #define FN_TraceToss_Post					TraceToss_Post
 | 
			
		||||
// #define FN_TraceMonsterHull_Post				TraceMonsterHull_Post
 | 
			
		||||
// #define FN_TraceHull_Post					TraceHull_Post
 | 
			
		||||
// #define FN_TraceModel_Post					TraceModel_Post
 | 
			
		||||
// #define FN_TraceTexture_Post					TraceTexture_Post
 | 
			
		||||
// #define FN_TraceSphere_Post					TraceSphere_Post
 | 
			
		||||
// #define FN_GetAimVector_Post					GetAimVector_Post
 | 
			
		||||
// #define FN_ServerCommand_Post				ServerCommand_Post
 | 
			
		||||
// #define FN_ServerExecute_Post				ServerExecute_Post
 | 
			
		||||
// #define FN_engClientCommand_Post				engClientCommand_Post
 | 
			
		||||
// #define FN_ParticleEffect_Post				ParticleEffect_Post
 | 
			
		||||
// #define FN_LightStyle_Post					LightStyle_Post
 | 
			
		||||
// #define FN_DecalIndex_Post					DecalIndex_Post
 | 
			
		||||
// #define FN_PointContents_Post				PointContents_Post
 | 
			
		||||
// #define FN_MessageBegin_Post					MessageBegin_Post
 | 
			
		||||
// #define FN_MessageEnd_Post					MessageEnd_Post
 | 
			
		||||
// #define FN_WriteByte_Post					WriteByte_Post
 | 
			
		||||
// #define FN_WriteChar_Post					WriteChar_Post
 | 
			
		||||
// #define FN_WriteShort_Post					WriteShort_Post
 | 
			
		||||
// #define FN_WriteLong_Post					WriteLong_Post
 | 
			
		||||
// #define FN_WriteAngle_Post					WriteAngle_Post
 | 
			
		||||
// #define FN_WriteCoord_Post					WriteCoord_Post
 | 
			
		||||
// #define FN_WriteString_Post					WriteString_Post
 | 
			
		||||
// #define FN_WriteEntity_Post					WriteEntity_Post
 | 
			
		||||
// #define FN_CVarRegister_Post					CVarRegister_Post
 | 
			
		||||
// #define FN_CVarGetFloat_Post					CVarGetFloat_Post
 | 
			
		||||
// #define FN_CVarGetString_Post				CVarGetString_Post
 | 
			
		||||
// #define FN_CVarSetFloat_Post					CVarSetFloat_Post
 | 
			
		||||
// #define FN_CVarSetString_Post				CVarSetString_Post
 | 
			
		||||
// #define FN_AlertMessage_Post					AlertMessage_Post
 | 
			
		||||
// #define FN_EngineFprintf_Post				EngineFprintf_Post
 | 
			
		||||
// #define FN_PvAllocEntPrivateData_Post		PvAllocEntPrivateData_Post
 | 
			
		||||
// #define FN_PvEntPrivateData_Post				PvEntPrivateData_Post
 | 
			
		||||
// #define FN_FreeEntPrivateData_Post			FreeEntPrivateData_Post
 | 
			
		||||
// #define FN_SzFromIndex_Post					SzFromIndex_Post
 | 
			
		||||
// #define FN_AllocString_Post					AllocString_Post
 | 
			
		||||
// #define FN_GetVarsOfEnt_Post					GetVarsOfEnt_Post
 | 
			
		||||
// #define FN_PEntityOfEntOffset_Post			PEntityOfEntOffset_Post
 | 
			
		||||
// #define FN_EntOffsetOfPEntity_Post			EntOffsetOfPEntity_Post
 | 
			
		||||
// #define FN_IndexOfEdict_Post					IndexOfEdict_Post
 | 
			
		||||
// #define FN_PEntityOfEntIndex_Post			PEntityOfEntIndex_Post
 | 
			
		||||
// #define FN_FindEntityByVars_Post				FindEntityByVars_Post
 | 
			
		||||
// #define FN_GetModelPtr_Post					GetModelPtr_Post
 | 
			
		||||
// #define FN_RegUserMsg_Post					RegUserMsg_Post
 | 
			
		||||
// #define FN_AnimationAutomove_Post			AnimationAutomove_Post
 | 
			
		||||
// #define FN_GetBonePosition_Post				GetBonePosition_Post
 | 
			
		||||
// #define FN_FunctionFromName_Post				FunctionFromName_Post
 | 
			
		||||
// #define FN_NameForFunction_Post				NameForFunction_Post
 | 
			
		||||
// #define FN_ClientPrintf_Post					ClientPrintf_Post
 | 
			
		||||
// #define FN_ServerPrint_Post					ServerPrint_Post
 | 
			
		||||
// #define FN_Cmd_Args_Post						Cmd_Args_Post
 | 
			
		||||
// #define FN_Cmd_Argv_Post						Cmd_Argv_Post
 | 
			
		||||
// #define FN_Cmd_Argc_Post						Cmd_Argc_Post
 | 
			
		||||
// #define FN_GetAttachment_Post				GetAttachment_Post
 | 
			
		||||
// #define FN_CRC32_Init_Post					CRC32_Init_Post
 | 
			
		||||
// #define FN_CRC32_ProcessBuffer_Post			CRC32_ProcessBuffer_Post
 | 
			
		||||
// #define FN_CRC32_ProcessByte_Post			CRC32_ProcessByte_Post
 | 
			
		||||
// #define FN_CRC32_Final_Post					CRC32_Final_Post
 | 
			
		||||
// #define FN_RandomLong_Post					RandomLong_Post
 | 
			
		||||
// #define FN_RandomFloat_Post					RandomFloat_Post
 | 
			
		||||
// #define FN_SetView_Post						SetView_Post
 | 
			
		||||
// #define FN_Time_Post							Time_Post
 | 
			
		||||
// #define FN_CrosshairAngle_Post				CrosshairAngle_Post
 | 
			
		||||
// #define FN_LoadFileForMe_Post				LoadFileForMe_Post
 | 
			
		||||
// #define FN_FreeFile_Post						FreeFile_Post
 | 
			
		||||
// #define FN_EndSection_Post					EndSection_Post
 | 
			
		||||
// #define FN_CompareFileTime_Post				CompareFileTime_Post
 | 
			
		||||
// #define FN_GetGameDir_Post					GetGameDir_Post
 | 
			
		||||
// #define FN_Cvar_RegisterVariable_Post		Cvar_RegisterVariable_Post
 | 
			
		||||
// #define FN_FadeClientVolume_Post				FadeClientVolume_Post
 | 
			
		||||
// #define FN_SetClientMaxspeed_Post			SetClientMaxspeed_Post
 | 
			
		||||
// #define FN_CreateFakeClient_Post				CreateFakeClient_Post
 | 
			
		||||
// #define FN_RunPlayerMove_Post				RunPlayerMove_Post
 | 
			
		||||
// #define FN_NumberOfEntities_Post				NumberOfEntities_Post
 | 
			
		||||
// #define FN_GetInfoKeyBuffer_Post				GetInfoKeyBuffer_Post
 | 
			
		||||
// #define FN_InfoKeyValue_Post					InfoKeyValue_Post
 | 
			
		||||
// #define FN_SetKeyValue_Post					SetKeyValue_Post
 | 
			
		||||
// #define FN_SetClientKeyValue_Post			SetClientKeyValue_Post
 | 
			
		||||
// #define FN_IsMapValid_Post					IsMapValid_Post
 | 
			
		||||
// #define FN_StaticDecal_Post					StaticDecal_Post
 | 
			
		||||
// #define FN_PrecacheGeneric_Post				PrecacheGeneric_Post
 | 
			
		||||
// #define FN_GetPlayerUserId_Post				GetPlayerUserId_Post
 | 
			
		||||
// #define FN_BuildSoundMsg_Post				BuildSoundMsg_Post
 | 
			
		||||
// #define FN_IsDedicatedServer_Post			IsDedicatedServer_Post
 | 
			
		||||
// #define FN_CVarGetPointer_Post				CVarGetPointer_Post
 | 
			
		||||
// #define FN_GetPlayerWONId_Post				GetPlayerWONId_Post
 | 
			
		||||
// #define FN_Info_RemoveKey_Post				Info_RemoveKey_Post
 | 
			
		||||
// #define FN_GetPhysicsKeyValue_Post			GetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_SetPhysicsKeyValue_Post			SetPhysicsKeyValue_Post
 | 
			
		||||
// #define FN_GetPhysicsInfoString_Post			GetPhysicsInfoString_Post
 | 
			
		||||
// #define FN_PrecacheEvent_Post				PrecacheEvent_Post
 | 
			
		||||
// #define FN_PlaybackEvent_Post				PlaybackEvent_Post
 | 
			
		||||
// #define FN_SetFatPVS_Post					SetFatPVS_Post
 | 
			
		||||
// #define FN_SetFatPAS_Post					SetFatPAS_Post
 | 
			
		||||
// #define FN_CheckVisibility_Post				CheckVisibility_Post
 | 
			
		||||
// #define FN_DeltaSetField_Post				DeltaSetField_Post
 | 
			
		||||
// #define FN_DeltaUnsetField_Post				DeltaUnsetField_Post
 | 
			
		||||
// #define FN_DeltaAddEncoder_Post				DeltaAddEncoder_Post
 | 
			
		||||
// #define FN_GetCurrentPlayer_Post				GetCurrentPlayer_Post
 | 
			
		||||
// #define FN_CanSkipPlayer_Post				CanSkipPlayer_Post
 | 
			
		||||
// #define FN_DeltaFindField_Post				DeltaFindField_Post
 | 
			
		||||
// #define FN_DeltaSetFieldByIndex_Post			DeltaSetFieldByIndex_Post
 | 
			
		||||
// #define FN_DeltaUnsetFieldByIndex_Post		DeltaUnsetFieldByIndex_Post
 | 
			
		||||
// #define FN_SetGroupMask_Post					SetGroupMask_Post
 | 
			
		||||
// #define FN_engCreateInstancedBaseline_Post	engCreateInstancedBaseline_Post
 | 
			
		||||
// #define FN_Cvar_DirectSet_Post				Cvar_DirectSet_Post
 | 
			
		||||
// #define FN_ForceUnmodified_Post				ForceUnmodified_Post
 | 
			
		||||
// #define FN_GetPlayerStats_Post				GetPlayerStats_Post
 | 
			
		||||
// #define FN_AddServerCommand_Post				AddServerCommand_Post
 | 
			
		||||
// #define FN_Voice_GetClientListening_Post		Voice_GetClientListening_Post
 | 
			
		||||
// #define FN_Voice_SetClientListening_Post		Voice_SetClientListening_Post
 | 
			
		||||
// #define FN_GetPlayerAuthId_Post				GetPlayerAuthId_Post
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData				OnFreeEntPrivateData				
 | 
			
		||||
// #define FN_GameShutdown						GameShutdown
 | 
			
		||||
// #define FN_ShouldCollide						ShouldCollide
 | 
			
		||||
 | 
			
		||||
// #define FN_OnFreeEntPrivateData_Post			OnFreeEntPrivateData_Post
 | 
			
		||||
// #define FN_GameShutdown_Post					GameShutdown_Post
 | 
			
		||||
// #define FN_ShouldCollide_Post				ShouldCollide_Post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // USE_METAMOD
 | 
			
		||||
 | 
			
		||||
#endif // __MODULECONFIG_H__
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								modules/engine/msvc12/engine.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/engine/msvc12/engine.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 11.00
 | 
			
		||||
# Visual Studio 2010
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "engine", "engine.vcxproj", "{B3F4467B-6148-4EBF-B897-168D81CF8D9B}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{B3F4467B-6148-4EBF-B897-168D81CF8D9B}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
			
		||||
		{B3F4467B-6148-4EBF-B897-168D81CF8D9B}.Debug|Win32.Build.0 = Debug|Win32
 | 
			
		||||
		{B3F4467B-6148-4EBF-B897-168D81CF8D9B}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{B3F4467B-6148-4EBF-B897-168D81CF8D9B}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										124
									
								
								modules/engine/msvc12/engine.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								modules/engine/msvc12/engine.vcxproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectGuid>{B3F4467B-6148-4EBF-B897-168D81CF8D9B}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>engine</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>DynamicLibrary</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v120_xp</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_amxx</TargetName>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\public;..\..\..\public\sdk; ..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ENGINE_EXPORTS;HAVE_STDINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <StructMemberAlignment>4Bytes</StructMemberAlignment>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <ProgramDatabaseFile>$(OutDir)engine.pdb</ProgramDatabaseFile>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <ImportLibrary>$(OutDir)engine.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
      <IgnoreSpecificDefaultLibraries>LIBCMT;</IgnoreSpecificDefaultLibraries>
 | 
			
		||||
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\;..\..\..\public;..\..\..\public\sdk; ..\..\..\public\amtl\include;..\..\third_party;..\..\third_party\hashing;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ENGINE_EXPORTS;HAVE_STDINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <StructMemberAlignment>4Bytes</StructMemberAlignment>
 | 
			
		||||
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Windows</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <ImportLibrary>$(OutDir)engine.lib</ImportLibrary>
 | 
			
		||||
      <TargetMachine>MachineX86</TargetMachine>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\amxxapi.cpp" />
 | 
			
		||||
    <ClCompile Include="..\engine.cpp" />
 | 
			
		||||
    <ClCompile Include="..\entity.cpp" />
 | 
			
		||||
    <ClCompile Include="..\forwards.cpp" />
 | 
			
		||||
    <ClCompile Include="..\globals.cpp" />
 | 
			
		||||
    <ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\engine.h" />
 | 
			
		||||
    <ClInclude Include="..\entity.h" />
 | 
			
		||||
    <ClInclude Include="..\gpglobals.h" />
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h" />
 | 
			
		||||
    <ClInclude Include="..\..\..\public\sdk\amxxmodule.h" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine.inc" />
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine_const.inc" />
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine_stocks.inc" />
 | 
			
		||||
    <None Include="..\..\..\plugins\include\hlsdk_const.inc" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										73
									
								
								modules/engine/msvc12/engine.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								modules/engine/msvc12/engine.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Filter Include="Source Files">
 | 
			
		||||
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Header Files">
 | 
			
		||||
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
 | 
			
		||||
      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK">
 | 
			
		||||
      <UniqueIdentifier>{fb945ae1-3977-41e3-a51b-04242aff8c78}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Module SDK\SDK Base">
 | 
			
		||||
      <UniqueIdentifier>{aad49737-4d0e-4276-a471-dc77365bf9e0}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
    <Filter Include="Pawn Includes">
 | 
			
		||||
      <UniqueIdentifier>{e7f2c5c2-cba9-4712-a576-ceb676c94b36}</UniqueIdentifier>
 | 
			
		||||
    </Filter>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="..\amxxapi.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\engine.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\entity.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\forwards.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\globals.cpp">
 | 
			
		||||
      <Filter>Source Files</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="..\engine.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\entity.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\gpglobals.h">
 | 
			
		||||
      <Filter>Header Files</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\moduleconfig.h">
 | 
			
		||||
      <Filter>Module SDK</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="..\..\..\public\sdk\amxxmodule.h">
 | 
			
		||||
      <Filter>Module SDK\SDK Base</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine_const.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\engine_stocks.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\..\..\plugins\include\hlsdk_const.inc">
 | 
			
		||||
      <Filter>Pawn Includes</Filter>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										101
									
								
								modules/engine/version.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								modules/engine/version.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#include <winresrc.h>
 | 
			
		||||
#include <moduleconfig.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 AMXX_VERSION_FILE
 | 
			
		||||
 PRODUCTVERSION AMXX_VERSION_FILE
 | 
			
		||||
 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", "AMX Mod X"
 | 
			
		||||
            VALUE "FileDescription", "AMX Mod X"
 | 
			
		||||
            VALUE "FileVersion", AMXX_VERSION
 | 
			
		||||
            VALUE "InternalName", MODULE_LIBRARY
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright (c) AMX Mod X Dev Team"
 | 
			
		||||
            VALUE "OriginalFilename", MODULE_LIBRARY "_amxx.dll"
 | 
			
		||||
            VALUE "ProductName", MODULE_NAME
 | 
			
		||||
            VALUE "ProductVersion", AMXX_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								modules/fakemeta/AMBuilder
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/fakemeta/AMBuilder
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
 | 
			
		||||
import os.path
 | 
			
		||||
 | 
			
		||||
binary = AMXX.MetaModule(builder, 'fakemeta')
 | 
			
		||||
 | 
			
		||||
binary.compiler.defines += [
 | 
			
		||||
  'HAVE_STDINT_H',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
binary.sources = [
 | 
			
		||||
  '../../public/sdk/amxxmodule.cpp',
 | 
			
		||||
  'dllfunc.cpp',
 | 
			
		||||
  'engfunc.cpp',
 | 
			
		||||
  'fakemeta_amxx.cpp',
 | 
			
		||||
  'pdata.cpp',
 | 
			
		||||
  'forward.cpp',
 | 
			
		||||
  'fm_tr.cpp',
 | 
			
		||||
  'pev.cpp',
 | 
			
		||||
  'glb.cpp',
 | 
			
		||||
  'fm_tr2.cpp',
 | 
			
		||||
  'misc.cpp',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if builder.target_platform == 'windows':
 | 
			
		||||
    binary.sources += ['version.rc']
 | 
			
		||||
    
 | 
			
		||||
AMXX.modules += [builder.Add(binary)]
 | 
			
		||||
							
								
								
									
										126
									
								
								modules/fakemeta/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								modules/fakemeta/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
# (C)2004-2013 AMX Mod X Development Team
 | 
			
		||||
# Makefile written by David "BAILOPAN" Anderson
 | 
			
		||||
 | 
			
		||||
###########################################
 | 
			
		||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
 | 
			
		||||
###########################################
 | 
			
		||||
 | 
			
		||||
HLSDK = ../../../hlsdk
 | 
			
		||||
MM_ROOT = ../../../metamod/metamod
 | 
			
		||||
PUBLIC_ROOT = ../../public
 | 
			
		||||
 | 
			
		||||
#####################################
 | 
			
		||||
### EDIT BELOW FOR OTHER PROJECTS ###
 | 
			
		||||
#####################################
 | 
			
		||||
 | 
			
		||||
PROJECT = fakemeta
 | 
			
		||||
 | 
			
		||||
OBJECTS = amxxmodule.cpp dllfunc.cpp engfunc.cpp fakemeta_amxx.cpp pdata.cpp forward.cpp \
 | 
			
		||||
          fm_tr.cpp pev.cpp glb.cpp fm_tr2.cpp misc.cpp
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | 
			
		||||
##############################################
 | 
			
		||||
 | 
			
		||||
C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
 | 
			
		||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
 | 
			
		||||
C_GCC4_FLAGS = -fvisibility=hidden
 | 
			
		||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
 | 
			
		||||
CPP = gcc
 | 
			
		||||
CPP_OSX = clang
 | 
			
		||||
 | 
			
		||||
LINK =
 | 
			
		||||
 | 
			
		||||
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
 | 
			
		||||
			  -I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/pm_shared \
 | 
			
		||||
			  -I$(MM_ROOT)
 | 
			
		||||
 | 
			
		||||
################################################
 | 
			
		||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | 
			
		||||
################################################
 | 
			
		||||
 | 
			
		||||
OS := $(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq "$(OS)" "Darwin"
 | 
			
		||||
	CPP = $(CPP_OSX)
 | 
			
		||||
	LIB_EXT = dylib
 | 
			
		||||
	LIB_SUFFIX = _amxx
 | 
			
		||||
	CFLAGS += -DOSX
 | 
			
		||||
	LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
 | 
			
		||||
else
 | 
			
		||||
	LIB_EXT = so
 | 
			
		||||
	LIB_SUFFIX = _amxx_i386
 | 
			
		||||
	CFLAGS += -DLINUX
 | 
			
		||||
	LINK += -shared
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LINK += -m32 -lm -ldl
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror \
 | 
			
		||||
          -Wno-invalid-offsetof
 | 
			
		||||
CPPFLAGS += -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
 | 
			
		||||
 | 
			
		||||
ifeq "$(DEBUG)" "true"
 | 
			
		||||
	BIN_DIR = Debug
 | 
			
		||||
	CFLAGS += $(C_DEBUG_FLAGS)
 | 
			
		||||
else
 | 
			
		||||
	BIN_DIR = Release
 | 
			
		||||
	CFLAGS += $(C_OPT_FLAGS)
 | 
			
		||||
	LINK += -s
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
 | 
			
		||||
 | 
			
		||||
ifeq "$(IS_CLANG)" "1"
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
 | 
			
		||||
else
 | 
			
		||||
	CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
 | 
			
		||||
	CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang || GCC >= 4
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
 | 
			
		||||
	CFLAGS += $(C_GCC4_FLAGS)
 | 
			
		||||
	CPPFLAGS += $(CPP_GCC4_FLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Clang >= 3 || GCC >= 4.7
 | 
			
		||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
 | 
			
		||||
	CPPFLAGS += -Wno-delete-non-virtual-dtor
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# OS is Linux and not using clang
 | 
			
		||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
 | 
			
		||||
	LINK += -static-libgcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# This will break if we include other Makefiles, but is fine for now. It allows
 | 
			
		||||
#  us to make a copy of this file that uses altered paths (ie. Makefile.mine)
 | 
			
		||||
#  or other changes without mucking up the original.
 | 
			
		||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 | 
			
		||||
 | 
			
		||||
$(BIN_DIR)/%.o: %.cpp
 | 
			
		||||
	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	mkdir -p $(BIN_DIR)
 | 
			
		||||
	ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
 | 
			
		||||
 | 
			
		||||
$(PROJECT): $(OBJ_BIN)
 | 
			
		||||
	$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
debug:
 | 
			
		||||
	$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
 | 
			
		||||
 | 
			
		||||
default: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BIN_DIR)/*.o
 | 
			
		||||
	rm -f $(BIN_DIR)/$(BINARY)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										385
									
								
								modules/fakemeta/dllfunc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								modules/fakemeta/dllfunc.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,385 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Fakemeta Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "fakemeta_amxx.h"
 | 
			
		||||
 | 
			
		||||
//by mahnsawce from his NS module
 | 
			
		||||
static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int type;
 | 
			
		||||
	int index;
 | 
			
		||||
	int indexb;
 | 
			
		||||
	unsigned char *pset;
 | 
			
		||||
	const char *temp = "";
 | 
			
		||||
	const char *temp2 = "";
 | 
			
		||||
	const char *temp3 = "";
 | 
			
		||||
	vec3_t Vec1;
 | 
			
		||||
	vec3_t Vec2;
 | 
			
		||||
	int iparam1;
 | 
			
		||||
	int iparam2;
 | 
			
		||||
	int iparam3;
 | 
			
		||||
	entity_state_t *es;
 | 
			
		||||
	int len;
 | 
			
		||||
	cell *cRet;
 | 
			
		||||
	type = params[1];
 | 
			
		||||
	switch(type)
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
		// pfnGameInit
 | 
			
		||||
	case	DLLFunc_GameInit:	// void)			( void );				
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnGameInit();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
		// pfnSpawn
 | 
			
		||||
	case	DLLFunc_Spawn:	// int )				( edict_t *pent );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		return gpGamedllFuncs->dllapi_table->pfnSpawn(INDEXENT2(index));
 | 
			
		||||
 | 
			
		||||
		// pfnThink
 | 
			
		||||
	case	DLLFunc_Think:	// void )				( edict_t *pent );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnThink(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
		// pfnUse
 | 
			
		||||
	case	DLLFunc_Use:	// void )				( edict_t *pentUsed, edict_t *pentOther );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		indexb=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(indexb);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnUse(INDEXENT2(index),INDEXENT2(indexb));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case DLLFunc_KeyValue:
 | 
			
		||||
		{
 | 
			
		||||
			cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
			index=cRet[0];
 | 
			
		||||
			CHECK_ENTITY(index);
 | 
			
		||||
			cRet = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
			KVD_Wrapper *kvdw;
 | 
			
		||||
			if (*cRet == 0)
 | 
			
		||||
				kvdw = &g_kvd_glb;
 | 
			
		||||
			else
 | 
			
		||||
				kvdw = reinterpret_cast<KVD_Wrapper *>(*cRet);
 | 
			
		||||
			gpGamedllFuncs->dllapi_table->pfnKeyValue(INDEXENT2(index), kvdw->kvd);
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// pfnTouch
 | 
			
		||||
	case	DLLFunc_Touch:	// void )				( edict_t *pentTouched, edict_t *pentOther );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		indexb=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(indexb);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnTouch(INDEXENT2(index),INDEXENT2(indexb));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_Blocked:	// void )			( edict_t *pentBlocked, edict_t *pentOther );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		indexb=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(indexb);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnBlocked(INDEXENT2(index),INDEXENT2(indexb));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
	case	DLLFunc_SetAbsBox:			// void )			( edict_t *pent );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnSetAbsBox(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ClientConnect:		// bool)		( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
 | 
			
		||||
		// index,szName,szAddress,szRetRejectReason,size
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		temp = MF_GetAmxString(amx,params[3],0,&len);
 | 
			
		||||
		temp2 = MF_GetAmxString(amx,params[4],1,&len);
 | 
			
		||||
		//temp3 = GET_AMXSTRING(amx,params[5],2,len);
 | 
			
		||||
		iparam1 = MDLL_ClientConnect(INDEXENT2(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),(char *)temp3);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[6]);
 | 
			
		||||
		MF_SetAmxString(amx,params[5],temp3,cRet[0]);
 | 
			
		||||
		return iparam1;
 | 
			
		||||
	
 | 
			
		||||
	case	DLLFunc_ClientDisconnect:	// void )	( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnClientDisconnect(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ClientKill:		// void )		( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnClientKill(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ClientPutInServer:	// void )	( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnClientPutInServer(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ServerDeactivate:	// void)	( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnServerDeactivate();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_PlayerPreThink:		// void )	( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnPlayerPreThink(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_PlayerPostThink:		// void )	( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnPlayerPostThink(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_StartFrame:		// void )		( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnStartFrame();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ParmsNewLevel:		// void )		( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnParmsNewLevel();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_ParmsChangeLevel:	// void )	( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnParmsChangeLevel();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	 // Returns string describing current .dll.  E.g., TeamFotrress 2, Half-Life
 | 
			
		||||
	case	DLLFunc_GetGameDescription:	 // const char * )( void );     
 | 
			
		||||
		temp = (char*)gpGamedllFuncs->dllapi_table->pfnGetGameDescription();
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		MF_SetAmxString(amx,params[2],temp,cRet[0]);
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
		// Spectator funcs
 | 
			
		||||
	case	DLLFunc_SpectatorConnect:	// void)		( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnSpectatorConnect(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
	case	DLLFunc_SpectatorDisconnect:	// void )	( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnSpectatorDisconnect(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
	case	DLLFunc_SpectatorThink:		// void )		( edict_t *pEntity );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index=cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnSpectatorThink(INDEXENT2(index));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	// Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.
 | 
			
		||||
	case	DLLFunc_Sys_Error:		// void )			( const char *error_string );
 | 
			
		||||
		temp = MF_GetAmxString(amx,params[2],0,&len);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnSys_Error(STRING(ALLOC_STRING(temp)));
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_PM_FindTextureType:	// char )( char *name );
 | 
			
		||||
		temp = MF_GetAmxString(amx,params[2],0,&len);
 | 
			
		||||
		return gpGamedllFuncs->dllapi_table->pfnPM_FindTextureType(temp);
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_RegisterEncoders:	// void )	( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnRegisterEncoders();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	// Enumerates player hulls.  Returns 0 if the hull number doesn't exist, 1 otherwise
 | 
			
		||||
	case	DLLFunc_GetHullBounds:	// int)	( int hullnumber, float *mins, float *maxs );
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		iparam1 = gpGamedllFuncs->dllapi_table->pfnGetHullBounds(cRet[0],Vec1,Vec2);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		cRet[0]=amx_ftoc(Vec1[0]);
 | 
			
		||||
		cRet[1]=amx_ftoc(Vec1[1]);
 | 
			
		||||
		cRet[2]=amx_ftoc(Vec1[2]);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[4]);
 | 
			
		||||
		cRet[0]=amx_ftoc(Vec2[0]);
 | 
			
		||||
		cRet[1]=amx_ftoc(Vec2[1]);
 | 
			
		||||
		cRet[2]=amx_ftoc(Vec2[2]);
 | 
			
		||||
		return iparam1;
 | 
			
		||||
 | 
			
		||||
	// Create baselines for certain "unplaced" items.
 | 
			
		||||
	case	DLLFunc_CreateInstancedBaselines:		// void ) ( void );
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnCreateInstancedBaselines();
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case	DLLFunc_pfnAllowLagCompensation:	// int )( void );
 | 
			
		||||
		return gpGamedllFuncs->dllapi_table->pfnAllowLagCompensation();
 | 
			
		||||
		// I know this doesn't fit with dllfunc, but I don't want to create another native JUST for this.
 | 
			
		||||
	case	MetaFunc_CallGameEntity:	// bool	(plid_t plid, const char *entStr,entvars_t *pev);
 | 
			
		||||
		temp = MF_GetAmxString(amx,params[2],0,&len);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[3]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT2(index)));
 | 
			
		||||
		return iparam1;
 | 
			
		||||
	case	DLLFunc_ClientUserInfoChanged: // void ) (edict_t *pEntity, char *infobuffer)
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx,params[2]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnClientUserInfoChanged(INDEXENT2(index),(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)));
 | 
			
		||||
		return 1;
 | 
			
		||||
	case	DLLFunc_UpdateClientData:		// void ) (const struct edict_s *ent, int sendweapons, struct clientdata_s *cd)
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
		iparam1 = cRet[0];
 | 
			
		||||
		
 | 
			
		||||
		clientdata_t *cd;
 | 
			
		||||
 | 
			
		||||
		if ((params[0] / sizeof(cell)) == 4)
 | 
			
		||||
		{
 | 
			
		||||
			cell *ptr = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
			if (*ptr == 0)
 | 
			
		||||
				cd = &g_cd_glb;
 | 
			
		||||
			else
 | 
			
		||||
				cd = reinterpret_cast<clientdata_s *>(*ptr);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			cd = &g_cd_glb;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnUpdateClientData(INDEXENT2(index), iparam1, cd);
 | 
			
		||||
 | 
			
		||||
		return 1;
 | 
			
		||||
	case	DLLFunc_AddToFullPack:		// int ) (struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet)
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
 | 
			
		||||
		if (*cRet == 0)
 | 
			
		||||
			es = &g_es_glb;
 | 
			
		||||
		else
 | 
			
		||||
			es = reinterpret_cast<entity_state_t *>(*cRet);
 | 
			
		||||
 | 
			
		||||
		// int e
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
		iparam1 = cRet[0];
 | 
			
		||||
 | 
			
		||||
		// edict_t *ent
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
 | 
			
		||||
		// edict_t *host
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[5]);
 | 
			
		||||
		indexb = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(indexb);
 | 
			
		||||
 | 
			
		||||
		// int hostflags
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[6]);
 | 
			
		||||
		iparam2 = cRet[0];
 | 
			
		||||
 | 
			
		||||
		// int player
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[7]);
 | 
			
		||||
		iparam3 = cRet[0];
 | 
			
		||||
 | 
			
		||||
		// unsigned char *pSet
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[8]);
 | 
			
		||||
		pset = reinterpret_cast<unsigned char *>(*cRet);
 | 
			
		||||
 | 
			
		||||
		return gpGamedllFuncs->dllapi_table->pfnAddToFullPack(es, iparam1, INDEXENT2(index), INDEXENT2(indexb), iparam2, iparam3, pset);
 | 
			
		||||
	case DLLFunc_CmdStart:			// void ) (const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed)
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
 | 
			
		||||
		usercmd_t *uc;
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
 | 
			
		||||
		if (*cRet == 0)
 | 
			
		||||
			uc = &g_uc_glb;
 | 
			
		||||
		else
 | 
			
		||||
			uc = reinterpret_cast<usercmd_t *>(*cRet);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
		iparam1 = cRet[0];
 | 
			
		||||
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnCmdStart(INDEXENT2(index), uc, iparam1);
 | 
			
		||||
 | 
			
		||||
		return 1;
 | 
			
		||||
	case DLLFunc_CmdEnd:			// void ) (const edict_t *player)
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnCmdEnd(INDEXENT2(index));
 | 
			
		||||
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	case DLLFunc_CreateBaseline:	// void )	(int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs);
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
		iparam1 = cRet[0];
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
		iparam2 = cRet[0];	
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
 | 
			
		||||
		if (*cRet == 0)
 | 
			
		||||
			es = &g_es_glb;
 | 
			
		||||
		else
 | 
			
		||||
			es = reinterpret_cast<entity_state_t *>(*cRet);
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[5]);
 | 
			
		||||
		index = cRet[0];
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[6]);
 | 
			
		||||
		iparam3 = cRet[0];
 | 
			
		||||
 | 
			
		||||
		CHECK_ENTITY(index);
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[7]);
 | 
			
		||||
		Vec1.x = amx_ctof(cRet[0]);
 | 
			
		||||
		Vec1.y = amx_ctof(cRet[1]);
 | 
			
		||||
		Vec1.z = amx_ctof(cRet[2]);
 | 
			
		||||
 | 
			
		||||
		cRet = MF_GetAmxAddr(amx, params[8]);
 | 
			
		||||
		Vec2.x = amx_ctof(cRet[0]);
 | 
			
		||||
		Vec2.y = amx_ctof(cRet[1]);
 | 
			
		||||
		Vec2.z = amx_ctof(cRet[2]);
 | 
			
		||||
		
 | 
			
		||||
		gpGamedllFuncs->dllapi_table->pfnCreateBaseline(iparam1, iparam2, es, INDEXENT2(index), iparam3, Vec1, Vec2);
 | 
			
		||||
 | 
			
		||||
		return 1;
 | 
			
		||||
	default:
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Unknown dllfunc entry %d", type);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMX_NATIVE_INFO dllfunc_natives[] = {
 | 
			
		||||
	{"dllfunc",			dllfunc},
 | 
			
		||||
	{NULL,				NULL},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										80
									
								
								modules/fakemeta/dllfunc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								modules/fakemeta/dllfunc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
// vim: set ts=4 sw=4 tw=99 noet:
 | 
			
		||||
//
 | 
			
		||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
 | 
			
		||||
// Copyright (C) The AMX Mod X Development Team.
 | 
			
		||||
//
 | 
			
		||||
// This software is licensed under the GNU General Public License, version 3 or higher.
 | 
			
		||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
 | 
			
		||||
//     https://alliedmods.net/amxmodx-license
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Fakemeta Module
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef _INCLUDE_DLLFUNC_H
 | 
			
		||||
#define _INCLUDE_DLLFUNC_H
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	DLLFunc_GameInit,					// void )			( void );				
 | 
			
		||||
	DLLFunc_Spawn,						// int  )			(edict_t *pent);
 | 
			
		||||
	DLLFunc_Think,						// void )			(edict_t *pent);
 | 
			
		||||
	DLLFunc_Use,						// void )			(edict_t *pentUsed, edict_t *pentOther);
 | 
			
		||||
	DLLFunc_Touch,						// void )			(edict_t *pentTouched, edict_t *pentOther);
 | 
			
		||||
	DLLFunc_Blocked,					// void )			(edict_t *pentBlocked, edict_t *pentOther);
 | 
			
		||||
 | 
			
		||||
	//You can pass in 0 for glb kvd handle or a kvd handle here
 | 
			
		||||
	DLLFunc_KeyValue,					// void )			(edict_t *pentKeyvalue, KeyValueData *pkvd);
 | 
			
		||||
	DLLFunc_SetAbsBox,					// void )			(edict_t *pent);
 | 
			
		||||
	DLLFunc_ClientConnect,				// bool )			(edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128]);
 | 
			
		||||
 | 
			
		||||
	DLLFunc_ClientDisconnect,			// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_ClientKill,					// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_ClientPutInServer,			// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_ClientCommand,				// void )			(edict_t *pEntity);
 | 
			
		||||
 | 
			
		||||
	DLLFunc_ServerDeactivate,			// void )			( void );
 | 
			
		||||
 | 
			
		||||
	DLLFunc_PlayerPreThink,				// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_PlayerPostThink,			// void )			(edict_t *pEntity);
 | 
			
		||||
 | 
			
		||||
	DLLFunc_StartFrame,					// void )			( void );
 | 
			
		||||
	DLLFunc_ParmsNewLevel,				// void )			( void );
 | 
			
		||||
	DLLFunc_ParmsChangeLevel,			// void )			( void );
 | 
			
		||||
 | 
			
		||||
	// Returns string describing current .dll.  E.g., TeamFotrress 2, Half-Life
 | 
			
		||||
	// This also gets called when the server is queried for information (for example, by a server browser tool)
 | 
			
		||||
	DLLFunc_GetGameDescription,	 		// const char *)	( void );     
 | 
			
		||||
 | 
			
		||||
	// Spectator funcs
 | 
			
		||||
	DLLFunc_SpectatorConnect,			// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_SpectatorDisconnect,		// void )			(edict_t *pEntity);
 | 
			
		||||
	DLLFunc_SpectatorThink,				// void )			(edict_t *pEntity);
 | 
			
		||||
 | 
			
		||||
	// Notify game .dll that engine is going to shut down.  Allows mod authors to set a breakpoint.
 | 
			
		||||
	DLLFunc_Sys_Error,					// void )			(const char *error_string);
 | 
			
		||||
 | 
			
		||||
	DLLFunc_PM_FindTextureType,			// char )			(char *name);
 | 
			
		||||
	DLLFunc_RegisterEncoders,			// void )			( void );
 | 
			
		||||
 | 
			
		||||
	// Enumerates player hulls.  Returns 0 if the hull number doesn't exist, 1 otherwise
 | 
			
		||||
	DLLFunc_GetHullBounds,				// int  )			(int hullnumber, float *mins, float *maxs);
 | 
			
		||||
 | 
			
		||||
	// Create baselines for certain "unplaced" items.
 | 
			
		||||
	DLLFunc_CreateInstancedBaselines,	// void )			( void );
 | 
			
		||||
	DLLFunc_pfnAllowLagCompensation,	// int  )			( void );
 | 
			
		||||
	// I know this does not fit with DLLFUNC(), but I don't want another native just for it.
 | 
			
		||||
	MetaFunc_CallGameEntity,			// bool	)			(plid_t plid, const char *entStr,entvars_t *pev);
 | 
			
		||||
	DLLFunc_ClientUserInfoChanged,		// void	)			(edict *pEntity, char *infobuffer);
 | 
			
		||||
	// You can pass in 0 for global client data handle or another client data handle here
 | 
			
		||||
	DLLFunc_UpdateClientData,			// void )			(const struct edict_s *ent, int sendweapons, struct clientdata_s *cd);
 | 
			
		||||
	// You can pass in 0 for global entity state handle or another entity state handle here
 | 
			
		||||
	DLLFunc_AddToFullPack,				// int  )			(struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet);
 | 
			
		||||
	// You can pass in 0 for global usercmd handle or another usercmd handle here
 | 
			
		||||
	DLLFunc_CmdStart,					// void )			(const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed);
 | 
			
		||||
	DLLFunc_CmdEnd,						// void )			(const edict_t *player);
 | 
			
		||||
	DLLFunc_CreateBaseline				// void )			(int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //_INCLUDE_DLLFUNC_H
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1103
									
								
								modules/fakemeta/engfunc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1103
									
								
								modules/fakemeta/engfunc.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user