ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
(Generate patch)

Comparing deliantra/server/include/newserver.h (file contents):
Revision 1.1.1.1 by root, Fri Feb 3 07:12:49 2006 UTC vs.
Revision 1.11 by root, Sat Sep 16 22:06:17 2006 UTC

1
1/* 2/*
2 * static char *rcsid_newserver_h =
3 * "$Id: newserver.h,v 1.1.1.1 2006/02/03 07:12:49 root Exp $";
4 */
5
6/*
7 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for the X Window System
8 4
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 6 Copyright (C) 1992 Frank Tore Johansen
11 7
12 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
41 * than 3 anyways. 37 * than 3 anyways.
42 */ 38 */
43 39
44#define NUM_LOOK_OBJECTS 50 40#define NUM_LOOK_OBJECTS 50
45 41
46struct MapCell { 42struct MapCell
43{
47 short faces[MAP_LAYERS]; 44 short faces[MAP_LAYERS];
48 uint16 smooth[MAP_LAYERS]; 45 uint16 smooth[MAP_LAYERS];
49 int count; /* This is really darkness in the map1 command */ 46 int count; /* This is really darkness in the map1 command */
47 unsigned char stat_hp; // health of something in this space, or 0
48 tag_t player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient
50}; 49};
51 50
52/* This basically defines the largest size an 51/* This basically defines the largest size an
53 * archetype may be - it is used for allocation of 52 * archetype may be - it is used for allocation of
54 * some structures, as well as determining how far 53 * some structures, as well as determining how far
55 * we should look for the heads of big images. 54 * we should look for the heads of big images.
56 */ 55 */
57#define MAX_HEAD_OFFSET 8 56#define MAX_HEAD_OFFSET 8
58 57
59#define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET) 58# define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
60#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET) 59#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
61 60
62struct Map { 61struct Map
62{
63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y]; 63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
64}; 64};
65 65
66/* True max is 16383 given current map compaction method */ 66/* True max is 16383 given current map compaction method */
67#define MAXANIMNUM 2000 67# define MAXANIMNUM 2000
68 68
69struct statsinfo { 69struct statsinfo
70{
70 char *range, *title; 71 char *range, *title;
71}; 72};
72
73 73
74/* This contains basic information on the socket structure. status is its 74/* This contains basic information on the socket structure. status is its
75 * current state. we set up our on buffers for sending/receiving, so we can 75 * current state. we set up our on buffers for sending/receiving, so we can
76 * handle some higher level functions. fd is the actual file descriptor we 76 * handle some higher level functions. fd is the actual file descriptor we
77 * are using. 77 * are using.
78 */ 78 */
79 79
80enum Sock_Status {Ns_Avail, Ns_Add, Ns_Dead, Ns_Old}; 80enum Sock_Status { Ns_Avail, Ns_Add, Ns_Dead, Ns_Old };
81 81
82/* Reserver 0 for neither of these being set */ 82/* Reserver 0 for neither of these being set */
83enum Old_Mode {Old_Listen=1, Old_Player=2}; 83enum Old_Mode { Old_Listen = 1, Old_Player = 2 };
84 84
85/* Only one map mode can actually be used, so lets make it a switch 85/* Only one map mode can actually be used, so lets make it a switch
86 * instead of having a bunch of different fields that needed to 86 * instead of having a bunch of different fields that needed to
87 * get toggled. 87 * get toggled.
88 */ 88 */
89enum MapMode {Map0Cmd = 0, Map1Cmd = 1, Map1aCmd=2 }; 89enum MapMode { Map0Cmd = 0, Map1Cmd = 1, Map1aCmd = 2 };
90 90
91/* The following is the setup for a ring buffer for storing outbut 91/* The following is the setup for a ring buffer for storing outbut
92 * data that the OS can't handle right away. 92 * data that the OS can't handle right away.
93 */ 93 */
94 94
95typedef struct Buffer { 95struct Buffer
96{
96 char data[SOCKETBUFSIZE]; 97 char data[SOCKETBUFSIZE];
97 int start; 98 int start;
98 int len; 99 int len;
99} Buffer; 100};
100 101
101/* how many times we are allowed to give the wrong password before being kicked. */ 102/* how many times we are allowed to give the wrong password before being kicked. */
102#define MAX_PASSWORD_FAILURES 5 103# define MAX_PASSWORD_FAILURES 5
103 104
104typedef struct NewSocket { 105struct NewSocket
106{
105 enum Sock_Status status; 107 enum Sock_Status status;
106 int fd; 108 int fd;
107 struct Map lastmap; 109 struct Map lastmap;
108 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */ 110 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */
109 uint8 *faces_sent; /* This is a bitmap on sent face status */ 111 uint8 *faces_sent; /* This is a bitmap on sent face status */
110 uint8 anims_sent[MAXANIMNUM]; 112 uint8 anims_sent[MAXANIMNUM];
111 struct statsinfo stats; 113 struct statsinfo stats;
112 /* If we get an incomplete packet, this is used to hold the data. */ 114 /* If we get an incomplete packet, this is used to hold the data. */
113 SockList inbuf; 115 SockList inbuf;
114 char *host; /* Which host it is connected from (ip address)*/ 116 char *host; /* Which host it is connected from (ip address) */
115 uint8 password_fails; /* how many times the player has failed to give the right password */ 117 uint8 password_fails; /* how many times the player has failed to give the right password */
116 Buffer outputbuffer; /* For undeliverable data */ 118 Buffer outputbuffer; /* For undeliverable data */
117 uint32 facecache:1; /* If true, client is caching images */ 119 uint32 facecache:1; /* If true, client is caching images */
118 uint32 sent_scroll:1; 120 uint32 sent_scroll:1;
119 uint32 sound:1; /* does the client want sound */ 121 uint32 sound:1; /* does the client want sound */
120 uint32 exp64:1; /* Client wants 64 bit exp data, as well as skill data */ 122 uint32 exp64:1; /* Client wants 64 bit exp data, as well as skill data */
121 uint32 newmapcmd:1; /* Send newmap command when entering new map SMACFIGGEN*/ 123 uint32 newmapcmd:1; /* Send newmap command when entering new map SMACFIGGEN */
124 uint32 plugincmd:1; /* CF+ extend the protocol through a plug-in */
125 uint32 mapinfocmd:1; /* CF+ return map info and send map change info */
126 uint32 extcmd:1; /* CF+ call into extensions/plugins */
127 uint32 extmap:1; /* CF+ extend map comamnd with extra data */
128 uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */
122 uint32 darkness:1; /* True if client wants darkness information */ 129 uint32 darkness:1; /* True if client wants darkness information */
123 uint32 image2:1; /* Client wants image2/face2 commands */ 130 uint32 image2:1; /* Client wants image2/face2 commands */
124 uint32 update_look:1; /* If true, we need to send the look window */ 131 uint32 update_look:1; /* If true, we need to send the look window */
125 uint32 can_write:1; /* Can we write to this socket? */ 132 uint32 can_write:1; /* Can we write to this socket? */
126 uint32 has_readable_type:1; /* If true client accept additional text information 133 uint32 has_readable_type:1; /* If true client accept additional text information
127 used to arrange text in books, scrolls, or scripted dialogs */ 134 used to arrange text in books, scrolls, or scripted dialogs */
128 uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */ 135 uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */
129 uint32 supported_readables; /* each bit is a readable supported by client */ 136 uint32 supported_readables; /* each bit is a readable supported by client */
130 uint32 cs_version, sc_version; /* versions of the client */ 137 uint32 cs_version, sc_version; /* versions of the client */
131 enum MapMode mapmode; /* Type of map commands the client wants. */ 138 enum MapMode mapmode; /* Type of map commands the client wants. */
132 uint16 look_position; /* start of drawing of look window */ 139 uint16 look_position; /* start of drawing of look window */
133 uint8 mapx, mapy; /* How large a map the client wants */ 140 uint8 mapx, mapy; /* How large a map the client wants */
134 uint8 itemcmd; /* What version of the 'item' protocol command to use */ 141 uint8 itemcmd; /* What version of the 'item' protocol command to use */
135 uint8 faceset; /* Set the client is using, default 0 */ 142 uint8 faceset; /* Set the client is using, default 0 */
136 uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps*/ 143 uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps */
137 /* Below are flags for extedend infos to pass to client 144 /* Below are flags for extedend infos to pass to client
138 * with S->C mapextended command */ 145 * with S->C mapextended command */
139 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos*/ 146 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos */
140 147
148 struct mapstruct *current_map; // CF+ last/current player map
149 int current_x, current_y; // CF+ last/current map position
150 char client[64]; // CF+ client name/version
151
141 /* Below here is information only relevant for old sockets */ 152 /* Below here is information only relevant for old sockets */
142 char *comment; /* name or listen comment */ 153 char *comment; /* name or listen comment */
143 enum Old_Mode old_mode; 154 enum Old_Mode old_mode;
144} NewSocket; 155};
145
146 156
147#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ 157#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
148 ( ((__type)>0) &&\ 158 ( ((__type)>0) &&\
149 ((__sockPtr)->has_readable_type) && \ 159 ((__sockPtr)->has_readable_type) && \
150 ((__sockPtr)->supported_readables & (1<<(__type))) ) 160 ((__sockPtr)->supported_readables & (1<<(__type))) )
151
152 161
153/* Bitmask for the faces_sent[] array - what 162/* Bitmask for the faces_sent[] array - what
154 * portion of the face have we sent? 163 * portion of the face have we sent?
155 */ 164 */
156#define NS_FACESENT_FACE 0x1 165#define NS_FACESENT_FACE 0x1
164 * a visible object and another info related to a 4 square 173 * a visible object and another info related to a 4 square
165 * width and height area). At the begin of an extended info packet 174 * width and height area). At the begin of an extended info packet
166 * is a bit field. A bit is activated for each extended info 175 * is a bit field. A bit is activated for each extended info
167 * present in the data 176 * present in the data
168 */ 177 */
178
169/* Meanings: 179/* Meanings:
170 * EMI_NOREDRAW Take extended infos into account but don't redraw, 180 * EMI_NOREDRAW Take extended infos into account but don't redraw,
171 * some additionnal datas will follow in a new packet 181 * some additionnal datas will follow in a new packet
172 * EMI_SMOOTH Datas about smoothing 182 * EMI_SMOOTH Datas about smoothing
173 */ 183 */
174#define EMI_NOREDRAW 0x01 184#define EMI_NOREDRAW 0x01
175#define EMI_SMOOTH 0x02 185#define EMI_SMOOTH 0x02
176 186
177/* this last one says the bitfield continue un next byte 187/* this last one says the bitfield continue un next byte
178 * There may be several on contiguous bytes. So there is 7 188 * There may be several on contiguous bytes. So there is 7
179 * actual bits used per byte, and the number of bytes 189 * actual bits used per byte, and the number of bytes
182#define EMI_HASMOREBITS 0x80 192#define EMI_HASMOREBITS 0x80
183 193
184#define FACE_TYPES 1 194#define FACE_TYPES 1
185#define PNG_FACE_INDEX 0 195#define PNG_FACE_INDEX 0
186 196
187typedef struct Socket_Info { 197struct Socket_Info
198{
188 struct timeval timeout; /* Timeout for select */ 199 struct timeval timeout; /* Timeout for select */
189 int max_filedescriptor; /* max filedescriptor on the system */ 200 int max_filedescriptor; /* max filedescriptor on the system */
190 int nconns; /* Number of connections */ 201 int nconns; /* Number of connections */
191 int allocated_sockets; /* number of allocated in init_sockets */ 202 int allocated_sockets; /* number of allocated in init_sockets */
192} Socket_Info; 203};
193 204
194extern Socket_Info socket_info; 205extern Socket_Info socket_info;
195 206
196#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ 207#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
197#define VERSION_SC 1027 208#define VERSION_SC 1027
198#define VERSION_INFO "Crossfire Server" 209#define VERSION_INFO "Crossfire+ Server"
199
200
201 210
202#endif 211#endif
212

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines