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.10 by root, Tue Aug 29 08:01:36 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.10 2006/08/29 08:01:36 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 */
50 unsigned char stat_hp; // health of something in this space, or 0 47 unsigned char stat_hp; // health of something in this space, or 0
51 tag_t player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient 48 tag_t player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient
52}; 49};
53 50
54/* This basically defines the largest size an 51/* This basically defines the largest size an
55 * archetype may be - it is used for allocation of 52 * archetype may be - it is used for allocation of
56 * some structures, as well as determining how far 53 * some structures, as well as determining how far
57 * we should look for the heads of big images. 54 * we should look for the heads of big images.
58 */ 55 */
59#define MAX_HEAD_OFFSET 8 56#define MAX_HEAD_OFFSET 8
60 57
61#define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET) 58# define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
62#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET) 59#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
63 60
64struct Map { 61struct Map
62{
65 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y]; 63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
66}; 64};
67 65
68/* True max is 16383 given current map compaction method */ 66/* True max is 16383 given current map compaction method */
69#define MAXANIMNUM 2000 67# define MAXANIMNUM 2000
70 68
71struct statsinfo { 69struct statsinfo
70{
72 char *range, *title; 71 char *range, *title;
73}; 72};
74
75 73
76/* This contains basic information on the socket structure. status is its 74/* This contains basic information on the socket structure. status is its
77 * 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
78 * 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
79 * are using. 77 * are using.
80 */ 78 */
81 79
82enum Sock_Status {Ns_Avail, Ns_Add, Ns_Dead, Ns_Old}; 80enum Sock_Status { Ns_Avail, Ns_Add, Ns_Dead, Ns_Old };
83 81
84/* Reserver 0 for neither of these being set */ 82/* Reserver 0 for neither of these being set */
85enum Old_Mode {Old_Listen=1, Old_Player=2}; 83enum Old_Mode { Old_Listen = 1, Old_Player = 2 };
86 84
87/* 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
88 * instead of having a bunch of different fields that needed to 86 * instead of having a bunch of different fields that needed to
89 * get toggled. 87 * get toggled.
90 */ 88 */
91enum MapMode {Map0Cmd = 0, Map1Cmd = 1, Map1aCmd=2 }; 89enum MapMode { Map0Cmd = 0, Map1Cmd = 1, Map1aCmd = 2 };
92 90
93/* 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
94 * data that the OS can't handle right away. 92 * data that the OS can't handle right away.
95 */ 93 */
96 94
97typedef struct Buffer { 95struct Buffer
96{
98 char data[SOCKETBUFSIZE]; 97 char data[SOCKETBUFSIZE];
99 int start; 98 int start;
100 int len; 99 int len;
101} Buffer; 100};
102 101
103/* 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. */
104#define MAX_PASSWORD_FAILURES 5 103# define MAX_PASSWORD_FAILURES 5
105 104
106typedef struct NewSocket { 105struct NewSocket
106{
107 enum Sock_Status status; 107 enum Sock_Status status;
108 int fd; 108 int fd;
109 struct Map lastmap; 109 struct Map lastmap;
110 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[] */
111 uint8 *faces_sent; /* This is a bitmap on sent face status */ 111 uint8 *faces_sent; /* This is a bitmap on sent face status */
112 uint8 anims_sent[MAXANIMNUM]; 112 uint8 anims_sent[MAXANIMNUM];
113 struct statsinfo stats; 113 struct statsinfo stats;
114 /* 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. */
115 SockList inbuf; 115 SockList inbuf;
116 char *host; /* Which host it is connected from (ip address)*/ 116 char *host; /* Which host it is connected from (ip address) */
117 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 */
118 Buffer outputbuffer; /* For undeliverable data */ 118 Buffer outputbuffer; /* For undeliverable data */
119 uint32 facecache:1; /* If true, client is caching images */ 119 uint32 facecache:1; /* If true, client is caching images */
120 uint32 sent_scroll:1; 120 uint32 sent_scroll:1;
121 uint32 sound:1; /* does the client want sound */ 121 uint32 sound:1; /* does the client want sound */
122 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 */
123 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 */ 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 */ 125 uint32 mapinfocmd:1; /* CF+ return map info and send map change info */
126 uint32 extcmd:1; /* CF+ call into extensions/plugins */ 126 uint32 extcmd:1; /* CF+ call into extensions/plugins */
127 uint32 extmap:1; /* CF+ extend map comamnd with extra data */ 127 uint32 extmap:1; /* CF+ extend map comamnd with extra data */
128 uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */ 128 uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */
129 uint32 darkness:1; /* True if client wants darkness information */ 129 uint32 darkness:1; /* True if client wants darkness information */
130 uint32 image2:1; /* Client wants image2/face2 commands */ 130 uint32 image2:1; /* Client wants image2/face2 commands */
131 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 */
132 uint32 can_write:1; /* Can we write to this socket? */ 132 uint32 can_write:1; /* Can we write to this socket? */
133 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
134 used to arrange text in books, scrolls, or scripted dialogs */ 134 used to arrange text in books, scrolls, or scripted dialogs */
135 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 */
136 uint32 supported_readables; /* each bit is a readable supported by client */ 136 uint32 supported_readables; /* each bit is a readable supported by client */
137 uint32 cs_version, sc_version; /* versions of the client */ 137 uint32 cs_version, sc_version; /* versions of the client */
138 enum MapMode mapmode; /* Type of map commands the client wants. */ 138 enum MapMode mapmode; /* Type of map commands the client wants. */
139 uint16 look_position; /* start of drawing of look window */ 139 uint16 look_position; /* start of drawing of look window */
140 uint8 mapx, mapy; /* How large a map the client wants */ 140 uint8 mapx, mapy; /* How large a map the client wants */
141 uint8 itemcmd; /* What version of the 'item' protocol command to use */ 141 uint8 itemcmd; /* What version of the 'item' protocol command to use */
142 uint8 faceset; /* Set the client is using, default 0 */ 142 uint8 faceset; /* Set the client is using, default 0 */
143 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 */
144 /* Below are flags for extedend infos to pass to client 144 /* Below are flags for extedend infos to pass to client
145 * with S->C mapextended command */ 145 * with S->C mapextended command */
146 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos*/ 146 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos */
147 147
148 struct mapstruct *current_map; // CF+ last/current player map 148 struct mapstruct *current_map; // CF+ last/current player map
149 int current_x, current_y; // CF+ last/current map position 149 int current_x, current_y; // CF+ last/current map position
150 char client[64]; // CF+ client name/version 150 char client[64]; // CF+ client name/version
151 151
152 /* Below here is information only relevant for old sockets */ 152 /* Below here is information only relevant for old sockets */
153 char *comment; /* name or listen comment */ 153 char *comment; /* name or listen comment */
154 enum Old_Mode old_mode; 154 enum Old_Mode old_mode;
155} NewSocket; 155};
156
157 156
158#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ 157#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
159 ( ((__type)>0) &&\ 158 ( ((__type)>0) &&\
160 ((__sockPtr)->has_readable_type) && \ 159 ((__sockPtr)->has_readable_type) && \
161 ((__sockPtr)->supported_readables & (1<<(__type))) ) 160 ((__sockPtr)->supported_readables & (1<<(__type))) )
162
163 161
164/* Bitmask for the faces_sent[] array - what 162/* Bitmask for the faces_sent[] array - what
165 * portion of the face have we sent? 163 * portion of the face have we sent?
166 */ 164 */
167#define NS_FACESENT_FACE 0x1 165#define NS_FACESENT_FACE 0x1
175 * a visible object and another info related to a 4 square 173 * a visible object and another info related to a 4 square
176 * 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
177 * 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
178 * present in the data 176 * present in the data
179 */ 177 */
178
180/* Meanings: 179/* Meanings:
181 * EMI_NOREDRAW Take extended infos into account but don't redraw, 180 * EMI_NOREDRAW Take extended infos into account but don't redraw,
182 * some additionnal datas will follow in a new packet 181 * some additionnal datas will follow in a new packet
183 * EMI_SMOOTH Datas about smoothing 182 * EMI_SMOOTH Datas about smoothing
184 */ 183 */
185#define EMI_NOREDRAW 0x01 184#define EMI_NOREDRAW 0x01
186#define EMI_SMOOTH 0x02 185#define EMI_SMOOTH 0x02
187 186
188/* this last one says the bitfield continue un next byte 187/* this last one says the bitfield continue un next byte
189 * There may be several on contiguous bytes. So there is 7 188 * There may be several on contiguous bytes. So there is 7
190 * actual bits used per byte, and the number of bytes 189 * actual bits used per byte, and the number of bytes
193#define EMI_HASMOREBITS 0x80 192#define EMI_HASMOREBITS 0x80
194 193
195#define FACE_TYPES 1 194#define FACE_TYPES 1
196#define PNG_FACE_INDEX 0 195#define PNG_FACE_INDEX 0
197 196
198typedef struct Socket_Info { 197struct Socket_Info
198{
199 struct timeval timeout; /* Timeout for select */ 199 struct timeval timeout; /* Timeout for select */
200 int max_filedescriptor; /* max filedescriptor on the system */ 200 int max_filedescriptor; /* max filedescriptor on the system */
201 int nconns; /* Number of connections */ 201 int nconns; /* Number of connections */
202 int allocated_sockets; /* number of allocated in init_sockets */ 202 int allocated_sockets; /* number of allocated in init_sockets */
203} Socket_Info; 203};
204 204
205extern Socket_Info socket_info; 205extern Socket_Info socket_info;
206 206
207#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ 207#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
208#define VERSION_SC 1027 208#define VERSION_SC 1027
209#define VERSION_INFO "Crossfire+ Server" 209#define VERSION_INFO "Crossfire+ Server"
210 210
211#endif 211#endif
212

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines