ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
Revision: 1.2
Committed: Sat Apr 15 22:38:30 2006 UTC (18 years, 1 month ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.1: +5 -1 lines
Log Message:
implement first part of mapinfo command, make way but disable plugincmd

File Contents

# Content
1 /*
2 * static char *rcsid_newserver_h =
3 * "$Id$";
4 */
5
6 /*
7 CrossFire, A Multiplayer game for X-windows
8
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen
11
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
26 The author can be reached via e-mail to crossfire-devel@real-time.com
27 */
28
29 /*
30 newserver.h defines various structures and values that are use for the
31 new client server communication method. Values defined here are only
32 used on the server side code. For shared client/server values, see
33 newclient.h
34 */
35
36
37 #ifndef NEWSERVER_H
38 #define NEWSERVER_H
39
40 /* Reduce this from 50 to 5 - as it is now, there will never be more
41 * than 3 anyways.
42 */
43
44 #define NUM_LOOK_OBJECTS 50
45
46 struct MapCell {
47 short faces[MAP_LAYERS];
48 uint16 smooth[MAP_LAYERS];
49 int count; /* This is really darkness in the map1 command */
50 };
51
52 /* This basically defines the largest size an
53 * archetype may be - it is used for allocation of
54 * some structures, as well as determining how far
55 * we should look for the heads of big images.
56 */
57 #define MAX_HEAD_OFFSET 8
58
59 #define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
60 #define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
61
62 struct Map {
63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
64 };
65
66 /* True max is 16383 given current map compaction method */
67 #define MAXANIMNUM 2000
68
69 struct statsinfo {
70 char *range, *title;
71 };
72
73
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
76 * handle some higher level functions. fd is the actual file descriptor we
77 * are using.
78 */
79
80 enum Sock_Status {Ns_Avail, Ns_Add, Ns_Dead, Ns_Old};
81
82 /* Reserver 0 for neither of these being set */
83 enum Old_Mode {Old_Listen=1, Old_Player=2};
84
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
87 * get toggled.
88 */
89 enum MapMode {Map0Cmd = 0, Map1Cmd = 1, Map1aCmd=2 };
90
91 /* The following is the setup for a ring buffer for storing outbut
92 * data that the OS can't handle right away.
93 */
94
95 typedef struct Buffer {
96 char data[SOCKETBUFSIZE];
97 int start;
98 int len;
99 } Buffer;
100
101 /* how many times we are allowed to give the wrong password before being kicked. */
102 #define MAX_PASSWORD_FAILURES 5
103
104 typedef struct NewSocket {
105 enum Sock_Status status;
106 int fd;
107 struct Map lastmap;
108 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 */
110 uint8 anims_sent[MAXANIMNUM];
111 struct statsinfo stats;
112 /* If we get an incomplete packet, this is used to hold the data. */
113 SockList inbuf;
114 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 */
116 Buffer outputbuffer; /* For undeliverable data */
117 uint32 facecache:1; /* If true, client is caching images */
118 uint32 sent_scroll:1;
119 uint32 sound:1; /* does the client want sound */
120 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*/
122 uint32 plugincmd:1; /* CF+ extend the protocol through a plug-in */
123 uint32 mapinfocmd:1; /* CF+ return map info and send map change info */
124 uint32 darkness:1; /* True if client wants darkness information */
125 uint32 image2:1; /* Client wants image2/face2 commands */
126 uint32 update_look:1; /* If true, we need to send the look window */
127 uint32 can_write:1; /* Can we write to this socket? */
128 uint32 has_readable_type:1; /* If true client accept additional text information
129 used to arrange text in books, scrolls, or scripted dialogs */
130 uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */
131 uint32 supported_readables; /* each bit is a readable supported by client */
132 uint32 cs_version, sc_version; /* versions of the client */
133 enum MapMode mapmode; /* Type of map commands the client wants. */
134 uint16 look_position; /* start of drawing of look window */
135 uint8 mapx, mapy; /* How large a map the client wants */
136 uint8 itemcmd; /* What version of the 'item' protocol command to use */
137 uint8 faceset; /* Set the client is using, default 0 */
138 uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps*/
139 /* Below are flags for extedend infos to pass to client
140 * with S->C mapextended command */
141 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos*/
142
143 struct mapdef *current_map; /* CF+ current player map */
144
145 /* Below here is information only relevant for old sockets */
146 char *comment; /* name or listen comment */
147 enum Old_Mode old_mode;
148 } NewSocket;
149
150
151 #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
152 ( ((__type)>0) &&\
153 ((__sockPtr)->has_readable_type) && \
154 ((__sockPtr)->supported_readables & (1<<(__type))) )
155
156
157 /* Bitmask for the faces_sent[] array - what
158 * portion of the face have we sent?
159 */
160 #define NS_FACESENT_FACE 0x1
161 #define NS_FACESENT_SMOOTH 0x2
162
163 /* Constants in the form EMI_ is for extended map infos.
164 * Even if the client select the additionnal infos it wants
165 * on the map, there may exist cases where this whole info
166 * is not given in one buch but in separate bunches. This
167 * is done performance reasons (imagine some info related to
168 * a visible object and another info related to a 4 square
169 * width and height area). At the begin of an extended info packet
170 * is a bit field. A bit is activated for each extended info
171 * present in the data
172 */
173 /* Meanings:
174 * EMI_NOREDRAW Take extended infos into account but don't redraw,
175 * some additionnal datas will follow in a new packet
176 * EMI_SMOOTH Datas about smoothing
177 */
178 #define EMI_NOREDRAW 0x01
179 #define EMI_SMOOTH 0x02
180
181 /* this last one says the bitfield continue un next byte
182 * There may be several on contiguous bytes. So there is 7
183 * actual bits used per byte, and the number of bytes
184 * is not fixed in protocol
185 */
186 #define EMI_HASMOREBITS 0x80
187
188 #define FACE_TYPES 1
189 #define PNG_FACE_INDEX 0
190
191 typedef struct Socket_Info {
192 struct timeval timeout; /* Timeout for select */
193 int max_filedescriptor; /* max filedescriptor on the system */
194 int nconns; /* Number of connections */
195 int allocated_sockets; /* number of allocated in init_sockets */
196 } Socket_Info;
197
198 extern Socket_Info socket_info;
199
200 #define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
201 #define VERSION_SC 1027
202 #define VERSION_INFO "Crossfire Server"
203
204
205
206 #endif