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.5 by elmex, Sun Aug 13 17:16:02 2006 UTC vs.
Revision 1.14 by root, Wed Sep 20 21:53:50 2006 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines