00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef SERVER_H
00016 #define SERVER_H
00017
00018 #include <Windows.h>
00019
00020 #include "Genesis.h"
00021 #include "Errorlog.h"
00022 #include "Ram.h"
00023
00024 #include "Game\Game.h"
00025 #include "Game\GPlayer.h"
00026 #include "Game\GenVSI.h"
00027
00028 #include "Client.h"
00029 #include "GameMgr.h"
00030 #include "NetMgr.h"
00031 #include "Buffer.h"
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037
00038
00039
00040 typedef struct Server_Server Server_Server;
00041
00042 #define MAX_SERVER_CLASS_SPAWNS 256
00043 #define MAX_CLASS_NAME_STRING 64
00044
00045 #define SERVER_MAX_PROC_INDEX 512
00046
00047 typedef struct Server_CSpawn
00048 {
00049 char Name[MAX_CLASS_NAME_STRING];
00050 GenVSI_SpawnFunc *Func;
00051 GenVSI_DestroyFunc *DFunc;
00052
00053 } Server_CSpawn;
00054
00055 typedef struct
00056 {
00057 int32 NumSpawnTime;
00058 int32 NumViewFlags;
00059 int32 NumViewIndex;
00060 int32 NumMotionIndex;
00061 int32 NumFxFlags;
00062 int32 NumPos;
00063 int32 NumAngles;
00064 int32 NumFrameTime;
00065 int32 NumScale;
00066 int32 NumVelocity;
00067 int32 NumState;
00068 int32 NumControlIndex;
00069 int32 NumTriggerIndex;
00070 int32 NumMinsMaxs;
00071
00072 int32 NumBytesToSend;
00073 int32 TotalBytesSent;
00074 } Server_NetStat;
00075
00076 typedef geBoolean Server_Control(Server_Server *Server, GPlayer *Player, float Time);
00077 typedef geBoolean Server_Trigger(Server_Server *Server, GPlayer *Player, GPlayer *Target);
00078 typedef geBoolean Server_Blocked(Server_Server *Server, GPlayer *Player, GPlayer *Target);
00079
00080 typedef struct Server_Client
00081 {
00082 geBoolean Active;
00083
00084 geBoolean Spawned;
00085
00086 geCSNetMgr_NetID NetID;
00087
00088 NetMgr_NetState NetState;
00089 geBoolean NetStateConfirmed[NETMGR_MAX_NET_STATES];
00090
00091 GPlayer *Player;
00092
00093
00094 float OldMoveTime;
00095
00096 float MoveTime;
00097 float ForwardSpeed;
00098 geVec3d Angles;
00099 uint16 ButtonBits;
00100
00101 geVec3d Pos;
00102
00103 GenVSI_CMove Move;
00104
00105
00106 char Name[64];
00107 int32 Score;
00108 int32 Health;
00109
00110 int32 NumPings;
00111 float Pings[10];
00112 float Ping;
00113
00114 geBoolean InventoryHas[MAX_PLAYER_ITEMS];
00115 uint16 Inventory[MAX_PLAYER_ITEMS];
00116
00117 int16 CurrentWeapon;
00118 float NextWeaponTime;
00119
00120 geVec3d GunOffset;
00121
00122
00123
00124 uint16 SendFlags[NETMGR_MAX_PLAYERS];
00125 float NextUpdate;
00126 } Server_Client;
00127
00128 typedef struct Server_Server
00129 {
00130 Client_Client *Client;
00131
00132 GenVSI GenVSI;
00133 GameMgr *GMgr;
00134 NetMgr *NMgr;
00135
00136 float NextUpdate;
00137
00138 Server_Client Clients[NETMGR_MAX_CLIENTS];
00139 GPlayer SvPlayers[NETMGR_MAX_PLAYERS];
00140
00141
00142 void *ProcIndex[SERVER_MAX_PROC_INDEX];
00143
00144 int32 NumTotalPlayers;
00145
00146 int32 NumClassSpawns;
00147 Server_CSpawn ClassSpawns[MAX_SERVER_CLASS_SPAWNS];
00148
00149
00150 char WorldName[128];
00151 geBoolean ChangeWorldRequest;
00152 GenVSI_NewWorldCB *NewWorldCB;
00153 GenVSI_ShutdownWorldCB *ShutdownWorldCB1;
00154 GenVSI_ShutdownWorldCB *ShutdownWorldCB2;
00155
00156 int32 ViewPlayer;
00157
00158 Server_NetStat NetStats;
00159
00160 } Server_Server;
00161
00162
00163
00164
00165
00166 Server_Server *Server_Create(GameMgr *GMgr, NetMgr *NMgr, Client_Client *Client, const char *LevelHack);
00167 void Server_Destroy(Server_Server *Server);
00168 geBoolean Server_SetupClientWithCurrentWorld(Server_Server *Server, Server_Client *Client);
00169 geBoolean Server_SetupAllClientsWithCurrentWorld(Server_Server *Server);
00170 geBoolean Server_SendClientStartupData(Server_Server *Server, Server_Client *Client);
00171 geBoolean Server_SendClientCurrentWorldData(Server_Server *Server, Server_Client *Client);
00172 geBoolean Server_ClientConnect(Server_Server *Server, const geCSNetMgr_NetClient *Client);
00173 Server_Client *Server_BotConnect(Server_Server *Server, const char *BotName);
00174 geBoolean Server_ClientDisconnect(Server_Server *Server, geCSNetMgr_NetID Id, const char *Name);
00175 geBoolean Server_ClientDisconnectByHandle(Server_Server *Server, GenVSI_CHandle);
00176 GPlayer *Server_CreatePlayer2(Server_Server *Server, const char *ClassName, int32 Mode);
00177 GPlayer *Server_CreatePlayer(Server_Server *Server, const char *ClassName);
00178 void Server_DestroyPlayer(Server_Server *Server, GPlayer *Player);
00179 geBoolean Server_FreeWorldData(Server_Server *Server);
00180 geBoolean Server_NewWorldDefaults(Server_Server *Server);
00181 geBoolean Server_SpawnWorld(Server_Server *Server);
00182 geBoolean Server_StartupWorld(Server_Server *Server);
00183 geBoolean Server_Frame(Server_Server *Server, GameMgr *GMgr, float Time);
00184
00185 void Server_ProcessClientMove( Server_Server *Server,
00186 Server_Client *Client,
00187 float ForwardSpeed,
00188 float Pitch,
00189 float Yaw,
00190 uint16 ButtonBits,
00191 uint16 Weapon,
00192 float Time);
00193
00194 #ifdef __cplusplus
00195 }
00196 #endif
00197
00198 #endif