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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines