server-1.12/include/newserver.h

185 lines
6.9 KiB
C

/*
* static char *rcsid_newserver_h =
* "$Id: newserver.h 11578 2009-02-23 22:02:27Z lalo $";
*/
/*
CrossFire, A Multiplayer game for X-windows
Copyright (C) 2002 Mark Wedel & Crossfire Development Team
Copyright (C) 1992 Frank Tore Johansen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author can be reached via e-mail to crossfire-devel@real-time.com
*/
/**
* @file
* Defines various structures and values that are used for the
* new client server communication method. Values defined here are only
* used on the server side code. For shared client/server values, see
* @ref newclient.h
*/
#ifndef NEWSERVER_H
#define NEWSERVER_H
/**
* The lower bound for the number of objects to send for the 'look' window
* (container or ground view).
*/
#define MIN_NUM_LOOK_OBJECTS 3 /* 3=prev group, one object, next group */
/**
* Default value for the number of objects to send for the 'look' window
* (container or ground view).
*/
#define DEFAULT_NUM_LOOK_OBJECTS 50
/**
* The upper bound for the number of objects to send for the 'look' window
* (container or ground view).
*/
#define MAX_NUM_LOOK_OBJECTS 100
/** One map cell, as sent to the client. */
struct map_cell_struct {
uint16 faces[MAP_LAYERS];
uint16 smooth[MAP_LAYERS];
int darkness;
};
/**
* This basically defines the largest size an
* archetype may be - it is used for allocation of
* some structures, as well as determining how far
* we should look for the heads of big images.
*/
#define MAX_HEAD_OFFSET 8
#define MAX_CLIENT_X (MAP_CLIENT_X+MAX_HEAD_OFFSET)
#define MAX_CLIENT_Y (MAP_CLIENT_Y+MAX_HEAD_OFFSET)
/** One map for a player. */
struct Map {
struct map_cell_struct cells[MAX_CLIENT_X][MAX_CLIENT_Y];
};
/** True max is 16383 given current map compaction method. */
#define MAXANIMNUM 2000
/** Contains the last range/title information sent to client. */
struct statsinfo {
char *range, *title;
};
/**
* What state a socket is in.
*/
enum Sock_Status {
Ns_Avail,
Ns_Add,
Ns_Dead
};
/**
* The following is the setup for a ring buffer for storing outbut
* data that the OS can't handle right away.
*/
typedef struct buffer_struct {
char data[SOCKETBUFSIZE];
int start;
int len;
} buffer_struct;
/** How many times we are allowed to give the wrong password before being kicked. */
#define MAX_PASSWORD_FAILURES 5
/**
* Socket structure, represents a client-server connection.
*/
typedef struct socket_struct {
enum Sock_Status status;
int fd;
struct Map lastmap;
sint8 map_scroll_x, map_scroll_y;
size_t faces_sent_len; /**< This is the number of elements allocated in faces_sent[]. */
uint8 *faces_sent; /**< This is a bitmap on sent face status. */
uint8 anims_sent[MAXANIMNUM]; /**< What animations we sent. */
struct statsinfo stats;
SockList inbuf; /**< If we get an incomplete packet, this is used to hold the data. */
char *host; /**< Which host it is connected from (ip address). */
buffer_struct outputbuffer; /**< For undeliverable data. */
uint8 password_fails; /**< How many times the player has failed to give the right password. */
uint32 facecache:1; /**< If true, client is caching images. */
uint32 newmapcmd:1; /**< Send newmap command when entering new map SMACFIGGEN. */
uint32 darkness:1; /**< True if client wants darkness information. */
uint32 update_look:1; /**< If true, we need to send the look window. */
uint32 can_write:1; /**< Can we write to this socket? */
uint32 has_readable_type:1; /**< If true client accept additional text information
* used to arrange text in books, scrolls, or scripted dialogs. */
uint32 monitor_spells:1; /**< Client wishes to be informed when their spell list changes. */
uint32 tick:1; /**< Client wishes to get tick commands. */
uint32 is_bot:1; /**< Client shouldn't be reported to metaserver. */
uint32 want_pickup:1; /**< Client wants pickup information when logging in. */
uint32 sound; /**< Client sound mode. */
uint32 supported_readables; /**< Each bit is a readable supported by client. */
uint32 cs_version, sc_version; /**< Versions of the client. */
uint16 look_position; /**< Start of drawing of look window. */
uint8 mapx, mapy; /**< How large a map the client wants. */
uint8 faceset; /**< Set the client is using, default 0. */
/* Below are flags for extedend infos to pass to client
* with S->C mapextended command (note: this comment seems incorrect?) */
sint8 sounds_this_tick; /**< Number of sounds sent this tick. */
uint8 num_look_objects; /**< The maximum number of objects to show on the ground view;
this number includes the prev/next group fake items.
Can be set through "num_look_objects" setup option;
defaults to DEFAULT_NUM_LOOK_OBJECTS. */
} socket_struct;
#define CLIENT_SUPPORT_READABLES(__sockPtr, __type)\
(((__type) > 0) && \
((__sockPtr)->has_readable_type) && \
((__sockPtr)->supported_readables&(1<<(__type))))
/**
* Bitmask for the faces_sent[] array - what
* portion of the face have we sent?
*/
#define NS_FACESENT_FACE 0x1
#define NS_FACESENT_SMOOTH 0x2
#define FACE_TYPES 1
#define PNG_FACE_INDEX 0
/** Holds some system-related information. */
typedef struct Socket_Info {
struct timeval timeout; /**< Timeout for select. */
int max_filedescriptor; /**< max filedescriptor on the system. */
int nconns; /**< Number of connections. */
int allocated_sockets; /**< Number of allocated in init_sockets. */
} Socket_Info;
extern Socket_Info socket_info;
#define VERSION_CS 1023 /**< Version >= 1023 understand setup cmd */
#define VERSION_SC 1028
#define VERSION_INFO "Crossfire Server"
#endif /* NEWSERVER_H */