mirror of
https://github.com/rehlds/reapi.git
synced 2025-03-29 13:49:13 +03:00
Add native get_viewent
This commit is contained in:
parent
bc3b1afb60
commit
6e8895bed9
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,6 +2,7 @@
|
|||||||
**/.gradle
|
**/.gradle
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
*.bat
|
||||||
**/msvc/Debug*
|
**/msvc/Debug*
|
||||||
**/msvc/Release*
|
**/msvc/Release*
|
||||||
**/msvc/*.sdf
|
**/msvc/*.sdf
|
||||||
@ -10,6 +11,7 @@
|
|||||||
**/msvc/*.suo
|
**/msvc/*.suo
|
||||||
**/msvc/*.db
|
**/msvc/*.db
|
||||||
**/msvc/*.opendb
|
**/msvc/*.opendb
|
||||||
|
**/msvc/*.txt
|
||||||
**/msvc/*.aps
|
**/msvc/*.aps
|
||||||
**/msvc/.vs
|
**/msvc/.vs
|
||||||
**/msvc/START*.bat
|
**/msvc/START*.bat
|
||||||
|
@ -38,6 +38,7 @@ void postEvaluate(NativeBinarySpec b) {
|
|||||||
void setupToolchain(NativeBinarySpec b) {
|
void setupToolchain(NativeBinarySpec b) {
|
||||||
ToolchainConfig cfg = rootProject.createToolchainConfig(b)
|
ToolchainConfig cfg = rootProject.createToolchainConfig(b)
|
||||||
cfg.projectInclude(project, '', '/src', '/src/mods', '/src/natives', '/include', '/include/metamod', '/include/cssdk/common', '/include/cssdk/dlls', '/include/cssdk/engine', '/include/cssdk/game_shared', '/include/cssdk/pm_shared', '/include/cssdk/public')
|
cfg.projectInclude(project, '', '/src', '/src/mods', '/src/natives', '/include', '/include/metamod', '/include/cssdk/common', '/include/cssdk/dlls', '/include/cssdk/engine', '/include/cssdk/game_shared', '/include/cssdk/pm_shared', '/include/cssdk/public')
|
||||||
|
cfg.singleDefines('HAVE_STRONG_TYPEDEF');
|
||||||
|
|
||||||
if (cfg instanceof MsvcToolchainConfig) {
|
if (cfg instanceof MsvcToolchainConfig) {
|
||||||
cfg.compilerOptions.pchConfig = new MsvcToolchainConfig.PrecompiledHeadersConfig(
|
cfg.compilerOptions.pchConfig = new MsvcToolchainConfig.PrecompiledHeadersConfig(
|
||||||
|
@ -167,7 +167,7 @@ native bool:FClassnameIs(const entityIndex, const className[]);
|
|||||||
native WeaponIdType:GetGrenadeType(const entityIndex);
|
native WeaponIdType:GetGrenadeType(const entityIndex);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the view mode on a client.
|
* Sets the view entity on a client.
|
||||||
* This allows pfnSetView able to hooks.
|
* This allows pfnSetView able to hooks.
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
@ -176,6 +176,14 @@ native WeaponIdType:GetGrenadeType(const entityIndex);
|
|||||||
*/
|
*/
|
||||||
native engset_view(const index, const const viewEntity);
|
native engset_view(const index, const const viewEntity);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gets the return index of the current view entity on a client.
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native get_viewent(const index);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the entity is valid.
|
* Check if the entity is valid.
|
||||||
*
|
*
|
||||||
|
129
reapi/include/com_client.h
Normal file
129
reapi/include/com_client.h
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "userid_rehlds.h"
|
||||||
|
|
||||||
|
#include "com_net.h"
|
||||||
|
#include "com_progdefs.h"
|
||||||
|
#include "com_delta_packet.h"
|
||||||
|
|
||||||
|
// Key + value + 2 x slash + NULL
|
||||||
|
const int MAX_INFO_STRING = 256;
|
||||||
|
|
||||||
|
typedef struct client_frame_s
|
||||||
|
{
|
||||||
|
double senttime;
|
||||||
|
float ping_time;
|
||||||
|
clientdata_t clientdata;
|
||||||
|
weapon_data_t weapondata[64];
|
||||||
|
packet_entities_t entities;
|
||||||
|
} client_frame_t;
|
||||||
|
|
||||||
|
struct client_t
|
||||||
|
{
|
||||||
|
qboolean active;
|
||||||
|
qboolean spawned;
|
||||||
|
qboolean fully_connected;
|
||||||
|
qboolean connected;
|
||||||
|
qboolean uploading;
|
||||||
|
qboolean hasusrmsgs;
|
||||||
|
qboolean has_force_unmodified;
|
||||||
|
netchan_t netchan;
|
||||||
|
int chokecount;
|
||||||
|
int delta_sequence;
|
||||||
|
qboolean fakeclient;
|
||||||
|
qboolean proxy;
|
||||||
|
usercmd_t lastcmd;
|
||||||
|
double connecttime;
|
||||||
|
double cmdtime;
|
||||||
|
double ignorecmdtime;
|
||||||
|
float latency;
|
||||||
|
float packet_loss;
|
||||||
|
double localtime;
|
||||||
|
double nextping;
|
||||||
|
double svtimebase;
|
||||||
|
sizebuf_t datagram;
|
||||||
|
byte datagram_buf[MAX_DATAGRAM];
|
||||||
|
double connection_started;
|
||||||
|
double next_messagetime;
|
||||||
|
double next_messageinterval;
|
||||||
|
qboolean send_message;
|
||||||
|
qboolean skip_message;
|
||||||
|
client_frame_t *frames;
|
||||||
|
event_state_t events;
|
||||||
|
edict_t *edict;
|
||||||
|
const edict_t *pViewEntity;
|
||||||
|
int userid;
|
||||||
|
USERID_t network_userid;
|
||||||
|
char userinfo[MAX_INFO_STRING];
|
||||||
|
qboolean sendinfo;
|
||||||
|
float sendinfo_time;
|
||||||
|
char hashedcdkey[64];
|
||||||
|
char name[32];
|
||||||
|
int topcolor;
|
||||||
|
int bottomcolor;
|
||||||
|
int entityId;
|
||||||
|
resource_t resourcesonhand;
|
||||||
|
resource_t resourcesneeded;
|
||||||
|
FILE *upload;
|
||||||
|
qboolean uploaddoneregistering;
|
||||||
|
customization_t customdata;
|
||||||
|
int crcValue;
|
||||||
|
int lw;
|
||||||
|
int lc;
|
||||||
|
char physinfo[MAX_INFO_STRING];
|
||||||
|
qboolean m_bLoopback;
|
||||||
|
uint32 m_VoiceStreams[2];
|
||||||
|
double m_lastvoicetime;
|
||||||
|
int m_sendrescount;
|
||||||
|
};
|
||||||
|
|
||||||
|
// index [1-32]
|
||||||
|
inline client_t *clientOfEdict(const edict_t *pEdict)
|
||||||
|
{
|
||||||
|
if (g_RehldsSvs)
|
||||||
|
{
|
||||||
|
return g_RehldsSvs->GetClient_t(indexOfEdict(pEdict) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *pszUserInfo = g_engfuncs.pfnGetInfoKeyBuffer(const_cast<edict_t *>(pEdict));
|
||||||
|
if (pszUserInfo)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<client_t *>(reinterpret_cast<char *>(pszUserInfo) - offsetof(client_t, userinfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// index [1-32]
|
||||||
|
inline client_t *clientOfIndex(const int index)
|
||||||
|
{
|
||||||
|
return clientOfEdict(edictByIndex(index));
|
||||||
|
}
|
39
reapi/include/com_delta_packet.h
Normal file
39
reapi/include/com_delta_packet.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "entity_state.h"
|
||||||
|
|
||||||
|
typedef struct packet_entities_s
|
||||||
|
{
|
||||||
|
int num_entities;
|
||||||
|
unsigned char flags[32];
|
||||||
|
entity_state_t *entities;
|
||||||
|
} packet_entities_t;
|
||||||
|
|
237
reapi/include/com_net.h
Normal file
237
reapi/include/com_net.h
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "netadr.h"
|
||||||
|
#include "enums.h"
|
||||||
|
#include "common_rehlds.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FLOW_OUTGOING = 0,
|
||||||
|
FLOW_INCOMING,
|
||||||
|
|
||||||
|
MAX_FLOWS
|
||||||
|
};
|
||||||
|
|
||||||
|
// 0 == regular, 1 == file stream
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FRAG_NORMAL_STREAM = 0,
|
||||||
|
FRAG_FILE_STREAM,
|
||||||
|
|
||||||
|
MAX_STREAMS
|
||||||
|
};
|
||||||
|
|
||||||
|
// NETWORKING INFO
|
||||||
|
|
||||||
|
// Max size of udp packet payload
|
||||||
|
const int MAX_UDP_PACKET = 4010; // 9 bytes SPLITHEADER + 4000 payload?
|
||||||
|
|
||||||
|
// Max length of a reliable message
|
||||||
|
const int MAX_MSGLEN = 3990; // 10 reserved for fragheader?
|
||||||
|
|
||||||
|
// Max length of unreliable message
|
||||||
|
const int MAX_DATAGRAM = 4000;
|
||||||
|
|
||||||
|
// This is the packet payload without any header bytes (which are attached for actual sending)
|
||||||
|
const int NET_MAX_PAYLOAD = 65536;
|
||||||
|
|
||||||
|
// This is the payload plus any header info (excluding UDP header)
|
||||||
|
|
||||||
|
// Packet header is:
|
||||||
|
// 4 bytes of outgoing seq
|
||||||
|
// 4 bytes of incoming seq
|
||||||
|
// and for each stream
|
||||||
|
// {
|
||||||
|
// byte (on/off)
|
||||||
|
// int (fragment id)
|
||||||
|
// short (startpos)
|
||||||
|
// short (length)
|
||||||
|
// }
|
||||||
|
#define HEADER_BYTES (8 + MAX_STREAMS * 9)
|
||||||
|
|
||||||
|
// Pad this to next higher 16 byte boundary
|
||||||
|
// This is the largest packet that can come in/out over the wire, before processing the header
|
||||||
|
// bytes will be stripped by the networking channel layer
|
||||||
|
//#define NET_MAX_MESSAGE PAD_NUMBER( ( MAX_MSGLEN + HEADER_BYTES ), 16 )
|
||||||
|
// This is currently used value in the engine. TODO: define above gives 4016, check it why.
|
||||||
|
const int NET_MAX_MESSAGE = 4037;
|
||||||
|
|
||||||
|
// Message data
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int size; // Size of message sent/received
|
||||||
|
double time; // Time that message was sent/received
|
||||||
|
} flowstats_t;
|
||||||
|
|
||||||
|
const int MAX_LATENT = 32;
|
||||||
|
|
||||||
|
typedef struct flow_s
|
||||||
|
{
|
||||||
|
flowstats_t stats[MAX_LATENT]; // Data for last MAX_LATENT messages
|
||||||
|
int current; // Current message position
|
||||||
|
double nextcompute; // Time when we should recompute k/sec data
|
||||||
|
|
||||||
|
// Average data
|
||||||
|
float kbytespersec;
|
||||||
|
float avgkbytespersec;
|
||||||
|
} flow_t;
|
||||||
|
|
||||||
|
const int FRAGMENT_C2S_MIN_SIZE = 16;
|
||||||
|
const int FRAGMENT_S2C_MIN_SIZE = 256;
|
||||||
|
const int FRAGMENT_S2C_MAX_SIZE = 1024;
|
||||||
|
|
||||||
|
const int CLIENT_FRAGMENT_SIZE_ONCONNECT = 128;
|
||||||
|
const int CUSTOMIZATION_MAX_SIZE = 20480;
|
||||||
|
|
||||||
|
const int FRAGMENT_MAX_SIZE = 1024;
|
||||||
|
|
||||||
|
// Client sends normal fragments only while connecting
|
||||||
|
#define MAX_NORMAL_FRAGMENTS (NET_MAX_PAYLOAD / CLIENT_FRAGMENT_SIZE_ONCONNECT)
|
||||||
|
|
||||||
|
// While client is connecting it sending fragments with minimal size, also it transfers sprays with minimal fragments...
|
||||||
|
// But with sv_delayed_spray_upload it sends with cl_dlmax fragment size
|
||||||
|
#define MAX_FILE_FRAGMENTS (CUSTOMIZATION_MAX_SIZE / FRAGMENT_C2S_MIN_SIZE)
|
||||||
|
|
||||||
|
const int UDP_HEADER_SIZE = 28;
|
||||||
|
const int MAX_RELIABLE_PAYLOAD = 1200;
|
||||||
|
|
||||||
|
#define MAKE_FRAGID(id,count) ((( id & 0xffff) << 16) | (count & 0xffff))
|
||||||
|
#define FRAG_GETID(fragid) ((fragid >> 16) & 0xffff)
|
||||||
|
#define FRAG_GETCOUNT(fragid) (fragid & 0xffff)
|
||||||
|
|
||||||
|
// Generic fragment structure
|
||||||
|
typedef struct fragbuf_s
|
||||||
|
{
|
||||||
|
fragbuf_s *next; // Next buffer in chain
|
||||||
|
int bufferid; // Id of this buffer
|
||||||
|
sizebuf_t frag_message; // Message buffer where raw data is stored
|
||||||
|
|
||||||
|
byte frag_message_buf[FRAGMENT_MAX_SIZE]; // The actual data sits here
|
||||||
|
|
||||||
|
qboolean isfile; // Is this a file buffer?
|
||||||
|
qboolean isbuffer; // Is this file buffer from memory ( custom decal, etc. ).
|
||||||
|
qboolean iscompressed;
|
||||||
|
|
||||||
|
char filename[MAX_PATH]; // Name of the file to save out on remote host
|
||||||
|
int foffset; // Offset in file from which to read data
|
||||||
|
int size; // Size of data to read at that offset
|
||||||
|
} fragbuf_t;
|
||||||
|
|
||||||
|
// Waiting list of fragbuf chains
|
||||||
|
typedef struct fragbufwaiting_s
|
||||||
|
{
|
||||||
|
fragbufwaiting_s *next; // Next chain in waiting list
|
||||||
|
int fragbufcount; // Number of buffers in this chain
|
||||||
|
fragbuf_t *fragbufs; // The actual buffers
|
||||||
|
} fragbufwaiting_t;
|
||||||
|
|
||||||
|
// Network Connection Channel
|
||||||
|
typedef struct netchan_s
|
||||||
|
{
|
||||||
|
// NS_SERVER or NS_CLIENT, depending on channel.
|
||||||
|
netsrc_t sock;
|
||||||
|
|
||||||
|
// Address this channel is talking to.
|
||||||
|
netadr_t remote_address;
|
||||||
|
|
||||||
|
int player_slot;
|
||||||
|
// For timeouts. Time last message was received.
|
||||||
|
float last_received;
|
||||||
|
// Time when channel was connected.
|
||||||
|
float connect_time;
|
||||||
|
|
||||||
|
// Bandwidth choke
|
||||||
|
// Bytes per second
|
||||||
|
double rate;
|
||||||
|
// If realtime > cleartime, free to send next packet
|
||||||
|
double cleartime;
|
||||||
|
|
||||||
|
// Sequencing variables
|
||||||
|
//
|
||||||
|
// Increasing count of sequence numbers
|
||||||
|
int incoming_sequence;
|
||||||
|
// # of last outgoing message that has been ack'd.
|
||||||
|
int incoming_acknowledged;
|
||||||
|
// Toggles T/F as reliable messages are received.
|
||||||
|
int incoming_reliable_acknowledged;
|
||||||
|
// single bit, maintained local
|
||||||
|
int incoming_reliable_sequence;
|
||||||
|
// Message we are sending to remote
|
||||||
|
int outgoing_sequence;
|
||||||
|
// Whether the message contains reliable payload, single bit
|
||||||
|
int reliable_sequence;
|
||||||
|
// Outgoing sequence number of last send that had reliable data
|
||||||
|
int last_reliable_sequence;
|
||||||
|
|
||||||
|
void *connection_status;
|
||||||
|
int (*pfnNetchan_Blocksize)(void *pData);
|
||||||
|
|
||||||
|
// Staging and holding areas
|
||||||
|
sizebuf_t message;
|
||||||
|
byte message_buf[MAX_MSGLEN];
|
||||||
|
|
||||||
|
// Reliable message buffer. We keep adding to it until reliable is acknowledged. Then we clear it.
|
||||||
|
int reliable_length;
|
||||||
|
byte reliable_buf[MAX_MSGLEN];
|
||||||
|
|
||||||
|
// Waiting list of buffered fragments to go onto queue. Multiple outgoing buffers can be queued in succession.
|
||||||
|
fragbufwaiting_t *waitlist[MAX_STREAMS];
|
||||||
|
|
||||||
|
// Is reliable waiting buf a fragment?
|
||||||
|
int reliable_fragment[MAX_STREAMS];
|
||||||
|
// Buffer id for each waiting fragment
|
||||||
|
unsigned int reliable_fragid[MAX_STREAMS];
|
||||||
|
|
||||||
|
// The current fragment being set
|
||||||
|
fragbuf_t *fragbufs[MAX_STREAMS];
|
||||||
|
// The total number of fragments in this stream
|
||||||
|
int fragbufcount[MAX_STREAMS];
|
||||||
|
|
||||||
|
// Position in outgoing buffer where frag data starts
|
||||||
|
short int frag_startpos[MAX_STREAMS];
|
||||||
|
// Length of frag data in the buffer
|
||||||
|
short int frag_length[MAX_STREAMS];
|
||||||
|
|
||||||
|
// Incoming fragments are stored here
|
||||||
|
fragbuf_t *incomingbufs[MAX_STREAMS];
|
||||||
|
// Set to true when incoming data is ready
|
||||||
|
qboolean incomingready[MAX_STREAMS];
|
||||||
|
|
||||||
|
// Only referenced by the FRAG_FILE_STREAM component
|
||||||
|
// Name of file being downloaded
|
||||||
|
char incomingfilename[MAX_PATH];
|
||||||
|
|
||||||
|
void *tempbuffer;
|
||||||
|
int tempbuffersize;
|
||||||
|
|
||||||
|
// Incoming and outgoing flow metrics
|
||||||
|
flow_t flow[MAX_FLOWS];
|
||||||
|
} netchan_t;
|
@ -1,5 +1,30 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "event_flags.h"
|
||||||
|
#include "event_args.h"
|
||||||
|
|
||||||
|
typedef struct event_info_s
|
||||||
|
{
|
||||||
|
unsigned short index; // 0 implies not in use
|
||||||
|
short packet_index; // Use data from state info for entity in delta_packet.
|
||||||
|
// -1 implies separate info based on event parameter signature
|
||||||
|
|
||||||
|
short entity_index; // The edict this event is associated with
|
||||||
|
float fire_time; // if non-zero, the time when the event should be fired ( fixed up on the client )
|
||||||
|
event_args_t args;
|
||||||
|
|
||||||
|
// CLIENT ONLY
|
||||||
|
int flags; // Reliable or not, etc.
|
||||||
|
} event_info_t;
|
||||||
|
|
||||||
|
// 16 simultaneous events, max
|
||||||
|
const int MAX_EVENT_QUEUE = 64;
|
||||||
|
|
||||||
|
typedef struct event_state_s
|
||||||
|
{
|
||||||
|
struct event_info_s ei[MAX_EVENT_QUEUE];
|
||||||
|
} event_state_t;
|
||||||
|
|
||||||
struct qstring_t { unsigned int str; };
|
struct qstring_t { unsigned int str; };
|
||||||
struct rstring_t { const char *str; };
|
struct rstring_t { const char *str; };
|
||||||
|
|
||||||
@ -47,8 +72,8 @@ struct com_entvars
|
|||||||
vec3_t oldorigin;
|
vec3_t oldorigin;
|
||||||
vec3_t velocity;
|
vec3_t velocity;
|
||||||
vec3_t basevelocity;
|
vec3_t basevelocity;
|
||||||
vec3_t clbasevelocity; // Base velocity that was passed in to server physics so
|
vec3_t clbasevelocity; // Base velocity that was passed in to server physics so
|
||||||
// client can predict conveyors correctly. Server zeroes it, so we need to store here, too.
|
// client can predict conveyors correctly. Server zeroes it, so we need to store here, too.
|
||||||
vec3_t movedir;
|
vec3_t movedir;
|
||||||
|
|
||||||
vec3_t angles; // Model angles
|
vec3_t angles; // Model angles
|
||||||
@ -62,7 +87,7 @@ struct com_entvars
|
|||||||
float impacttime;
|
float impacttime;
|
||||||
float starttime;
|
float starttime;
|
||||||
|
|
||||||
int fixangle; // 0:nothing, 1:force view angles, 2:add avelocity
|
int fixangle; // 0:nothing, 1:force view angles, 2:add avelocity
|
||||||
float idealpitch;
|
float idealpitch;
|
||||||
float pitch_speed;
|
float pitch_speed;
|
||||||
float ideal_yaw;
|
float ideal_yaw;
|
||||||
@ -74,11 +99,11 @@ struct com_entvars
|
|||||||
qstring_t viewmodel; // player's viewmodel
|
qstring_t viewmodel; // player's viewmodel
|
||||||
qstring_t weaponmodel; // what other players see
|
qstring_t weaponmodel; // what other players see
|
||||||
|
|
||||||
vec3_t absmin; // BB max translated to world coord
|
vec3_t absmin; // BB max translated to world coord
|
||||||
vec3_t absmax; // BB max translated to world coord
|
vec3_t absmax; // BB max translated to world coord
|
||||||
vec3_t mins; // local BB min
|
vec3_t mins; // local BB min
|
||||||
vec3_t maxs; // local BB max
|
vec3_t maxs; // local BB max
|
||||||
vec3_t size; // maxs - mins
|
vec3_t size; // maxs - mins
|
||||||
|
|
||||||
float ltime;
|
float ltime;
|
||||||
float nextthink;
|
float nextthink;
|
||||||
@ -87,21 +112,21 @@ struct com_entvars
|
|||||||
int solid;
|
int solid;
|
||||||
|
|
||||||
int skin;
|
int skin;
|
||||||
int body; // sub-model selection for studiomodels
|
int body; // sub-model selection for studiomodels
|
||||||
int effects;
|
int effects;
|
||||||
|
|
||||||
float gravity; // % of "normal" gravity
|
float gravity; // % of "normal" gravity
|
||||||
float friction; // inverse elasticity of MOVETYPE_BOUNCE
|
float friction; // inverse elasticity of MOVETYPE_BOUNCE
|
||||||
|
|
||||||
int light_level;
|
int light_level;
|
||||||
|
|
||||||
int sequence; // animation sequence
|
int sequence; // animation sequence
|
||||||
int gaitsequence; // movement animation sequence for player (0 for none)
|
int gaitsequence; // movement animation sequence for player (0 for none)
|
||||||
float frame; // % playback position in animation sequences (0..255)
|
float frame; // % playback position in animation sequences (0..255)
|
||||||
float animtime; // world time when frame was set
|
float animtime; // world time when frame was set
|
||||||
float framerate; // animation playback rate (-8x to 8x)
|
float framerate; // animation playback rate (-8x to 8x)
|
||||||
byte controller[4]; // bone controller setting (0..255)
|
byte controller[4]; // bone controller setting (0..255)
|
||||||
byte blending[2]; // blending amount between sub-sequences (0..255)
|
byte blending[2]; // blending amount between sub-sequences (0..255)
|
||||||
|
|
||||||
float scale; // sprite rendering scale (0..255)
|
float scale; // sprite rendering scale (0..255)
|
||||||
|
|
||||||
@ -112,11 +137,11 @@ struct com_entvars
|
|||||||
|
|
||||||
float health;
|
float health;
|
||||||
float frags;
|
float frags;
|
||||||
int weapons; // bit mask for available weapons
|
int weapons; // bit mask for available weapons
|
||||||
float takedamage;
|
float takedamage;
|
||||||
|
|
||||||
int deadflag;
|
int deadflag;
|
||||||
vec3_t view_ofs; // eye position
|
vec3_t view_ofs; // eye position
|
||||||
|
|
||||||
int button;
|
int button;
|
||||||
int impulse;
|
int impulse;
|
||||||
@ -131,7 +156,7 @@ struct com_entvars
|
|||||||
int spawnflags;
|
int spawnflags;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
int colormap; // lowbyte topcolor, highbyte bottomcolor
|
int colormap; // lowbyte topcolor, highbyte bottomcolor
|
||||||
int team;
|
int team;
|
||||||
|
|
||||||
float max_health;
|
float max_health;
|
||||||
@ -208,21 +233,21 @@ struct com_playermove
|
|||||||
{
|
{
|
||||||
int player_index; // So we don't try to run the PM_CheckStuck nudging too quickly.
|
int player_index; // So we don't try to run the PM_CheckStuck nudging too quickly.
|
||||||
qboolean server; // For debugging, are we running physics code on server side?
|
qboolean server; // For debugging, are we running physics code on server side?
|
||||||
qboolean multiplayer; // 1 == multiplayer server
|
qboolean multiplayer; // 1 == multiplayer server
|
||||||
float time; // realtime on host, for reckoning duck timing
|
float time; // realtime on host, for reckoning duck timing
|
||||||
float frametime; // Duration of this frame
|
float frametime; // Duration of this frame
|
||||||
vec3_t forward, right, up; // Vectors for angles
|
vec3_t forward, right, up; // Vectors for angles
|
||||||
vec3_t origin; // Movement origin.
|
vec3_t origin; // Movement origin.
|
||||||
vec3_t angles; // Movement view angles.
|
vec3_t angles; // Movement view angles.
|
||||||
vec3_t oldangles; // Angles before movement view angles were looked at.
|
vec3_t oldangles; // Angles before movement view angles were looked at.
|
||||||
vec3_t velocity; // Current movement direction.
|
vec3_t velocity; // Current movement direction.
|
||||||
vec3_t movedir; // For waterjumping, a forced forward velocity so we can fly over lip of ledge.
|
vec3_t movedir; // For waterjumping, a forced forward velocity so we can fly over lip of ledge.
|
||||||
vec3_t basevelocity; // Velocity of the conveyor we are standing, e.g.
|
vec3_t basevelocity; // Velocity of the conveyor we are standing, e.g.
|
||||||
vec3_t view_ofs; // For ducking/dead
|
vec3_t view_ofs; // For ducking/dead
|
||||||
// Our eye position.
|
// Our eye position.
|
||||||
float flDuckTime; // Time we started duck
|
float flDuckTime; // Time we started duck
|
||||||
qboolean bInDuck; // In process of ducking or ducked already?
|
qboolean bInDuck; // In process of ducking or ducked already?
|
||||||
int flTimeStepSound; // For walking/falling
|
int flTimeStepSound; // For walking/falling
|
||||||
// Next time we can play a step sound
|
// Next time we can play a step sound
|
||||||
int iStepLeft;
|
int iStepLeft;
|
||||||
float flFallVelocity;
|
float flFallVelocity;
|
||||||
@ -230,12 +255,12 @@ struct com_playermove
|
|||||||
float flSwimTime;
|
float flSwimTime;
|
||||||
float flNextPrimaryAttack;
|
float flNextPrimaryAttack;
|
||||||
int effects; // MUZZLE FLASH, e.g.
|
int effects; // MUZZLE FLASH, e.g.
|
||||||
int flags; // FL_ONGROUND, FL_DUCKING, etc.
|
int flags; // FL_ONGROUND, FL_DUCKING, etc.
|
||||||
int usehull; // 0 = regular player hull, 1 = ducked player hull, 2 = point hull
|
int usehull; // 0 = regular player hull, 1 = ducked player hull, 2 = point hull
|
||||||
float gravity; // Our current gravity and friction.
|
float gravity; // Our current gravity and friction.
|
||||||
float friction;
|
float friction;
|
||||||
int oldbuttons; // Buttons last usercmd
|
int oldbuttons; // Buttons last usercmd
|
||||||
float waterjumptime; // Amount of time left in jumping out of water cycle.
|
float waterjumptime; // Amount of time left in jumping out of water cycle.
|
||||||
qboolean dead; // Are we a dead player?
|
qboolean dead; // Are we a dead player?
|
||||||
int deadflag;
|
int deadflag;
|
||||||
int spectator; // Should we use spectator physics model?
|
int spectator; // Should we use spectator physics model?
|
||||||
@ -260,17 +285,17 @@ struct com_playermove
|
|||||||
vec3_t vuser2;
|
vec3_t vuser2;
|
||||||
vec3_t vuser3;
|
vec3_t vuser3;
|
||||||
vec3_t vuser4;
|
vec3_t vuser4;
|
||||||
int numphysent; // world state
|
int numphysent; // world state
|
||||||
// Number of entities to clip against.
|
// Number of entities to clip against.
|
||||||
physent_t physents[MAX_PHYSENTS];
|
physent_t physents[MAX_PHYSENTS];
|
||||||
int nummoveent; // Number of momvement entities (ladders)
|
int nummoveent; // Number of momvement entities (ladders)
|
||||||
physent_t moveents[MAX_MOVEENTS]; // just a list of ladders
|
physent_t moveents[MAX_MOVEENTS]; // just a list of ladders
|
||||||
int numvisent; // All things being rendered, for tracing against things you don't actually collide with
|
int numvisent; // All things being rendered, for tracing against things you don't actually collide with
|
||||||
physent_t visents[MAX_PHYSENTS];
|
physent_t visents[MAX_PHYSENTS];
|
||||||
usercmd_t cmd; // input to run through physics.
|
usercmd_t cmd; // input to run through physics.
|
||||||
int numtouch; // Trace results for objects we collided with.
|
int numtouch; // Trace results for objects we collided with.
|
||||||
pmtrace_t touchindex[MAX_PHYSENTS];
|
pmtrace_t touchindex[MAX_PHYSENTS];
|
||||||
char physinfo[MAX_PHYSINFO_STRING]; // Physics info string
|
char physinfo[MAX_PHYSINFO_STRING]; // Physics info string
|
||||||
struct movevars_s *movevars;
|
struct movevars_s *movevars;
|
||||||
Vector player_mins[4];
|
Vector player_mins[4];
|
||||||
Vector player_maxs[4];
|
Vector player_maxs[4];
|
||||||
@ -302,21 +327,8 @@ struct com_playermove
|
|||||||
void(*PM_PlaySound)(int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch);
|
void(*PM_PlaySound)(int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch);
|
||||||
const char *(*PM_TraceTexture)(int ground, float *vstart, float *vend);
|
const char *(*PM_TraceTexture)(int ground, float *vstart, float *vend);
|
||||||
void(*PM_PlaybackEventFull)(int flags, int clientindex, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
|
void(*PM_PlaybackEventFull)(int flags, int clientindex, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
|
||||||
};
|
|
||||||
|
|
||||||
class CWeaponBox_COM: public CBaseEntity {
|
pmtrace_t (*PM_PlayerTraceEx)(float *start, float *end, int traceFlags, int (*pfnIgnore)(physent_t *pe));
|
||||||
public:
|
int (*PM_TestPlayerPositionEx)(float *pos, pmtrace_t *ptrace, int (*pfnIgnore)(physent_t *pe));
|
||||||
virtual void Spawn() = 0;
|
struct pmtrace_s *(*PM_TraceLineEx)(float *start, float *end, int flags, int usehulll, int (*pfnIgnore)(physent_t *pe));
|
||||||
virtual void Precache() = 0;
|
|
||||||
virtual void KeyValue(KeyValueData *pkvd) = 0;
|
|
||||||
virtual int Save(CSave &save) = 0;
|
|
||||||
virtual int Restore(CRestore &restore) = 0;
|
|
||||||
virtual void SetObjectCollisionBox() = 0;
|
|
||||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
|
||||||
public:
|
|
||||||
CBasePlayerItem *m_rgpPlayerItems[MAX_ITEM_TYPES];
|
|
||||||
qstring_t m_rgiszAmmo[MAX_AMMO_SLOTS];
|
|
||||||
int m_rgAmmo[MAX_AMMO_SLOTS];
|
|
||||||
int m_cAmmoTypes;
|
|
||||||
bool m_bIsBomb;
|
|
||||||
};
|
};
|
||||||
|
@ -741,7 +741,12 @@ enum
|
|||||||
|
|
||||||
|
|
||||||
typedef unsigned int func_t;
|
typedef unsigned int func_t;
|
||||||
typedef unsigned int string_t;
|
|
||||||
|
#ifdef HAVE_STRONG_TYPEDEF
|
||||||
|
enum class string_t: unsigned int {};
|
||||||
|
#else
|
||||||
|
typedef unsigned int string_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef unsigned char byte;
|
typedef unsigned char byte;
|
||||||
typedef unsigned short word;
|
typedef unsigned short word;
|
||||||
|
@ -62,7 +62,6 @@
|
|||||||
// Header file containing definition of globalvars_t and entvars_t
|
// Header file containing definition of globalvars_t and entvars_t
|
||||||
typedef int EOFFSET; // More explicit than "int"
|
typedef int EOFFSET; // More explicit than "int"
|
||||||
typedef unsigned int func_t;
|
typedef unsigned int func_t;
|
||||||
typedef unsigned int string_t; // from engine's pr_comp.h;
|
|
||||||
typedef float vec_t; // needed before including progdefs.h
|
typedef float vec_t; // needed before including progdefs.h
|
||||||
|
|
||||||
// Vector class
|
// Vector class
|
||||||
|
@ -29,8 +29,8 @@
|
|||||||
|
|
||||||
#include "enginecallback.h"
|
#include "enginecallback.h"
|
||||||
|
|
||||||
#define eoNullEntity 0 // Testing the three types of "entity" for nullity
|
#define eoNullEntity 0 // Testing the three types of "entity" for nullity
|
||||||
#define iStringNull 0 // Testing strings for nullity
|
#define iStringNull (string_t)0 // Testing strings for nullity
|
||||||
|
|
||||||
#define cchMapNameMost 32
|
#define cchMapNameMost 32
|
||||||
|
|
||||||
@ -146,7 +146,8 @@ inline void MESSAGE_BEGIN(int msg_dest, int msg_type, const float *pOrigin, entv
|
|||||||
inline BOOL FNullEnt(EOFFSET eoffset) { return (eoffset == 0); }
|
inline BOOL FNullEnt(EOFFSET eoffset) { return (eoffset == 0); }
|
||||||
inline BOOL FNullEnt(entvars_t *pev) { return (pev == NULL || FNullEnt(OFFSET(pev))); }
|
inline BOOL FNullEnt(entvars_t *pev) { return (pev == NULL || FNullEnt(OFFSET(pev))); }
|
||||||
inline BOOL FNullEnt(const edict_t *pent) { return (pent == NULL || FNullEnt(OFFSET(pent))); }
|
inline BOOL FNullEnt(const edict_t *pent) { return (pent == NULL || FNullEnt(OFFSET(pent))); }
|
||||||
inline BOOL FStringNull(int iString) { return (iString == iStringNull); }
|
inline BOOL FStringNull(int iString) { return ((string_t)iString == iStringNull); }
|
||||||
|
inline BOOL FStringNull(string_t iString) { return (iString == iStringNull); }
|
||||||
inline BOOL FStrEq(const char *sz1, const char *sz2) { return (strcmp(sz1, sz2) == 0); }
|
inline BOOL FStrEq(const char *sz1, const char *sz2) { return (strcmp(sz1, sz2) == 0); }
|
||||||
inline BOOL FClassnameIs(entvars_t *pev, const char *szClassname) { return FStrEq(STRING(pev->classname), szClassname); }
|
inline BOOL FClassnameIs(entvars_t *pev, const char *szClassname) { return FStrEq(STRING(pev->classname), szClassname); }
|
||||||
inline BOOL FClassnameIs(edict_t *pent, const char *szClassname) { return FStrEq(STRING(VARS(pent)->classname), szClassname); }
|
inline BOOL FClassnameIs(edict_t *pent, const char *szClassname) { return FStrEq(STRING(VARS(pent)->classname), szClassname); }
|
||||||
|
@ -311,7 +311,7 @@ public:
|
|||||||
virtual void Touch(CBaseEntity *pOther) = 0;
|
virtual void Touch(CBaseEntity *pOther) = 0;
|
||||||
public:
|
public:
|
||||||
CBasePlayerItem *m_rgpPlayerItems[MAX_ITEM_TYPES];
|
CBasePlayerItem *m_rgpPlayerItems[MAX_ITEM_TYPES];
|
||||||
int m_rgiszAmmo[MAX_AMMO_SLOTS];
|
string_t m_rgiszAmmo[MAX_AMMO_SLOTS];
|
||||||
int m_rgAmmo[MAX_AMMO_SLOTS];
|
int m_rgAmmo[MAX_AMMO_SLOTS];
|
||||||
int m_cAmmoTypes;
|
int m_cAmmoTypes;
|
||||||
bool m_bIsBomb;
|
bool m_bIsBomb;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/***
|
/***
|
||||||
*
|
*
|
||||||
* Copyright (c) 1999, Valve LLC. All rights reserved.
|
* Copyright (c) 1999, Valve LLC. All rights reserved.
|
||||||
*
|
*
|
||||||
* This product contains software technology licensed from Id
|
* This product contains software technology licensed from Id
|
||||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use, distribution, and modification of this source code and/or resulting
|
* Use, distribution, and modification of this source code and/or resulting
|
||||||
@ -86,7 +86,7 @@ struct TraceResult
|
|||||||
};
|
};
|
||||||
|
|
||||||
// CD audio status
|
// CD audio status
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int fPlaying;// is sound playing right now?
|
int fPlaying;// is sound playing right now?
|
||||||
int fWasPlaying;// if not, CD is paused if WasPlaying is true.
|
int fWasPlaying;// if not, CD is paused if WasPlaying is true.
|
||||||
@ -128,7 +128,7 @@ typedef struct enginefuncs_s
|
|||||||
void (*pfnAngleVectors) (const float *rgflVector, float *forward, float *right, float *up);
|
void (*pfnAngleVectors) (const float *rgflVector, float *forward, float *right, float *up);
|
||||||
edict_t* (*pfnCreateEntity) (void);
|
edict_t* (*pfnCreateEntity) (void);
|
||||||
void (*pfnRemoveEntity) (edict_t* e);
|
void (*pfnRemoveEntity) (edict_t* e);
|
||||||
edict_t* (*pfnCreateNamedEntity) (int className);
|
edict_t* (*pfnCreateNamedEntity) (string_t className);
|
||||||
void (*pfnMakeStatic) (edict_t *ent);
|
void (*pfnMakeStatic) (edict_t *ent);
|
||||||
int (*pfnEntIsOnFloor) (edict_t *e);
|
int (*pfnEntIsOnFloor) (edict_t *e);
|
||||||
int (*pfnDropToFloor) (edict_t* e);
|
int (*pfnDropToFloor) (edict_t* e);
|
||||||
@ -172,7 +172,7 @@ typedef struct enginefuncs_s
|
|||||||
void* (*pfnPvEntPrivateData) (edict_t *pEdict);
|
void* (*pfnPvEntPrivateData) (edict_t *pEdict);
|
||||||
void (*pfnFreeEntPrivateData) (edict_t *pEdict);
|
void (*pfnFreeEntPrivateData) (edict_t *pEdict);
|
||||||
const char* (*pfnSzFromIndex) (int iString);
|
const char* (*pfnSzFromIndex) (int iString);
|
||||||
int (*pfnAllocString) (const char *szValue);
|
string_t (*pfnAllocString) (const char *szValue);
|
||||||
struct entvars_s* (*pfnGetVarsOfEnt) (edict_t *pEdict);
|
struct entvars_s* (*pfnGetVarsOfEnt) (edict_t *pEdict);
|
||||||
edict_t* (*pfnPEntityOfEntOffset) (int iEntOffset);
|
edict_t* (*pfnPEntityOfEntOffset) (int iEntOffset);
|
||||||
int (*pfnEntOffsetOfPEntity) (const edict_t *pEdict);
|
int (*pfnEntOffsetOfPEntity) (const edict_t *pEdict);
|
||||||
@ -187,8 +187,8 @@ typedef struct enginefuncs_s
|
|||||||
const char *(*pfnNameForFunction) ( uint32 function );
|
const char *(*pfnNameForFunction) ( uint32 function );
|
||||||
void (*pfnClientPrintf) ( edict_t* pEdict, PRINT_TYPE ptype, const char *szMsg ); // JOHN: engine callbacks so game DLL can print messages to individual clients
|
void (*pfnClientPrintf) ( edict_t* pEdict, PRINT_TYPE ptype, const char *szMsg ); // JOHN: engine callbacks so game DLL can print messages to individual clients
|
||||||
void (*pfnServerPrint) ( const char *szMsg );
|
void (*pfnServerPrint) ( const char *szMsg );
|
||||||
const char *(*pfnCmd_Args) ( void ); // these 3 added
|
const char *(*pfnCmd_Args) ( void ); // these 3 added
|
||||||
const char *(*pfnCmd_Argv) ( int argc ); // so game DLL can easily
|
const char *(*pfnCmd_Argv) ( int argc ); // so game DLL can easily
|
||||||
int (*pfnCmd_Argc) ( void ); // access client 'cmd' strings
|
int (*pfnCmd_Argc) ( void ); // access client 'cmd' strings
|
||||||
void (*pfnGetAttachment) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles );
|
void (*pfnGetAttachment) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles );
|
||||||
void (*pfnCRC32_Init) (CRC32_t *pulCRC);
|
void (*pfnCRC32_Init) (CRC32_t *pulCRC);
|
||||||
@ -269,7 +269,7 @@ typedef struct enginefuncs_s
|
|||||||
|
|
||||||
// PSV: Added for CZ training map
|
// PSV: Added for CZ training map
|
||||||
// const char *(*pfnKeyNameForBinding) ( const char* pBinding );
|
// const char *(*pfnKeyNameForBinding) ( const char* pBinding );
|
||||||
|
|
||||||
sequenceEntry_s* (*pfnSequenceGet) ( const char* fileName, const char* entryName );
|
sequenceEntry_s* (*pfnSequenceGet) ( const char* fileName, const char* entryName );
|
||||||
sentenceEntry_s* (*pfnSequencePickSentence) ( const char* groupName, int pickMethod, int *picked );
|
sentenceEntry_s* (*pfnSequencePickSentence) ( const char* groupName, int pickMethod, int *picked );
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ typedef struct
|
|||||||
} LEVELLIST;
|
} LEVELLIST;
|
||||||
#define MAX_LEVEL_CONNECTIONS 16 // These are encoded in the lower 16bits of ENTITYTABLE->flags
|
#define MAX_LEVEL_CONNECTIONS 16 // These are encoded in the lower 16bits of ENTITYTABLE->flags
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int id; // Ordinal ID of this entity (used for entity <--> pointer conversions)
|
int id; // Ordinal ID of this entity (used for entity <--> pointer conversions)
|
||||||
edict_t *pent; // Pointer to the in-game entity
|
edict_t *pent; // Pointer to the in-game entity
|
||||||
@ -348,7 +348,7 @@ typedef struct
|
|||||||
typedef struct saverestore_s SAVERESTOREDATA;
|
typedef struct saverestore_s SAVERESTOREDATA;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
typedef
|
typedef
|
||||||
#endif
|
#endif
|
||||||
struct saverestore_s
|
struct saverestore_s
|
||||||
{
|
{
|
||||||
@ -372,9 +372,9 @@ struct saverestore_s
|
|||||||
float time;
|
float time;
|
||||||
char szCurrentMapName[32]; // To check global entities
|
char szCurrentMapName[32]; // To check global entities
|
||||||
|
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SAVERESTOREDATA
|
SAVERESTOREDATA
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -416,7 +416,7 @@ typedef enum _fieldtypes
|
|||||||
|
|
||||||
#define FTYPEDESC_GLOBAL 0x0001 // This field is masked for global entity save/restore
|
#define FTYPEDESC_GLOBAL 0x0001 // This field is masked for global entity save/restore
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
FIELDTYPE fieldType;
|
FIELDTYPE fieldType;
|
||||||
char *fieldName;
|
char *fieldName;
|
||||||
@ -429,10 +429,10 @@ typedef struct
|
|||||||
#define ARRAYSIZE(p) (sizeof(p)/sizeof(p[0]))
|
#define ARRAYSIZE(p) (sizeof(p)/sizeof(p[0]))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// Initialize/shutdown the game (one-time call after loading of game .dll )
|
// Initialize/shutdown the game (one-time call after loading of game .dll )
|
||||||
void (*pfnGameInit) ( void );
|
void (*pfnGameInit) ( void );
|
||||||
int (*pfnSpawn) ( edict_t *pent );
|
int (*pfnSpawn) ( edict_t *pent );
|
||||||
void (*pfnThink) ( edict_t *pent );
|
void (*pfnThink) ( edict_t *pent );
|
||||||
void (*pfnUse) ( edict_t *pentUsed, edict_t *pentOther );
|
void (*pfnUse) ( edict_t *pentUsed, edict_t *pentOther );
|
||||||
@ -451,7 +451,7 @@ typedef struct
|
|||||||
void (*pfnResetGlobalState) ( void );
|
void (*pfnResetGlobalState) ( void );
|
||||||
|
|
||||||
qboolean (*pfnClientConnect) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
qboolean (*pfnClientConnect) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
|
||||||
|
|
||||||
void (*pfnClientDisconnect) ( edict_t *pEntity );
|
void (*pfnClientDisconnect) ( edict_t *pEntity );
|
||||||
void (*pfnClientKill) ( edict_t *pEntity );
|
void (*pfnClientKill) ( edict_t *pEntity );
|
||||||
void (*pfnClientPutInServer) ( edict_t *pEntity );
|
void (*pfnClientPutInServer) ( edict_t *pEntity );
|
||||||
@ -469,10 +469,10 @@ typedef struct
|
|||||||
void (*pfnParmsChangeLevel) ( void );
|
void (*pfnParmsChangeLevel) ( void );
|
||||||
|
|
||||||
// Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life
|
// Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life
|
||||||
const char *(*pfnGetGameDescription)( void );
|
const char *(*pfnGetGameDescription)( void );
|
||||||
|
|
||||||
// Notify dll about a player customization.
|
// Notify dll about a player customization.
|
||||||
void (*pfnPlayerCustomization) ( edict_t *pEntity, customization_t *pCustom );
|
void (*pfnPlayerCustomization) ( edict_t *pEntity, customization_t *pCustom );
|
||||||
|
|
||||||
// Spectator funcs
|
// Spectator funcs
|
||||||
void (*pfnSpectatorConnect) ( edict_t *pEntity );
|
void (*pfnSpectatorConnect) ( edict_t *pEntity );
|
||||||
@ -523,7 +523,7 @@ extern DLL_FUNCTIONS gEntityInterface;
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// Called right before the object's memory is freed.
|
// Called right before the object's memory is freed.
|
||||||
// Calls its destructor.
|
// Calls its destructor.
|
||||||
void (*pfnOnFreeEntPrivateData)(edict_t *pEnt);
|
void (*pfnOnFreeEntPrivateData)(edict_t *pEnt);
|
||||||
void (*pfnGameShutdown)(void);
|
void (*pfnGameShutdown)(void);
|
||||||
|
@ -46,7 +46,4 @@
|
|||||||
|
|
||||||
#define BIT(n) (1<<(n))
|
#define BIT(n) (1<<(n))
|
||||||
|
|
||||||
|
|
||||||
typedef unsigned int string_t; // from engine's pr_comp.h;
|
|
||||||
|
|
||||||
#endif // MAINTYPES_H
|
#endif // MAINTYPES_H
|
||||||
|
35
reapi/include/typedef_strong.h
Normal file
35
reapi/include/typedef_strong.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class string_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using unsigned int;
|
||||||
|
};
|
@ -11,6 +11,9 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\com_client.h" />
|
||||||
|
<ClInclude Include="..\include\com_delta_packet.h" />
|
||||||
|
<ClInclude Include="..\include\com_net.h" />
|
||||||
<ClInclude Include="..\include\com_progdefs.h" />
|
<ClInclude Include="..\include\com_progdefs.h" />
|
||||||
<ClInclude Include="..\include\cssdk\common\beamdef.h" />
|
<ClInclude Include="..\include\cssdk\common\beamdef.h" />
|
||||||
<ClInclude Include="..\include\cssdk\common\cl_entity.h" />
|
<ClInclude Include="..\include\cssdk\common\cl_entity.h" />
|
||||||
@ -329,7 +332,7 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;HAVE_STRONG_TYPEDEF;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
|
||||||
@ -379,7 +382,7 @@
|
|||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;HAVE_STRONG_TYPEDEF;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>
|
<SDLCheck>
|
||||||
</SDLCheck>
|
</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir)\..\src;$(ProjectDir)\..\src\mods;$(ProjectDir)\..\src\natives;$(ProjectDir)\..\version;$(ProjectDir)\..\include;$(ProjectDir)\..\include\metamod;$(ProjectDir)\..\include\cssdk\common;$(ProjectDir)\..\include\cssdk\dlls;$(ProjectDir)\..\include\cssdk\engine;$(ProjectDir)\..\include\cssdk\game_shared;$(ProjectDir)\..\include\cssdk\pm_shared;$(ProjectDir)\..\include\cssdk\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir)\..\src;$(ProjectDir)\..\src\mods;$(ProjectDir)\..\src\natives;$(ProjectDir)\..\version;$(ProjectDir)\..\include;$(ProjectDir)\..\include\metamod;$(ProjectDir)\..\include\cssdk\common;$(ProjectDir)\..\include\cssdk\dlls;$(ProjectDir)\..\include\cssdk\engine;$(ProjectDir)\..\include\cssdk\game_shared;$(ProjectDir)\..\include\cssdk\pm_shared;$(ProjectDir)\..\include\cssdk\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
@ -681,6 +681,15 @@
|
|||||||
<ClInclude Include="..\src\mods\queryfile_handler.h">
|
<ClInclude Include="..\src\mods\queryfile_handler.h">
|
||||||
<Filter>src\mods</Filter>
|
<Filter>src\mods</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\com_client.h">
|
||||||
|
<Filter>include</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\com_delta_packet.h">
|
||||||
|
<Filter>include</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\com_net.h">
|
||||||
|
<Filter>include</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\include\cssdk\common\parsemsg.cpp">
|
<ClCompile Include="..\include\cssdk\common\parsemsg.cpp">
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#define CLASS_MEMBERS(cx, mx, postf, pref) ((!(postf & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (postf & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember([](member_t* ptr){ decltypefx(cx, pref, ., mx) f = {};ptr->size = getTypeSize(f);ptr->max_size = sizeof(f);ptr->offset = offsetof(##cx, ##pref##mx);ptr->type = getMemberType(f);ptr->name = #postf;}) : regmember(#pref#mx)
|
#define CLASS_MEMBERS(cx, mx, postf, pref) ((!(postf & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (postf & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember([](member_t* ptr){ decltypefx(cx, pref, ., mx) f = {};ptr->size = getTypeSize(f);ptr->max_size = sizeof(f);ptr->offset = offsetof(##cx, ##pref##mx);ptr->type = getMemberType(f);ptr->name = #postf;}) : regmember(#pref#mx)
|
||||||
|
|
||||||
#define GM_MEMBERS(mx) CLASS_MEMBERS(CHalfLifeMultiplay, mx, mx,)
|
#define GM_MEMBERS(mx) CLASS_MEMBERS(CHalfLifeMultiplay, mx, mx,)
|
||||||
#define GM_VOICE_MEMBERS(mx) CLASS_MEMBERS(CHalfLifeMultiplay, mx, mx, m_VoiceGameMgr.)
|
#define GM_VOICE_MEMBERS(mx) CLASS_MEMBERS(CHalfLifeMultiplay, mx, mx, m_VoiceGameMgr.)
|
||||||
#define BASE_MEMBERS(mx) CLASS_MEMBERS(CBaseEntity, mx, mx,)
|
#define BASE_MEMBERS(mx) CLASS_MEMBERS(CBaseEntity, mx, mx,)
|
||||||
#define ANIM_MEMBERS(mx) CLASS_MEMBERS(CBaseAnimating, mx, mx,)
|
#define ANIM_MEMBERS(mx) CLASS_MEMBERS(CBaseAnimating, mx, mx,)
|
||||||
#define MONST_MEMBERS(mx) CLASS_MEMBERS(CBaseMonster, mx, mx,)
|
#define MONST_MEMBERS(mx) CLASS_MEMBERS(CBaseMonster, mx, mx,)
|
||||||
@ -26,54 +26,56 @@
|
|||||||
#define UCMD_MEMBERS(mx) CLASS_MEMBERS(usercmd_s, mx, ucmd_##mx,)
|
#define UCMD_MEMBERS(mx) CLASS_MEMBERS(usercmd_s, mx, ucmd_##mx,)
|
||||||
#define PMTRACE_MEMBERS(mx) CLASS_MEMBERS(pmtrace_s, mx, pmt_##mx,)
|
#define PMTRACE_MEMBERS(mx) CLASS_MEMBERS(pmtrace_s, mx, pmt_##mx,)
|
||||||
#define CSPL_MEMBERS(mx) CLASS_MEMBERS(CCSPlayer, mx, mx,)
|
#define CSPL_MEMBERS(mx) CLASS_MEMBERS(CCSPlayer, mx, mx,)
|
||||||
#define BASEITEM_MEMBERS(mx) CLASS_MEMBERS(CBasePlayerItem, mx, mx,)
|
#define BASEITEM_MEMBERS(mx) CLASS_MEMBERS(CBasePlayerItem, mx, mx,)
|
||||||
#define BASEWPN_MEMBERS(mx) CLASS_MEMBERS(CBasePlayerWeapon, mx, m_Weapon_##mx, m_)
|
#define BASEWPN_MEMBERS(mx) CLASS_MEMBERS(CBasePlayerWeapon, mx, m_Weapon_##mx, m_)
|
||||||
#define WPNBOX_MEMBERS(mx) CLASS_MEMBERS(CWeaponBox_COM, mx, m_WeaponBox_##mx, m_)
|
#define WPNBOX_MEMBERS(mx) CLASS_MEMBERS(CWeaponBox, mx, m_WeaponBox_##mx, m_)
|
||||||
#define ARMOURY_MEMBERS(mx) CLASS_MEMBERS(CArmoury, mx, m_Armoury_##mx, m_)
|
#define ARMOURY_MEMBERS(mx) CLASS_MEMBERS(CArmoury, mx, m_Armoury_##mx, m_)
|
||||||
|
|
||||||
inline MType getMemberType(float*) { return MEMBER_FLOAT; }
|
inline MType getMemberType(float*) { return MEMBER_FLOAT; }
|
||||||
inline MType getMemberType(float) { return MEMBER_FLOAT; }
|
inline MType getMemberType(float) { return MEMBER_FLOAT; }
|
||||||
|
|
||||||
inline MType getMemberType(double) { return MEMBER_DOUBLE; }
|
inline MType getMemberType(double) { return MEMBER_DOUBLE; }
|
||||||
|
|
||||||
inline MType getMemberType(CBasePlayer**) { return MEMBER_CLASSPTR; }
|
inline MType getMemberType(CBasePlayer**) { return MEMBER_CLASSPTR; }
|
||||||
inline MType getMemberType(CBasePlayer*) { return MEMBER_CLASSPTR; }
|
inline MType getMemberType(CBasePlayer*) { return MEMBER_CLASSPTR; }
|
||||||
inline MType getMemberType(CBasePlayerItem**) { return MEMBER_CLASSPTR; }
|
inline MType getMemberType(CBasePlayerItem**) { return MEMBER_CLASSPTR; }
|
||||||
inline MType getMemberType(CBasePlayerItem*) { return MEMBER_CLASSPTR; }
|
inline MType getMemberType(CBasePlayerItem*) { return MEMBER_CLASSPTR; }
|
||||||
inline MType getMemberType(CBaseEntity*) { return MEMBER_CLASSPTR; }
|
inline MType getMemberType(CBaseEntity*) { return MEMBER_CLASSPTR; }
|
||||||
|
|
||||||
inline MType getMemberType(EHANDLE) { return MEMBER_EHANDLE; }
|
inline MType getMemberType(EHANDLE) { return MEMBER_EHANDLE; }
|
||||||
inline MType getMemberType(entvars_t*) { return MEMBER_EVARS; }
|
inline MType getMemberType(entvars_t*) { return MEMBER_EVARS; }
|
||||||
inline MType getMemberType(edict_t*) { return MEMBER_EDICT; }
|
inline MType getMemberType(edict_t*) { return MEMBER_EDICT; }
|
||||||
|
|
||||||
inline MType getMemberType(Vector*) { return MEMBER_VECTOR; }
|
inline MType getMemberType(Vector*) { return MEMBER_VECTOR; }
|
||||||
inline MType getMemberType(Vector) { return MEMBER_VECTOR; }
|
inline MType getMemberType(Vector) { return MEMBER_VECTOR; }
|
||||||
|
|
||||||
inline MType getMemberType(char*) { return MEMBER_STRING; }
|
inline MType getMemberType(char*) { return MEMBER_STRING; }
|
||||||
|
inline MType getMemberType(string_t) { return MEMBER_QSTRING; }
|
||||||
|
inline MType getMemberType(string_t*) { return MEMBER_QSTRING; }
|
||||||
inline MType getMemberType(qstring_t) { return MEMBER_QSTRING; }
|
inline MType getMemberType(qstring_t) { return MEMBER_QSTRING; }
|
||||||
inline MType getMemberType(qstring_t*) { return MEMBER_QSTRING; }
|
inline MType getMemberType(qstring_t*) { return MEMBER_QSTRING; }
|
||||||
|
|
||||||
inline MType getMemberType(char) { return MEMBER_BYTE; }
|
inline MType getMemberType(char) { return MEMBER_BYTE; }
|
||||||
inline MType getMemberType(byte) { return MEMBER_BYTE; }
|
inline MType getMemberType(byte) { return MEMBER_BYTE; }
|
||||||
inline MType getMemberType(byte*) { return MEMBER_BYTE; }
|
inline MType getMemberType(byte*) { return MEMBER_BYTE; }
|
||||||
|
|
||||||
inline MType getMemberType(int*) { return MEMBER_INTEGER; }
|
inline MType getMemberType(int*) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(int) { return MEMBER_INTEGER; }
|
inline MType getMemberType(int) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(unsigned) { return MEMBER_INTEGER; }
|
inline MType getMemberType(unsigned) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(TeamName) { return MEMBER_INTEGER; }
|
inline MType getMemberType(TeamName) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(JoinState) { return MEMBER_INTEGER; }
|
inline MType getMemberType(JoinState) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(ModelName) { return MEMBER_INTEGER; }
|
inline MType getMemberType(ModelName) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(_Menu) { return MEMBER_INTEGER; }
|
inline MType getMemberType(_Menu) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(MusicState) { return MEMBER_INTEGER; }
|
inline MType getMemberType(MusicState) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(Activity) { return MEMBER_INTEGER; }
|
inline MType getMemberType(Activity) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(MONSTERSTATE) { return MEMBER_INTEGER; }
|
inline MType getMemberType(MONSTERSTATE) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(ArmorType) { return MEMBER_INTEGER; }
|
inline MType getMemberType(ArmorType) { return MEMBER_INTEGER; }
|
||||||
inline MType getMemberType(ArmouryItemPack) { return MEMBER_INTEGER; }
|
inline MType getMemberType(ArmouryItemPack) { return MEMBER_INTEGER; }
|
||||||
|
|
||||||
inline MType getMemberType(short) { return MEMBER_SHORT; }
|
inline MType getMemberType(short) { return MEMBER_SHORT; }
|
||||||
inline MType getMemberType(unsigned short) { return MEMBER_SHORT; }
|
inline MType getMemberType(unsigned short) { return MEMBER_SHORT; }
|
||||||
|
|
||||||
inline MType getMemberType(bool) { return MEMBER_BOOL; }
|
inline MType getMemberType(bool) { return MEMBER_BOOL; }
|
||||||
inline MType getMemberType(CUnifiedSignals) { return MEMBER_SIGNALS; }
|
inline MType getMemberType(CUnifiedSignals) { return MEMBER_SIGNALS; }
|
||||||
inline MType getMemberType(RebuyStruct) { return MEBMER_REBUYSTRUCT; }
|
inline MType getMemberType(RebuyStruct) { return MEBMER_REBUYSTRUCT; }
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ cell AMX_NATIVE_CALL amx_GetGrenadeType(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the view mode on a client.
|
* Sets the view entity on a client.
|
||||||
* This allows pfnSetView able to hooks.
|
* This allows pfnSetView able to hooks.
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
@ -88,11 +88,35 @@ cell AMX_NATIVE_CALL amx_engset_view(AMX *amx, cell *params)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gets the return index of the current view entity on a client.
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
*
|
||||||
|
* native get_viewent(const index);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL amx_get_viewent(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_index };
|
||||||
|
|
||||||
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
|
||||||
|
client_t *pClient = clientOfIndex(params[arg_index]);
|
||||||
|
if (unlikely(pClient == nullptr || !(pClient->active | pClient->spawned | pClient->connected)))
|
||||||
|
{
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return indexOfEdictAmx(pClient->pViewEntity);
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO Natives_Common[] =
|
AMX_NATIVE_INFO Natives_Common[] =
|
||||||
{
|
{
|
||||||
{ "FClassnameIs", amx_FClassnameIs },
|
{ "FClassnameIs", amx_FClassnameIs },
|
||||||
{ "GetGrenadeType", amx_GetGrenadeType },
|
{ "GetGrenadeType", amx_GetGrenadeType },
|
||||||
{ "engset_view", amx_engset_view },
|
{ "engset_view", amx_engset_view },
|
||||||
|
{ "get_viewent", amx_get_viewent },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
@ -453,7 +453,7 @@ void RegisterNatives_Members()
|
|||||||
{
|
{
|
||||||
if (!api_cfg.hasReGameDLL())
|
if (!api_cfg.hasReGameDLL())
|
||||||
fillNatives(ReGameVars_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; });
|
fillNatives(ReGameVars_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; });
|
||||||
|
|
||||||
g_amxxapi.AddNatives(ReGameVars_Natives);
|
g_amxxapi.AddNatives(ReGameVars_Natives);
|
||||||
g_amxxapi.AddNatives(EngineVars_Natives);
|
g_amxxapi.AddNatives(EngineVars_Natives);
|
||||||
}
|
}
|
||||||
@ -512,7 +512,7 @@ BOOL set_member(void* pdata, const member_t *member, cell* value, size_t element
|
|||||||
case MEMBER_QSTRING:
|
case MEMBER_QSTRING:
|
||||||
{
|
{
|
||||||
char *source = getAmxString(value);
|
char *source = getAmxString(value);
|
||||||
string_t newstr = (source && source[0] != '\0') ? ALLOC_STRING(source) : 0;
|
string_t newstr = (source && source[0] != '\0') ? ALLOC_STRING(source) : iStringNull;
|
||||||
set_member<string_t>(pdata, member->offset, newstr, element);
|
set_member<string_t>(pdata, member->offset, newstr, element);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,8 @@
|
|||||||
// AmxModX API
|
// AmxModX API
|
||||||
#include "amxxmodule.h"
|
#include "amxxmodule.h"
|
||||||
|
|
||||||
|
#include "com_client.h"
|
||||||
|
|
||||||
// reapi main
|
// reapi main
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "reapi_utils.h"
|
#include "reapi_utils.h"
|
||||||
|
@ -6,18 +6,18 @@
|
|||||||
|
|
||||||
extern edict_t* g_pEdicts;
|
extern edict_t* g_pEdicts;
|
||||||
|
|
||||||
inline size_t indexOfEdict(edict_t* ed)
|
inline size_t indexOfEdict(const edict_t* ed)
|
||||||
{
|
{
|
||||||
return ed - g_pEdicts;
|
return ed - g_pEdicts;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t indexOfEdict(entvars_t* pev)
|
inline size_t indexOfEdict(const entvars_t* pev)
|
||||||
{
|
{
|
||||||
return indexOfEdict(pev->pContainingEntity);
|
return indexOfEdict(pev->pContainingEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// safe to nullptr
|
// safe to nullptr
|
||||||
inline size_t indexOfEdictAmx(entvars_t* pev)
|
inline size_t indexOfEdictAmx(const entvars_t* pev)
|
||||||
{
|
{
|
||||||
size_t index = AMX_NULLENT;
|
size_t index = AMX_NULLENT;
|
||||||
if (likely(pev != nullptr))
|
if (likely(pev != nullptr))
|
||||||
@ -25,14 +25,22 @@ inline size_t indexOfEdictAmx(entvars_t* pev)
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline size_t indexOfEdictAmx(const edict_t *pEdict)
|
||||||
|
{
|
||||||
|
size_t index = AMX_NULLENT;
|
||||||
|
if (likely(pEdict != nullptr))
|
||||||
|
index = indexOfEdict(pEdict);
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
// fast
|
// fast
|
||||||
inline edict_t* edictByIndex(int index)
|
inline edict_t* edictByIndex(const int index)
|
||||||
{
|
{
|
||||||
return g_pEdicts + index;
|
return g_pEdicts + index;
|
||||||
}
|
}
|
||||||
|
|
||||||
// safe to index -1
|
// safe to index -1
|
||||||
inline edict_t* edictByIndexAmx(int index)
|
inline edict_t* edictByIndexAmx(const int index)
|
||||||
{
|
{
|
||||||
auto ed = g_pEdicts + index;
|
auto ed = g_pEdicts + index;
|
||||||
if (unlikely(index < 0)) // == AMX_NULLENT
|
if (unlikely(index < 0)) // == AMX_NULLENT
|
||||||
@ -41,7 +49,7 @@ inline edict_t* edictByIndexAmx(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline T* getPrivate(int index)
|
inline T* getPrivate(const int index)
|
||||||
{
|
{
|
||||||
T* pdata = nullptr;
|
T* pdata = nullptr;
|
||||||
if (likely(index >= 0)) // != AMX_NULLENT
|
if (likely(index >= 0)) // != AMX_NULLENT
|
||||||
@ -50,7 +58,7 @@ inline T* getPrivate(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline T* getPrivate(edict_t *pEdict)
|
inline T* getPrivate(const edict_t *pEdict)
|
||||||
{
|
{
|
||||||
T* pdata = nullptr;
|
T* pdata = nullptr;
|
||||||
if (likely(pEdict != nullptr))
|
if (likely(pEdict != nullptr))
|
||||||
@ -58,7 +66,7 @@ inline T* getPrivate(edict_t *pEdict)
|
|||||||
return pdata;
|
return pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline entvars_t* PEV(int index)
|
inline entvars_t* PEV(const int index)
|
||||||
{
|
{
|
||||||
entvars_t* pvars = nullptr;
|
entvars_t* pvars = nullptr;
|
||||||
if (likely(index >= 0)) // != AMX_NULLENT
|
if (likely(index >= 0)) // != AMX_NULLENT
|
||||||
@ -67,7 +75,7 @@ inline entvars_t* PEV(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline size_t indexOfPDataAmx(T* pdata)
|
inline size_t indexOfPDataAmx(const T* pdata)
|
||||||
{
|
{
|
||||||
size_t index = AMX_NULLENT;
|
size_t index = AMX_NULLENT;
|
||||||
if (likely(pdata != nullptr))
|
if (likely(pdata != nullptr))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user