ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
Revision: 1.14
Committed: Wed Sep 20 21:53:50 2006 UTC (17 years, 9 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.13: +33 -36 lines
Log Message:
added many accessors and mutators to struct player, including *title* and (hint, hint) *own_title*

File Contents

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