/* * Copyright (C) 1995-1997 Christopher D. Granz * * This header may not be removed. * * Refer to the file "License" included in this package for further * information and before using any of the following. */ #ifndef __SAPPHIRE_H__ #define __SAPPHIRE_H__ #include <stdio.h> #include <stdarg.h> #include <signal.h> #include <setjmp.h> #include <time.h> #include <limits.h> #include <errno.h> /* * Defines */ #define COPYRIGHT_NOTICE "\n\r" \ " Sapphire MUD Server v0.3\n\r" \ " Copyright (C) 1995-1997 Christopher D. Granz\n\r\n\r" \ #ifdef DEBUG #define TEMP_ALLOC( p, s ) \ if ( ( p = alloca( s ) ) == NULL ) \ { \ lprintf( "**** [SYSTEM]:\n " \ "Cannot allocate %ld bytes of stack memory.\n", \ (long) s ); \ abort( ); \ } \ else \ zero_out( p, s ); #else #define TEMP_ALLOC( p, s ) \ if ( ( p = alloca( s ) ) == NULL ) \ { \ lprintf( "**** [SYSTEM]:\n " \ "Cannot allocate %ld bytes of stack memory.\n", \ (long) s ); \ exit( 1 ); \ } \ else \ zero_out( p, s ); #endif #define VA_START va_start #define VA_END va_end #define VA_ARG va_arg #ifndef MAX #define MAX( a, b ) ( ( (a) > (b) ) ? (a) : (b) ) #endif #ifndef MIN #define MIN( a, b ) ( ( (a) < (b) ) ? (a) : (b) ) #endif #define UPPER( c ) ( (c) >= 'a' && (c) <= 'z' ? (c) - 'a' + 'A' : (c) ) #define LOWER( c ) ( (c) >= 'A' && (c) <= 'Z' ? (c) - 'A' + 'a' : (c) ) #define IS_SET( v, f ) ( (v) & (f) ) #define SET_FLAG( v, f ) ( (v) |= (f) ) #define REMOVE_FLAG( v, f ) ( (v) &= ~(f) ) #define KEY( match, field, value ) \ if ( str_compare( pBuf, (match) ) == TRUE ) \ { \ (field) = (value); \ bFoundMatch = TRUE; \ } #define SDKEY( match, field, value ) \ if ( str_compare( pBuf, (match) ) == TRUE ) \ { \ if ( (field) != NULL && (field) != EMPTY_STRING ) \ free_mem( (void **) &(field) ); \ \ (field) = str_dup( (value) ); \ bFoundMatch = TRUE; \ } #define SSKEY( match, field, value ) \ if ( str_compare( pBuf, (match) ) == TRUE ) \ { \ free_string( &(field) ); \ (field) = save_string( (value) ); \ bFoundMatch = TRUE; \ } #ifdef MAX_INPUT #undef MAX_INPUT #endif #ifdef MAX_STRING #undef MAX_STRING #endif #define MAX_INPUT 256 #define MAX_STRING 8192 #define MAX_INDEX_NUMBER (INT_MAX - 1) #define MESSAGE_DEST_CHAR 1 #define MESSAGE_DEST_VICTOM 2 #define MESSAGE_DEST_ROOM 3 #define SAPPHIRE_IDENT_CODE "SapphireClient" #define MODE_ALL /* Only used by process_cmd(). */ 0 #define MODE_GENERIC 1 #define MODE_RPG 2 #define EMPTY_STRING &cNullChar #define str_free( s ) \ if ( (s) != NULL && (s) != EMPTY_STRING ) \ free_mem( (void **) &(s) ); #define MEMORY_MODE_DISK 1 #define MEMORY_MODE_COMPACT 2 #define MEMORY_MODE_NORMAL 3 #define MEMORY_MODE_LARGE 4 #define MEMORY_FILE "memory.tmp" #define CLIENT_UNDEFINED 1 #define CLIENT_GENERIC 2 #define CLIENT_ANSI_COMPATIBLE 3 #define CLIENT_SAPPHIRE_COMPATIBLE 4 /* * Used in calls to write_ansi_code(). */ #define ANSI_CODEREF_CC_SET 1 #define ANSI_CODEREF_CC_UP 2 #define ANSI_CODEREF_CC_DOWN 3 #define ANSI_CODEREF_CC_FORWARD 4 #define ANSI_CODEREF_CC_BACK 5 #define ANSI_CODEREF_EF_CSCREEN 6 #define ANSI_CODEREF_EF_CLINE 7 #define ANSI_CODEREF_SGR_DSET 8 #define ANSI_CODEREF_SGR_SSET 9 #define ANSI_CODEREF_SGR_SRSET 10 #define ANSI_CODEREF_KR_REASSIGN 11 #define ANSI_CODEREF_OTHER 12 #define CCNP /* Use up to this from the creation code table. */ 26 #define MAX_OUTBUF_SIZE 32768 #define CON_SAPPHIRE_IDENT 1 #define CON_SYSTEM_SHELL 2 #define CON_NPC_EDITOR 3 #define CON_OBJECT_EDITOR 4 #define CON_ROOM_EDITOR 5 #define CON_RUNNING_CHILD 6 #define CON_PLAYING 7 #define CON_GET_LOCAL_ECHO_ON 8 #define CON_GET_CLIENT_TYPE 9 #define CON_MAIN_MENU 10 #define CON_GET_NAME 11 #define CON_GET_CREATION_CODE 12 #define CON_GET_PASSWORD 13 #define CON_CREATION_MENU 14 #define CON_GET_RACE 15 #define CON_ROLL_STATS 16 #define CON_GET_SEX 17 #define CON_GET_HAIR_COLOR 18 #define CON_GET_EYE_COLOR 19 #define CON_GET_HEIGHT 20 #define CON_GET_WEIGHT 21 #define CON_READ_MOTD 22 #define CON_RECONNECT 23 #define MUD_COMM_CON_IDENT 1 #define MUD_COMM_CON_READY 2 #define MUD_COMM_CMD_WIZ_CHANNEL 1 #define MUD_COMM_CMD_CHAT_CHANNEL 2 #define MUD_COMM_CMD_TELL_CHANNEL 3 #define MUD_COMM_CMD_MAIL 4 #define MUD_COMM_CMD_WHO 5 #define MUD_COMM_CMD_USERS 6 #define MUD_COMM_CMD_REPLY_MAIL 7 #define MUD_COMM_CMD_REPLY_TELL 8 #define MUD_COMM_CMD_REPLY_WHO 9 #define MUD_COMM_CMD_REPLY_USERS 10 #define MAX_BIN_TRANSFER_BLOCK 512 #define BIN_MODE_FILENAME 1 #define BIN_MODE_FILE 2 #define BIN_CMD_SENDING_FILENAME 1 #define BIN_CMD_SENDING_FILE 2 #define BIN_CMD_FILENAME_MODE 3 #define BIN_CMD_FILE_MODE 4 #define FILE_TYPE_TEXT 1 #define FILE_TYPE_GIF 2 #define FILE_TYPE_JPEG 3 #define FILE_TYPE_AUDIO 4 #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #define STRUCT_BOOL( v ) unsigned int v:1 #define DECLARE_GAME_CMD( func ) GAME_CMD_FUNC func #define DECLARE_OLC_CMD( func ) OLC_CMD_FUNC func #define DECLARE_SHELL_CMD( func ) SHELL_CMD_FUNC func #define DECLARE_NPC_LOAD( func ) NPC_LOAD_FUNC func #define DECLARE_OBJ_LOAD( func ) OBJ_LOAD_FUNC func #define DECLARE_ROOM_LOAD( func ) ROOM_LOAD_FUNC func #define DECLARE_ZONE_LOAD( func ) ZONE_LOAD_FUNC func #define DECLARE_SCRIPT_FUNC( func ) SCRIPT_FUNC func #define CHAR_PC 1 #define CHAR_NPC 2 #define IS_NPC( ch ) ( (ch)->iCharType == CHAR_NPC ) #define IS_GUEST( ch ) \ ( !IS_NPC( (ch) ) && (ch)->pPCData->bGuest == TRUE ) #define MAX_LEVEL 101 #define MAX_PLAYER_LEVEL ( MAX_LEVEL - 2 ) #define BUILDER_LEVEL ( MAX_LEVEL - 1 ) #define IMP_LEVEL MAX_LEVEL #define PULSE_HEART_BEAT /* Call updates every # seconds. */ 1 #define NUMBER_POSITION_DYING 1 #define NUMBER_POSITION_SLEEPING 2 #define NUMBER_POSITION_RESTING 3 #define NUMBER_POSITION_SITTING 4 #define NUMBER_POSITION_STANDING 5 #define NUMBER_SECTOR_UNDEFINED 1 #define NUMBER_SECTOR_VOID 2 #define NUMBER_SECTOR_AIR 3 #define NUMBER_SECTOR_WATER 4 #define NUMBER_SECTOR_WATER_NO_SWIM 5 #define NUMBER_SECTOR_UNDERGROUND 6 #define NUMBER_SECTOR_INSIDE 7 #define NUMBER_SECTOR_CITY 8 #define NUMBER_EXIT_STANDARD 1 #define NUMBER_EXIT_DOOR 2 #define NUMBER_SEX_MALE 1 #define NUMBER_SEX_FEMALE 2 #define NUMBER_SEX_RANDOM 3 #define NUMBER_HAIR_COLOR_BLACK 1 #define NUMBER_HAIR_COLOR_BROWN 2 #define NUMBER_HAIR_COLOR_BLONDE 3 #define NUMBER_HAIR_COLOR_RED 4 #define NUMBER_HAIR_COLOR_GREEN 5 #define NUMBER_HAIR_COLOR_BLUE 6 #define NUMBER_EYE_COLOR_BROWN 1 #define NUMBER_EYE_COLOR_GREEN 2 #define NUMBER_EYE_COLOR_BLUE 3 #define NUMBER_EYE_COLOR_RED 4 #define NUMBER_RACE_UNDEFINED 1 #define NUMBER_RACE_HUMAN 2 #define NUMBER_RACE_ELF 3 #define NUMBER_RACE_HALF_ELF 4 #define NUMBER_RACE_DWARF 5 #define NUMBER_RACE_ORC 6 #define NUMBER_RACE_HALF_ORC 7 #define NUMBER_RACE_GNOME 8 #define NUMBER_RACE_HORSE 9 #define NUMBER_NPC_TRIGGER_CREATED 1 #define NUMBER_NPC_TRIGGER_RANDOM 2 #define NUMBER_NPC_TRIGGER_MESSAGE 3 #define NUMBER_NPC_TRIGGER_EMOTE 4 #define NUMBER_NPC_TRIGGER_SAY 5 #define NUMBER_NPC_TRIGGER_TELL 6 #define NUMBER_NPC_TRIGGER_YELL 7 #define NUMBER_OBJ_TRIGGER_RANDOM 1 #define NUMBER_OBJ_TRIGGER_SAY 2 #define NUMBER_OBJ_TRIGGER_GET 3 #define NUMBER_ROOM_TRIGGER_RANDOM 1 #define NUMBER_ROOM_TRIGGER_MESSAGE 2 #define NUMBER_ROOM_TRIGGER_EMOTE 3 #define NUMBER_ROOM_TRIGGER_SAY 4 #define NUMBER_ROOM_TRIGGER_YELL 5 #define NUMBER_SCRIPT_CMP_EQUAL 1 #define NUMBER_SCRIPT_CMP_NOT_EQUAL 2 #define NUMBER_SCRIPT_CMP_GREATER 3 #define NUMBER_SCRIPT_CMP_LESS 4 #define NUMBER_SCRIPT_CMP_GREATER_EQUAL 5 #define NUMBER_SCRIPT_CMP_LESS_EQUAL 6 #define NUMBER_NPC_COMMAND_END 0 #define NUMBER_NPC_COMMAND_IF 1 #define NUMBER_NPC_COMMAND_GOTO 2 #define NUMBER_NPC_COMMAND_ENABLE 3 #define NUMBER_NPC_COMMAND_DISABLE 4 #define NUMBER_NPC_COMMAND_WAIT 5 #define NUMBER_NPC_COMMAND_SET 6 #define NUMBER_NPC_COMMAND_GAME_CMD 7 #define NUMBER_OBJ_COMMAND_END 0 #define NUMBER_OBJ_COMMAND_IF 1 #define NUMBER_OBJ_COMMAND_GOTO 2 #define NUMBER_OBJ_COMMAND_ENABLE 3 #define NUMBER_OBJ_COMMAND_DISABLE 4 #define NUMBER_OBJ_COMMAND_WAIT 5 #define NUMBER_OBJ_COMMAND_SET 6 #define NUMBER_ROOM_COMMAND_END 0 #define NUMBER_ROOM_COMMAND_IF 1 #define NUMBER_ROOM_COMMAND_GOTO 2 #define NUMBER_ROOM_COMMAND_ENABLE 3 #define NUMBER_ROOM_COMMAND_DISABLE 4 #define NUMBER_ROOM_COMMAND_WAIT 5 #define NUMBER_ROOM_COMMAND_SET 6 #define NUMBER_ROOM_COMMAND_CREATE_NPC 7 #define NUMBER_ROOM_COMMAND_CREATE_OBJ 8 #define NUMBER_ITEM_UNDEFINED 1 #define NUMBER_ITEM_GOLD 2 #define NUMBER_ITEM_CORPSE 3 #define NUMBER_ITEM_CONTAINER 4 #define NUMBER_ITEM_DRINK_CONTAINER 5 #define NUMBER_ITEM_PAPER 6 #define NUMBER_ITEM_PENCIL 7 #define NUMBER_ITEM_COMMUNICATOR 8 #define NUMBER_ITEM_LIGHT 9 #define NUMBER_ITEM_LIGHTER 10 #define NUMBER_ITEM_KEY 11 #define NUMBER_ITEM_STONE 12 #define NUMBER_ITEM_CHAIR 13 #define NUMBER_ITEM_BED 14 #define NUMBER_ITEM_DAGGER 15 #define NUMBER_ITEM_SWORD 16 #define NUMBER_ITEM_MACE 17 #define NUMBER_ITEM_AXE 18 #define NUMBER_ITEM_SPEAR 19 #define NUMBER_ITEM_FLAIL 20 #define NUMBER_ITEM_BOW 21 #define NUMBER_ITEM_ARMOR 22 #define NUMBER_ITEM_ARM_GUARDS 23 #define NUMBER_ITEM_BOOTS 24 #define NUMBER_ITEM_LEGGINGS 25 #define NUMBER_ITEM_HELMET 26 #define NUMBER_ITEM_CLOAK 27 #define NUMBER_ITEM_SHIELD 28 #define NUMBER_ITEM_RING 29 #define NUMBER_WEAR_LHAND 1 #define NUMBER_WEAR_RHAND 2 #define NUMBER_WEAR_ARMS 3 #define NUMBER_WEAR_LEGS 4 #define NUMBER_WEAR_BODY 5 #define NUMBER_WEAR_ABOUT_BODY 6 #define NUMBER_WEAR_HEAD 7 #define NUMBER_WEAR_FEET 8 #define NUMBER_WEAR_FINGER 9 #define NUMBER_SIZE_TINY 1 #define NUMBER_SIZE_SMALL 2 #define NUMBER_SIZE_MEDIUM 3 #define NUMBER_SIZE_LARGE 4 #define NUMBER_SIZE_HUGE 5 #define NUMBER_MATERIAL_UNDEFINED 1 #define NUMBER_MATERIAL_ICE 2 #define NUMBER_MATERIAL_FIRE 3 #define NUMBER_MATERIAL_CLOTH 4 #define NUMBER_MATERIAL_LEATHER 5 #define NUMBER_MATERIAL_BRONZE 6 #define NUMBER_MATERIAL_IRON 7 #define NUMBER_MATERIAL_STEEL 8 #define NUMBER_MATERIAL_GLASS 9 #define NUMBER_MATERIAL_SILVER 10 #define NUMBER_MATERIAL_GOLD 11 #define NUMBER_MATERIAL_DIAMOND 12 #define NUMBER_MATERIAL_EMERALD 13 #define NUMBER_VAR_NUMBER 1 #define NUMBER_VAR_STRING 2 #define NUMBER_VAR_POINTER_CHAR 3 #define NUMBER_VAR_POINTER_OBJ 4 #define NUMBER_VAR_POINTER_ROOM 5 /* Numbers for objects that are created internally. */ #define OBJECT_NUMBER_GOLD 1 #define OBJECT_NUMBER_CORPSE 2 #define FLAG_A 1 #define FLAG_B 2 #define FLAG_C 4 #define FLAG_D 8 #define FLAG_E 16 #define FLAG_F 32 #define FLAG_G 64 #define FLAG_H 128 #define FLAG_I 256 #define FLAG_J 512 #define FLAG_K 1024 #define FLAG_L 2048 #define FLAG_M 4096 #define FLAG_N 8192 #define FLAG_O 16384 #define FLAG_P 32768 #define FLAG_Q 65536 #define FLAG_R 131072 #define FLAG_S 262144 #define FLAG_T 524288 #define FLAG_U 1048576 #define FLAG_V 2097152 #define FLAG_W 4194304 #define FLAG_X 8388608 #define FLAG_Y 16777216 #define FLAG_Z 33554432 #define FLAG_CHANNEL_NO_LOCAL_WIZCOMM (FLAG_A) #define FLAG_CHANNEL_NO_WIZCOMM (FLAG_B) #define FLAG_CHANNEL_NO_CHAT (FLAG_C) #define FLAG_CHANNEL_NO_LOCAL_TELL (FLAG_D) #define FLAG_CHANNEL_NO_REMOTE_TELL (FLAG_E) #define FLAG_DOOR_CLOSED (FLAG_A) #define FLAG_DOOR_LOCKED (FLAG_B) #define FLAG_DOOR_HIDDEN (FLAG_C) #define FLAG_OBJECT_SPECIAL (FLAG_A) #define FLAG_OBJECT_UNTAKEABLE (FLAG_B) #define FLAG_OBJECT_CLOSABLE (FLAG_C) #define FLAG_OBJECT_CLOSED (FLAG_D) #define FLAG_OBJECT_LOCKED (FLAG_E) #define FLAG_OBJECT_LIT (FLAG_F) #define FLAG_OBJECT_MAGIC (FLAG_G) #define FLAG_OBJECT_INVIS (FLAG_H) #define FLAG_NPC_SPECIAL (FLAG_A) #define FLAG_NPC_MOUNTABLE (FLAG_B) #define FLAG_NPC_STAY_INSIDE (FLAG_C) #define FLAG_NPC_STAY_OUTSIDE (FLAG_D) #define FLAG_NPC_NO_KILL (FLAG_E) #define FLAG_NPC_AGGRESSIVE (FLAG_F) #define FLAG_NPC_CRAZED (FLAG_G) #define FLAG_NPC_TEACHER (FLAG_H) #define FLAG_ACT_INVIS (FLAG_A) #define FLAG_ACT_SEE_INVIS (FLAG_B) #define FLAG_ACT_DETECT_HIDDEN (FLAG_C) #define FLAG_ACT_DETECT_MAGIC (FLAG_D) #define FLAG_ACT_NIGHTVISION (FLAG_E) #define FLAG_ROOM_DARK (FLAG_A) #define FLAG_ROOM_INVIS (FLAG_B) #define FLAG_ROOM_NO_NPCS (FLAG_C) #define FLAG_ROOM_PRIVATE (FLAG_D) #define FLAG_ROOM_IMMORTAL (FLAG_E) #define FLAG_ROOM_UNSAFE (FLAG_F) #define FLAG_ROOM_NO_WEATHER (FLAG_G) /* * Type Defines */ typedef char * string; typedef unsigned char byte; typedef unsigned char bool; typedef signed char /* intt = integer, tiny (1 byte.) */ intt; typedef unsigned char uintt; typedef signed short int /* ints = integer, short (2 bytes.) */ ints; typedef unsigned short int uints; typedef signed long int /* intl = integer, long (3 bytes.) */ intl; typedef unsigned long int uintl; typedef unsigned long int flags; typedef int sapsocket; typedef struct generic_data GENERIC_DATA; typedef struct xword_data XWORD_DATA; typedef struct term_data TERM_DATA; typedef struct mud_comm_data MUD_COMM_DATA; typedef struct extra_desc_data EXTRA_DESC_DATA; typedef struct stat_data STAT_DATA; typedef struct exit_data EXIT_DATA; typedef struct program_data PROGRAM_DATA; typedef struct script_data SCRIPT_DATA; typedef struct trigger_data TRIGGER_DATA; typedef struct trigger_arg_data TRIGGER_ARG_DATA; typedef struct running_script_data RUNNING_SCRIPT_DATA; typedef struct npc_reset_data NPC_RESET_DATA; typedef struct obj_reset_data OBJ_RESET_DATA; typedef struct help_data HELP_DATA; typedef struct npc_index_data NPC_INDEX_DATA; typedef struct obj_index_data OBJ_INDEX_DATA; typedef struct room_index_data ROOM_INDEX_DATA; typedef struct zone_data ZONE_DATA; typedef struct quest_data QUEST_DATA; typedef struct quest_var_data QUEST_VAR_DATA; typedef struct char_data CHAR_DATA; typedef struct pc_data PC_DATA; typedef struct known_person_data KNOWN_PERSON_DATA; typedef struct known_exit_data KNOWN_EXIT_DATA; typedef struct npc_data NPC_DATA; typedef struct obj_data OBJ_DATA; typedef struct childp_data CHILDP_DATA; typedef void GAME_CMD_FUNC ( CHAR_DATA *, char * ); typedef void OLC_CMD_FUNC ( TERM_DATA *, char * ); typedef void SHELL_CMD_FUNC ( TERM_DATA *, char * ); typedef bool NPC_LOAD_FUNC ( NPC_INDEX_DATA *, FILE * ); typedef bool OBJ_LOAD_FUNC ( OBJ_INDEX_DATA *, FILE * ); typedef bool ROOM_LOAD_FUNC ( ROOM_INDEX_DATA *, FILE * ); typedef bool ZONE_LOAD_FUNC ( ZONE_DATA *, FILE * ); typedef void SCRIPT_FUNC ( char * ); /* * Structures */ struct generic_data { GENERIC_DATA * pNext; void * pData; }; struct xword_data { XWORD_DATA * /* Next in linked list. */ pNext; char * /* "Bad" word. */ pWord; }; /* * Data for one connected terminal. */ struct term_data { TERM_DATA * /* Next in linked list. */ pNext; CHAR_DATA * /* Associated character. */ pChar; CHAR_DATA * /* NPC Being controlled. */ pControlled; char * /* Remote hostname. */ pHostname; sapsocket /* Telnet socket descriptor. */ sTelnetSocket; sapsocket /* Binary socket descriptor. */ sBinarySocket; intt /* Remote terminal type. */ iTermType; intt /* Connected state. */ iConState; intt /* Old connected state. */ iConStateOld; char * /* Input buffer. */ pInBuffer; char * /* Pending command; if any. */ pInCommand; char * /* Waiting output. */ pOutBuffer; char * /* Last output. */ pOutLast; intl /* Size of the output buffer. */ iOutBufferSize; intl /* Size of the input buffer. */ iInBufferSize; intt /* Transfer mode. */ iBinaryMode; long /* Remaining binary size. */ lBinRemainSize; byte * /* Offset in binary data. */ pBinTransfering; byte * /* Binary data being transfered. */ pBinData; STRUCT_BOOL /* Was a command just recived? */ ( bFoundCmd ); STRUCT_BOOL /* Does this terminal have it? */ ( bLocalEcho ); intt /* Lines before paging. */ iPageLines; char * /* Used for paging strings. */ pPageString; char * /* Used for paging strings. */ pPagePos; intl /* Size of string pager buffer. */ iPageMemSize; char * /* Used when in the text editor. */ pEditString; char ** /* Used when in the text editor. */ ppEditString; intl /* Used when in the text editor. */ iEditLine; STRUCT_BOOL /* Used when in the text editor. */ ( bEditAppend ); CHILDP_DATA * /* Data for a running child. */ pChildP; flags /* Communication flags. */ fCommFlags; /* * OLC editing data. */ union { NPC_INDEX_DATA * pEditNPC; OBJ_INDEX_DATA * pEditObject; ROOM_INDEX_DATA * pEditRoom; } uEdit; char * /* Used by the system shell. */ pCurrentDir; }; struct mud_comm_data { MUD_COMM_DATA * pNext; sapsocket sMUDCommSocket; char * /* Connected MUD's hostname */ pHostname; char * /* Connected MUD's name. */ pMUDName; int /* MUD-Comm connected state. */ iConState; char * /* Input buffer. */ pInBuffer; char * /* Waiting output. */ pOutBuffer; intl /* Max input buffer size. */ iMaxInBufSize; intl /* Max output buffer size. */ iMaxOutBufSize; intl /* Size of the input buffer. */ iInBufSize; intl /* Size of the output buffer. */ iOutBufSize; GENERIC_DATA * /* Players waiting for data. */ pWaitList; }; struct extra_desc_data { EXTRA_DESC_DATA * /* Next in linked list. */ pNext; string * /* List of keywords. */ pKeywordList; string /* Actual text. */ sText; }; struct stat_data { intt /* Strength. */ iStatStr; intt /* Intellgence. */ iStatInt; intt /* Wisdom. */ iStatWis; intt /* Dexterity. */ iStatDex; intt /* Constitution. */ iStatCon; intt /* Charisma. */ iStatCha; intt /* Luck. */ iStatLuc; ints /* Hit points. */ iStatHP; ints /* Magic points. */ iStatMP; ints /* Movement points. */ iStatMV; }; struct exit_data { union { intl /* Room number (to.) */ iNumber; ROOM_INDEX_DATA * /* Actual room (to.) */ pRoom; } uRoom; union { intl /* Object number (key.) */ iNumber; OBJ_INDEX_DATA * /* Actual object (key.) */ pObjKey; } uKey; intt /* Exit type. */ iExitType; intl /* Reset time. */ iResetTime; intl /* Reset timer. */ iResetTimer; string * /* Door names. */ pDoorNames; flags /* Original door flags. */ fOrigFlags; flags /* Current door flags. */ fCurrFlags; string /* Shown when exit is found. */ sFound; ints /* Level required to use. */ iLevel; STRUCT_BOOL /* Is this a shared exit? (boot) */ ( bShared ); }; struct program_data { GENERIC_DATA * /* List of quest data. */ pQuestDataList; QUEST_VAR_DATA * /* Quest variables. */ pQuestVars; SCRIPT_DATA * /* Scripts in this program. */ pScripts; }; struct script_data { SCRIPT_DATA * /* Next in linked list. */ pNext; TRIGGER_DATA * /* Trigger list for this script. */ pTriggers; byte * /* Actual script. */ pScript; intl /* Script code size. */ iCodeSize; char * /* Script name. */ pName; STRUCT_BOOL /* Is this script disabled? */ ( bDisabled ); STRUCT_BOOL /* Is this script running? */ ( bRunning ); }; struct trigger_data { TRIGGER_DATA * pNext; TRIGGER_ARG_DATA * pArgs; intt /* Trigger for this script. */ iTrigger; }; struct trigger_arg_data { TRIGGER_ARG_DATA * pNext; intt iType; char * pArg; }; struct running_script_data { RUNNING_SCRIPT_DATA * /* Next in linked list. */ pNext; PROGRAM_DATA * /* Program data. */ pProgram; SCRIPT_DATA * /* Script data. */ pScript; byte * /* Position in the script. */ pScriptPos; intl /* Wait time. */ iWaitTime; intl /* Wait timer. */ iWaitTimer; intt /* NPC, object, or room? */ iThisType; void * /* NPC/object/room. */ pThis; CHAR_DATA * /* Character who triggered this. */ pActor; CHAR_DATA * /* An uninvolved third person. */ pThird; }; struct npc_reset_data { NPC_RESET_DATA * pNext; OBJ_RESET_DATA * pInvenResets; OBJ_RESET_DATA * pEqResets; STRUCT_BOOL /* Does the NPC still exist? */ ( bAlive ); union { intl /* Number of NPC to load. (boot) */ iNumber; NPC_INDEX_DATA * pNPCIndex; } u1; ints /* Wait before reseting. */ iResetTime; ints /* When = iResetTime, reset. */ iResetTimer; }; struct obj_reset_data { OBJ_RESET_DATA * pNext; OBJ_RESET_DATA * pContentResets; STRUCT_BOOL /* Does the object still exist? */ ( bAlive ); union { intl iNumber; OBJ_INDEX_DATA * pObjIndex; } u1; ints /* Wait before reseting. */ iResetTime; ints /* When = iResetTime, reset. */ iResetTimer; }; struct help_data { HELP_DATA * /* Next in linked list. */ pNext; string * /* List of keywords. */ pKeywords; string /* Text to be printed. */ sText; ints /* Level required to read. */ iLevel; }; struct npc_index_data { NPC_INDEX_DATA * /* Next in linked list. */ pNext; ZONE_DATA * /* Zone this NPC is part of. */ pZone; PROGRAM_DATA * /* Associated program; if any. */ pProgram; struct { intt iStatStr[3]; intt iStatInt[3]; intt iStatWis[3]; intt iStatDex[3]; intt iStatCon[3]; intt iStatCha[3]; intt iStatLuc[3]; ints iStatHP[3]; ints iStatMP[3]; ints iStatMV[3]; } VarStats; intl /* Unique NPC number. */ iNumber; intl /* Inherit from... (boot) */ iInherit; string * /* Keywords used by players. */ pNameList; string /* Short description. */ sShortDesc; string /* Descriptions. */ sDescs[5]; string /* Seen when looked at. */ sLongDesc; flags /* NPC flags. */ fNPCFlags; flags /* Part flags. */ fPartFlags; flags /* Action flags. */ fActFlags; ints /* Level. */ iLevel; ints /* Experience for killing. */ iExp[3]; ints /* Alignment. */ iAlignment; intt /* Race. */ iRace; intt /* Sex. */ iSex; intt /* Hair color. (not important) */ iHairColor; intt /* Eye color. (not important) */ iEyeColor; ints /* Height. (not important) */ iHeight; ints /* Weight. */ iWeight; ints /* Max carry weight. */ iMaxCarry; intt /* Starting position. */ iPosition; intl /* Starting gold. */ iGold; ints /* Hit roll. */ iHitRoll; ints /* Damage dice. */ iDamage[3]; intt /* Damage type. */ iDamType; ints /* Armor class. */ iAC[4]; intt /* Chance of wandering. */ iWander; STRUCT_BOOL /* NPC created after boot? */ ( bNew ); STRUCT_BOOL /* NPC need to be saved? */ ( bEdited ); }; struct obj_index_data { OBJ_INDEX_DATA * /* Next in linked list. */ pNext; ZONE_DATA * /* Zone this object is part of. */ pZone; PROGRAM_DATA * /* Associated program; if any. */ pProgram; intl /* Unique object number. */ iNumber; intl /* Inherit from... (boot) */ iInherit; string * /* Keywords used by players. */ pNameList; string /* Short description. */ sShortDesc; string /* Description. */ sDesc; string /* Seen when looked at. */ sLongDesc; flags /* Object flags. */ fObjFlags; intt /* Object/Item type. */ iItemType; ints /* Level. */ iLevel; ints /* Weight. */ iWeight; intt /* Size. */ iSize; ints /* Price; if bought. */ iCost; intt /* Starting condition. */ iCondition; intt /* Made from... */ iMaterial; intl /* Item type dependant values. */ iValues[6]; string /* Item type depentant value. */ sValue; STRUCT_BOOL /* Object created after boot? */ ( bNew ); STRUCT_BOOL /* Object need to be saved? */ ( bEdited ); }; struct room_index_data { ROOM_INDEX_DATA * /* Next in linked list. */ pNext; ZONE_DATA * /* Zone this room is part of. */ pZone; EXTRA_DESC_DATA * /* Extra description list. */ pExtraDesc; NPC_RESET_DATA * /* List of NPC resets. */ pNPCResets; OBJ_RESET_DATA * /* List of object resets. */ pObjResets; PROGRAM_DATA * /* Associated program; if any. */ pProgram; CHAR_DATA * /* People in this room. */ pPeople; OBJ_DATA * /* Objects in this room. */ pContents; EXIT_DATA /* Exits for this room. */ eExits[10]; intl /* Unique room number. */ iNumber; intl /* Inherit from... (boot) */ iInherit; string /* Scene filename for this room. */ sImageFilename; string /* Direction descriptions. */ sDirDescs[10]; string /* Title. */ sTitle; string /* Description. */ sDesc; flags /* Room flags. */ fRoomFlags; intt /* Sector type. */ iSectorType; ints /* Temperature in this room. */ iTemperature; STRUCT_BOOL /* Room created after boot? */ ( bNew ); STRUCT_BOOL /* Room need to be saved? */ ( bEdited ); }; struct zone_data { ZONE_DATA * /* Next in linked list. */ pNext; string /* Zone name. */ sName; string /* Author of this zone. */ sAuthor; intl /* Use NPCs between these. */ iNPCNumbers[2]; intl /* Use objects between these. */ iObjNumbers[2]; intl /* Use rooms between these. */ iRoomNumbers[2]; STRUCT_BOOL /* Override normal resets? */ ( bROverride ); ints /* Reset time, with players. */ iNormalReset; ints /* Reset time, without players. */ iNoPlrReset; ints /* Reset timer. */ iResetTimer; ints /* Player count in this zone. */ iPlayers; STRUCT_BOOL /* Zone created after boot? */ ( bNew ); STRUCT_BOOL /* Zone need to be saved? */ ( bEdited ); }; struct quest_data { QUEST_DATA * /* Next in linked list. */ pNext; QUEST_VAR_DATA * /* Variables. */ pVars; string /* Quest data name. */ sName; STRUCT_BOOL /* Created after boot? */ ( bNew ); STRUCT_BOOL /* Need to be saved? */ ( bEdited ); }; struct quest_var_data { QUEST_VAR_DATA * /* Next in linked list. */ pNext; string /* Quest data name. */ sName; intt /* Quest variable type. */ iType; /* * Actual data. */ union { intl i; string s; void * p; } uData; }; struct char_data { CHAR_DATA * /* Next in linked list. */ pNext; TERM_DATA * /* Terminal connected. */ pTerm; STAT_DATA * /* Character stats. */ pStats; ROOM_INDEX_DATA * /* In room... */ pInRoom; OBJ_DATA * /* Character's inventory. */ pInven; CHAR_DATA * /* Next in room linked list. */ pNextInRoom; CHAR_DATA * /* Following... */ pLeader; CHAR_DATA * /* Next in group; if any. */ pParty; CHAR_DATA * /* Currently fighting... */ pFighting; PC_DATA * /* Data only PCs have. */ pPCData; NPC_DATA * /* Data only NPCs have. */ pNPCData; string /* Seen when looked at. */ sLongDesc; flags /* Part flags. */ fPartFlags; flags /* Action flags. */ fActFlags; intt /* PC of NPC? */ iCharType; intt /* Current position. */ iPosition; ints /* Level. */ iLevel; ints /* Experience. */ iExp; ints /* Magic level. */ iMagicLevel; ints /* Alignment. */ iAlignment; intt /* Race. */ iRace; intt /* Sex. */ iSex; intt /* Hair color. (not important) */ iHairColor; intt /* Eye color. (not important) */ iEyeColor; ints /* Height. */ iHeight; ints /* Weight. */ iWeight; ints /* Max carry weight. */ iMaxCarry; ints /* Current number of HP. */ iHP; ints /* Current number of MP. */ iMP; ints /* Current movement remaining. */ iMV; intl /* Gold. */ iGold; ints /* Hit roll. */ iHitRoll; ints /* Armor class. */ iAC[4]; ints /* Wait timer. */ iWaitTimer; }; struct pc_data { time_t /* Last Login time. */ tLastLogin; string /* Password. */ sPassword; string /* Name. */ sName; string /* Game prompt string. */ sPrompt; STRUCT_BOOL /* Is this player a guest? */ ( bGuest ); string /* Guild. */ sGuild; flags /* Channel flags. */ fChanFlags; KNOWN_PERSON_DATA * /* Known people. */ pKnownPeople; KNOWN_EXIT_DATA * /* Known hidden exits. */ pKnownExits; }; struct known_person_data { KNOWN_PERSON_DATA * pNext; string sName; time_t tIntroduced; }; struct known_exit_data { KNOWN_EXIT_DATA * pNext; ROOM_INDEX_DATA * pRoom; intt iDir; time_t tDiscovered; }; struct npc_data { NPC_INDEX_DATA * /* NPC index data. */ pNPCIndex; NPC_RESET_DATA * /* Reset NPC was loaded from. */ pReset; PROGRAM_DATA * /* Associated program; if any. */ pProgram; string * /* Names (keywords.) */ pNameList; string /* Short description. */ sShortDesc; string /* Descriptions. */ sDescs[5]; flags /* NPC flags. */ fNPCFlags; ints /* Damage dice. */ iDamage[3]; intt /* Damage type. */ iDamType; intt /* Chance of wandering. */ iWander; }; struct obj_data { OBJ_DATA * pNext; OBJ_DATA * pNextContent; OBJ_INDEX_DATA * pObjIndex; OBJ_RESET_DATA * pReset; PROGRAM_DATA * /* Associated program; if any. */ pProgram; ROOM_INDEX_DATA * pInRoom; CHAR_DATA * pCarriedBy; OBJ_DATA * pInObj; OBJ_DATA * pContains; string * pNameList; string sShortDesc; string sDesc; string sLongDesc; flags fObjFlags; intt iItemType; intt iWearLoc; intt iCondition; ints iLevel; ints iCost; ints iWeight; intt iSize; intt iMaterial; intl /* Item type dependant values. */ iValues[6]; string /* Item type depentant value. */ sValue; }; struct childp_data { CHILDP_DATA * pNext; pid_t pPid; intl iStdin[2]; intl iStdout[2]; intl iStderr[2]; char * pCmdLine; }; /* * General purpose structure. Mostly used to save values at boot time. */ struct number { struct number * pNext; struct number * pAList[2]; intl iNumber; }; struct cmd_type { char * /* Type this to invoke. */ pName; GAME_CMD_FUNC * /* Command function. */ pCmdFunc; ints /* Level required to use. */ iLevel; intt /* Position required to use. */ iPosition; intt /* Only works in game mode... */ iMode; STRUCT_BOOL /* Are prefixes allowed? */ ( bNoPrefix ); }; struct olc_cmd_type { char * /* Type this to invoke. */ pName; OLC_CMD_FUNC * /* Command function. */ pCmdFunc; }; struct shell_cmd_type { char * /* Type this to invoke. */ pName; SHELL_CMD_FUNC * /* Command function. */ pCmdFunc; }; struct str_number_type { char * /* Name. */ pName; intl /* Number. */ iNumber; }; struct number_number_type { intl /* First Number. */ iNumber1; intl /* Second Number. */ iNumber2; }; struct race_type { char * pConj; char * pName; intt iNumber; STRUCT_BOOL ( bPCRace ); flags fActFlags; ints iMagicLevel; intt iHairColors[16]; intt iEyeColors[16]; ints iUpperLowerHeights[2]; ints iUpperLowerWeights[2]; intt iStatModifiers[7]; }; struct npc_load_type { char * pField; NPC_LOAD_FUNC * pFunc; }; struct obj_load_type { char * pField; OBJ_LOAD_FUNC * pFunc; }; struct room_load_type { char * pField; ROOM_LOAD_FUNC * pFunc; }; struct zone_load_type { char * pField; ZONE_LOAD_FUNC * pFunc; }; struct script_func_type { char * pName; SCRIPT_FUNC * pFunc; }; #ifdef SERVER /* * Prototypes */ #define TD TERM_DATA #define MUDCD MUD_COMM_DATA #define SD STAT_DATA #define HD HELP_DATA #define PD PROGRAM_DATA #define SCD SCRIPT_DATA #define RSD RUNNING_SCRIPT_DATA #define NPCID NPC_INDEX_DATA #define OID OBJ_INDEX_DATA #define RID ROOM_INDEX_DATA #define NPCRD NPC_RESET_DATA #define ORD OBJ_RESET_DATA #define CD CHAR_DATA #define NPCD NPC_DATA #define PCD PC_DATA #define OD OBJ_DATA char * strncpy ( char *, const char *, size_t ); /* * main.c */ int main ( int, char *[], char *[] ); void process_mucs_cmd ( void ); void load_config ( char * ); void load_mudcomm_file ( char * ); void load_database ( void ); void load_em_objects ( char * ); void load_helps ( char * ); void load_npcs ( char * ); void load_objects ( char * ); void load_rooms ( char * ); void load_zones ( char * ); void load_quest_data ( char * ); /* * signal.c */ void init_signal_handlers ( void ); void sigint_handler ( int, int, struct sigcontext * ); void sigint_handler_2 ( int, int, struct sigcontext * ); void sigill_handler ( int, int, struct sigcontext * ); void sigsegv_handler ( int, int, struct sigcontext * ); void sigbus_handler ( int, int, struct sigcontext * ); void sigsys_handler ( int, int, struct sigcontext * ); void sigterm_handler ( int, int, struct sigcontext * ); void sigprof_handler ( int, int, struct sigcontext * ); bool valid_address ( void * ); /* * comm.c */ void init_telnet_socket ( int ); void init_binary_socket ( int ); void accept_connection ( void ); void accept_binary_connection ( void ); void close_connection ( TD ** ); bool read_string ( TD * ); bool read_binary_data ( TD * ); void read_string_buffer ( TD * ); bool write_string ( TD *, char * ); bool write_binary_data ( TD * ); void clear_binary_transfer ( TD * ); void write_string_buffer ( TD *, char * ); void write_file ( TD *, intt, char * ); void rewrite_string_buffer ( TD * ); void flush_buffer ( TD * ); #define tflush flush_buffer void term_send_string ( TD *, char *, ... ); void send_string ( CD *, char *, ... ); void send_game_message ( char *, long, ... ); void expand_game_symbols ( char *, char *, CD *, va_list ); bool process_output ( TD * ); void process_login ( TD *, char * ); char * make_ansi_code ( int, char *, char *, TD * ); /* * mud_comm.c */ void init_mudcomm_socket ( int ); void accept_mudcomm_connection ( void ); int make_mudcomm_connection ( char *, char *, int ); void close_mudcomm_connection ( MUDCD ** ); bool read_mudcomm_data ( MUDCD * ); int read_mudcomm_data_buffer ( MUDCD *, byte *, long ); bool write_mudcomm_data ( MUDCD * ); void write_mudcomm_data_buffer ( MUDCD *, byte *, long ); bool process_mudcomm_output ( MUDCD * ); void mudcomm_cmd_wiz_channel ( MUDCD * ); void mudcomm_cmd_chat_channel ( MUDCD * ); void mudcomm_cmd_tell_channel ( MUDCD * ); void mudcomm_cmd_mail ( MUDCD * ); void mudcomm_cmd_who ( MUDCD * ); void mudcomm_cmd_users ( MUDCD * ); void mudcomm_cmd_reply_mail ( MUDCD * ); void mudcomm_cmd_reply_tell ( MUDCD * ); void mudcomm_cmd_reply_who ( MUDCD * ); void mudcomm_cmd_reply_users ( MUDCD * ); /* * memory.c */ void mem_init ( void ); void mem_clean_up ( void ); void * alloc_mem ( register size_t ); void * realloc_mem ( register void *, register size_t ); void free_mem ( register void ** ); void zero_out ( register void *, register size_t ); char * str_dup ( register char * ); string save_string ( register char * ); void free_string ( register string * ); void defrag_string_space ( void ); void free_buffers ( void ); char * new_buffer ( void ); CD * new_pc ( void ); CD * new_npc ( NPCID *, CD * ); OD * new_object ( OID *, CD * ); void free_char ( CD ** ); void free_obj ( OD ** ); /* * fileio.c */ FILE * open_file ( char *, char *, bool ); void close_file ( FILE * ); char fget_letter ( FILE * ); char * fget_word ( FILE * ); char * sfget_word ( FILE * ); char * fget_word_2 ( FILE * ); void fput_string ( FILE *, char *, ... ); char * fget_string ( FILE * ); char * sfget_string ( FILE * ); char * fget_string_2 ( FILE *, char, char ); char * fget_string_3 ( FILE *, char, char ); long fget_number ( FILE * ); long fget_number_2 ( FILE * ); /* * log.c */ void log_init ( void ); void lprintf ( char *, ... ); void sap_warning ( char *, ... ); #define wcwarning sap_warning void sap_error ( char *, ... ); #define wcerror sap_error void sap_fatal ( char *, ... ); #define wcfatal sap_fatal #ifdef DEBUG void sap_debug ( char *, ... ); #define wcdebug sap_debug #endif /* * text.c */ void process_text_editor_string ( TD *, char * ); void process_page_string ( TD *, char * ); void setup_text_editor ( TD *, char **, bool ); void setup_string_pager ( TD * ); void page_string ( TD *, char * ); void finish_string_pager ( TD * ); /* * random.c */ void init_random ( void ); int random_number ( void ); int random_range ( int, int ); int random_percent ( void ); int random_bits ( int ); int random_door ( void ); int roll_dice ( int, int ); long round ( register long, register int ); /* * parse.c */ char ** asort ( char **, int ); char * sone_arg ( char *, char * ); char * one_arg ( char *, char * ); char * one_arg_2 ( char *, char * ); char * sedit_str ( char *, char *, char, char * ); char * edit_str ( char *, char *, char, char * ); char * edit_str_2 ( char *, char *, char, char * ); char * sedit_str_plus ( char *, char *, char, char ); char * edit_str_plus ( char *, char *, char, char ); char * edit_str_plus_2 ( char *, char *, char, char ); char * smake_string ( char *, char * ); char * make_string ( char *, char * ); char * make_string_2 ( char *, char * ); char * flip_string ( char * ); char next_char ( char * ); char * remove_char ( char * ); char * remove_char_2 ( char * ); char * remove_spaces ( char * ); char * remove_nls ( char * ); char * capit ( char * ); char * uncapit ( char * ); char * cap_first ( char * ); /* * compare.c */ bool is_number ( char * ); bool str_compare ( char *, char * ); bool multi_compare ( char *, char * ); bool multi_compare_2 ( char *, string * ); bool str_prefix ( char *, char * ); bool str_infix ( char *, char * ); bool str_suffix ( char *, char * ); /* * load.c */ DECLARE_NPC_LOAD ( npc_load_inherit ); DECLARE_NPC_LOAD ( npc_load_imagefilename ); DECLARE_NPC_LOAD ( npc_load_names ); DECLARE_NPC_LOAD ( npc_load_shortdesc ); DECLARE_NPC_LOAD ( npc_load_desc ); DECLARE_NPC_LOAD ( npc_load_desc1 ); DECLARE_NPC_LOAD ( npc_load_desc2 ); DECLARE_NPC_LOAD ( npc_load_desc3 ); DECLARE_NPC_LOAD ( npc_load_desc4 ); DECLARE_NPC_LOAD ( npc_load_desc5 ); DECLARE_NPC_LOAD ( npc_load_longdesc ); DECLARE_NPC_LOAD ( npc_load_npcflags ); DECLARE_NPC_LOAD ( npc_load_partflags ); DECLARE_NPC_LOAD ( npc_load_actflags ); DECLARE_NPC_LOAD ( npc_load_race ); DECLARE_NPC_LOAD ( npc_load_sex ); DECLARE_NPC_LOAD ( npc_load_haircolor ); DECLARE_NPC_LOAD ( npc_load_eyecolor ); DECLARE_NPC_LOAD ( npc_load_height ); DECLARE_NPC_LOAD ( npc_load_weight ); DECLARE_NPC_LOAD ( npc_load_maxcarry ); DECLARE_NPC_LOAD ( npc_load_level ); DECLARE_NPC_LOAD ( npc_load_experience ); DECLARE_NPC_LOAD ( npc_load_alignment ); DECLARE_NPC_LOAD ( npc_load_position ); DECLARE_NPC_LOAD ( npc_load_gold ); DECLARE_NPC_LOAD ( npc_load_wander ); DECLARE_NPC_LOAD ( npc_load_stats ); DECLARE_NPC_LOAD ( npc_load_program ); DECLARE_OBJ_LOAD ( obj_load_inherit ); DECLARE_OBJ_LOAD ( obj_load_imagefilename ); DECLARE_OBJ_LOAD ( obj_load_names ); DECLARE_OBJ_LOAD ( obj_load_shortdesc ); DECLARE_OBJ_LOAD ( obj_load_desc ); DECLARE_OBJ_LOAD ( obj_load_longdesc ); DECLARE_OBJ_LOAD ( obj_load_itemtype ); DECLARE_OBJ_LOAD ( obj_load_objectflags ); DECLARE_OBJ_LOAD ( obj_load_level ); DECLARE_OBJ_LOAD ( obj_load_weight ); DECLARE_OBJ_LOAD ( obj_load_size ); DECLARE_OBJ_LOAD ( obj_load_cost ); DECLARE_OBJ_LOAD ( obj_load_condition ); DECLARE_OBJ_LOAD ( obj_load_material ); DECLARE_OBJ_LOAD ( obj_load_values ); DECLARE_OBJ_LOAD ( obj_load_stringvalue ); DECLARE_OBJ_LOAD ( obj_load_program ); DECLARE_ROOM_LOAD ( room_load_imagefilename ); DECLARE_ROOM_LOAD ( room_load_title ); DECLARE_ROOM_LOAD ( room_load_desc ); DECLARE_ROOM_LOAD ( room_load_roomflags ); DECLARE_ROOM_LOAD ( room_load_sector ); DECLARE_ROOM_LOAD ( room_load_temperature ); DECLARE_ROOM_LOAD ( room_load_northdesc ); DECLARE_ROOM_LOAD ( room_load_southdesc ); DECLARE_ROOM_LOAD ( room_load_eastdesc ); DECLARE_ROOM_LOAD ( room_load_westdesc ); DECLARE_ROOM_LOAD ( room_load_updesc ); DECLARE_ROOM_LOAD ( room_load_downdesc ); DECLARE_ROOM_LOAD ( room_load_northeastdesc ); DECLARE_ROOM_LOAD ( room_load_southwestdesc ); DECLARE_ROOM_LOAD ( room_load_northwestdesc ); DECLARE_ROOM_LOAD ( room_load_southeastdesc ); DECLARE_ROOM_LOAD ( room_load_exitnorth ); DECLARE_ROOM_LOAD ( room_load_exitsouth ); DECLARE_ROOM_LOAD ( room_load_exiteast ); DECLARE_ROOM_LOAD ( room_load_exitwest ); DECLARE_ROOM_LOAD ( room_load_exitup ); DECLARE_ROOM_LOAD ( room_load_exitdown ); DECLARE_ROOM_LOAD ( room_load_exitnortheast ); DECLARE_ROOM_LOAD ( room_load_exitsouthwest ); DECLARE_ROOM_LOAD ( room_load_exitnorthwest ); DECLARE_ROOM_LOAD ( room_load_exitsoutheast ); DECLARE_ROOM_LOAD ( room_load_npcs ); DECLARE_ROOM_LOAD ( room_load_objects ); DECLARE_ROOM_LOAD ( room_load_program ); DECLARE_ZONE_LOAD ( zone_load_author ); DECLARE_ZONE_LOAD ( zone_load_npcs ); DECLARE_ZONE_LOAD ( zone_load_objects ); DECLARE_ZONE_LOAD ( zone_load_rooms ); DECLARE_ZONE_LOAD ( zone_load_reset ); /* * update.c */ void game_update ( void ); void reset_rooms ( void ); OD * reset_objects ( ORD * ); /* * lookup.c */ int get_file_type ( char * ); HD * get_help ( char * ); NPCID * get_npc_index ( int ); OID * get_object_index ( int ); RID * get_room_index ( int ); ZONE_DATA * get_zone ( char * ); int get_sex_number ( char * ); char * get_sex_string ( int ); int get_hair_color_number ( char * ); char * get_hair_color_string ( int ); int get_eye_color_number ( char * ); char * get_eye_color_string ( int ); int get_race_number ( char * ); char * get_race_string ( int ); char * get_race_string_2 ( int ); int get_race_index ( int ); int get_position_number ( char * ); char * get_position_string ( int ); int get_sector_number ( char * ); char * get_sector_string ( int ); /* * misc.c */ void char_to_list ( CD * ); void char_to_room ( CD *, RID * ); void char_from_list ( CD * ); void char_from_room ( CD * ); void obj_to_list ( OD * ); void obj_to_room ( OD *, RID * ); void obj_to_char ( OD *, CD * ); void obj_from_list ( OD * ); void obj_from_room ( OD * ); void obj_from_char ( OD * ); void obj_from_obj ( OD * ); void roll_stats ( SD * ); void modify_stats ( SD *, int ); char * format_string ( char * ); bool sp_legal_string ( char * ); bool visable_object ( OD *, CD * ); bool visable_char ( CD *, CD * ); bool has_light ( CD * ); int carry_weight ( CD * ); char * format_prompt ( CD *, char * ); int count_race ( RID *, intt ); int count_npcs ( RID *, NPCD * ); void introduce_char ( CD *, CD * ); bool knows_char ( CD *, CD * ); void find_exit ( CD *, RID *, intt ); bool knows_exit ( CD *, RID *, intt ); char * npc_flags_string ( flags ); char * part_flags_string ( flags ); char * act_flags_string ( flags ); char * obj_flags_string ( flags ); char * room_flags_string ( flags ); char * door_flags_string ( flags ); /* * script.c */ long npc_script_translate ( SCD *, char * ); long obj_script_translate ( SCD *, char * ); long room_script_translate ( SCD *, char * ); void execute_npc_script ( PD *, SCD *, RSD *, CD *, CD *, CD * ); void execute_obj_script ( PD *, SCD *, OD * ); void execute_room_script ( PD *, SCD *, RSD *, RID *, CD *, CD * ); void check_char_trigger ( int, CD *, RID *, CD *, char * ); void check_room_trigger ( int, CD *, RID *, char * ); DECLARE_SCRIPT_FUNC ( script_func_capitialize ); DECLARE_SCRIPT_FUNC ( script_func_uncapitialize ); DECLARE_SCRIPT_FUNC ( script_func_capitialize_first ); DECLARE_SCRIPT_FUNC ( script_func_is_npc ); DECLARE_SCRIPT_FUNC ( script_func_is_guest ); DECLARE_SCRIPT_FUNC ( script_func_get_char ); DECLARE_SCRIPT_FUNC ( script_func_get_pc ); DECLARE_SCRIPT_FUNC ( script_func_get_npc ); DECLARE_SCRIPT_FUNC ( script_func_get_char_in_room ); DECLARE_SCRIPT_FUNC ( script_func_get_pc_in_room ); DECLARE_SCRIPT_FUNC ( script_func_get_npc_in_room ); DECLARE_SCRIPT_FUNC ( script_func_get_room ); /* * std_cmd.c */ void process_cmd ( CD *, char * ); void _iadd_game_cmd ( void ); void move_char ( CD *, int ); DECLARE_GAME_CMD ( cmd_north ); DECLARE_GAME_CMD ( cmd_south ); DECLARE_GAME_CMD ( cmd_east ); DECLARE_GAME_CMD ( cmd_west ); DECLARE_GAME_CMD ( cmd_up ); DECLARE_GAME_CMD ( cmd_down ); DECLARE_GAME_CMD ( cmd_northeast ); DECLARE_GAME_CMD ( cmd_southwest ); DECLARE_GAME_CMD ( cmd_northwest ); DECLARE_GAME_CMD ( cmd_southeast ); DECLARE_GAME_CMD ( cmd_credits ); DECLARE_GAME_CMD ( cmd_help ); DECLARE_GAME_CMD ( cmd_quit ); DECLARE_GAME_CMD ( cmd_who ); DECLARE_GAME_CMD ( cmd_rwho ); DECLARE_GAME_CMD ( cmd_muds ); DECLARE_GAME_CMD ( cmd_save ); DECLARE_GAME_CMD ( cmd_commands ); DECLARE_GAME_CMD ( cmd_prompt ); DECLARE_GAME_CMD ( cmd_look ); DECLARE_GAME_CMD ( cmd_read ); DECLARE_GAME_CMD ( cmd_write ); DECLARE_GAME_CMD ( cmd_search ); DECLARE_GAME_CMD ( cmd_exits ); DECLARE_GAME_CMD ( cmd_emote ); DECLARE_GAME_CMD ( cmd_say ); DECLARE_GAME_CMD ( cmd_tell ); DECLARE_GAME_CMD ( cmd_yell ); DECLARE_GAME_CMD ( cmd_get ); DECLARE_GAME_CMD ( cmd_put ); DECLARE_GAME_CMD ( cmd_drop ); DECLARE_GAME_CMD ( cmd_give ); DECLARE_GAME_CMD ( cmd_equip ); DECLARE_GAME_CMD ( cmd_use ); DECLARE_GAME_CMD ( cmd_lock ); DECLARE_GAME_CMD ( cmd_unlock ); DECLARE_GAME_CMD ( cmd_light ); DECLARE_GAME_CMD ( cmd_kill ); DECLARE_GAME_CMD ( cmd_flee ); DECLARE_GAME_CMD ( cmd_stand ); DECLARE_GAME_CMD ( cmd_sit ); DECLARE_GAME_CMD ( cmd_rest ); DECLARE_GAME_CMD ( cmd_sleep ); DECLARE_GAME_CMD ( cmd_wake ); DECLARE_GAME_CMD ( cmd_practice ); DECLARE_GAME_CMD ( cmd_follow ); DECLARE_GAME_CMD ( cmd_add ); DECLARE_GAME_CMD ( cmd_remove ); DECLARE_GAME_CMD ( cmd_introduce ); DECLARE_GAME_CMD ( cmd_inventory ); DECLARE_GAME_CMD ( cmd_equipment ); DECLARE_GAME_CMD ( cmd_condition ); DECLARE_GAME_CMD ( cmd_compare ); DECLARE_GAME_CMD ( cmd_consider ); DECLARE_GAME_CMD ( cmd_open ); DECLARE_GAME_CMD ( cmd_close ); DECLARE_GAME_CMD ( cmd_eat ); DECLARE_GAME_CMD ( cmd_drink ); DECLARE_GAME_CMD ( cmd_fill ); DECLARE_GAME_CMD ( cmd_empty ); DECLARE_GAME_CMD ( cmd_list ); DECLARE_GAME_CMD ( cmd_buy ); DECLARE_GAME_CMD ( cmd_sell ); /* * blr_cmd.c */ /* Builder commands. */ DECLARE_GAME_CMD ( cmd_control ); DECLARE_GAME_CMD ( cmd_return ); DECLARE_GAME_CMD ( cmd_users ); DECLARE_GAME_CMD ( cmd_servers ); char * state_string ( int ); char * mstate_string ( int ); DECLARE_GAME_CMD ( cmd_disconnect ); DECLARE_GAME_CMD ( cmd_ccode ); DECLARE_GAME_CMD ( cmd_create ); DECLARE_GAME_CMD ( cmd_destroy ); DECLARE_GAME_CMD ( cmd_lookup ); DECLARE_GAME_CMD ( cmd_stat ); DECLARE_GAME_CMD ( cmd_set ); DECLARE_GAME_CMD ( cmd_goto ); DECLARE_GAME_CMD ( cmd_transfer ); DECLARE_GAME_CMD ( cmd_ltell ); DECLARE_GAME_CMD ( cmd_rtell ); DECLARE_GAME_CMD ( cmd_chat ); DECLARE_GAME_CMD ( cmd_lwizcomm ); DECLARE_GAME_CMD ( cmd_wizcomm ); /* * imp_cmd.c */ /* Implementor commands. */ DECLARE_GAME_CMD ( cmd_delete ); #ifdef DEBUG DECLARE_GAME_CMD ( cmd_coredump ); #endif DECLARE_GAME_CMD ( cmd_reboot ); DECLARE_GAME_CMD ( cmd_memory ); DECLARE_GAME_CMD ( cmd_fwrite ); DECLARE_GAME_CMD ( cmd_lset ); /* * olc_save.c */ void fwrite_npc_reset_list ( FILE *, NPCRD * ); void fwrite_obj_reset_list ( FILE *, ORD * ); bool save_room ( RID *, char * ); /* * olc_cmd.c */ void process_npc_editor_cmd ( TD *, char * ); void process_object_editor_cmd ( TD *, char * ); void process_room_editor_cmd ( TD *, char * ); DECLARE_GAME_CMD ( cmd_edit ); DECLARE_OLC_CMD ( olc_cmd_who ); DECLARE_OLC_CMD ( olc_cmd_rwho ); DECLARE_OLC_CMD ( olc_cmd_ltell ); DECLARE_OLC_CMD ( olc_cmd_rtell ); DECLARE_OLC_CMD ( olc_cmd_chat ); DECLARE_OLC_CMD ( olc_cmd_lwizcomm ); DECLARE_OLC_CMD ( olc_cmd_wizcomm ); DECLARE_OLC_CMD ( olc_cmd_done ); DECLARE_OLC_CMD ( olc_cmd_room_new ); DECLARE_OLC_CMD ( olc_cmd_room_save ); DECLARE_OLC_CMD ( olc_cmd_room_list ); DECLARE_OLC_CMD ( olc_cmd_room_title ); DECLARE_OLC_CMD ( olc_cmd_room_description ); DECLARE_OLC_CMD ( olc_cmd_room_sector ); DECLARE_OLC_CMD ( olc_cmd_room_flag ); /* * shell.c */ void process_shell_cmd ( TD *, char * ); DECLARE_GAME_CMD ( cmd_shell ); DECLARE_SHELL_CMD ( shell_cmd_exit ); DECLARE_SHELL_CMD ( shell_cmd_cd ); DECLARE_SHELL_CMD ( shell_cmd_rm ); DECLARE_SHELL_CMD ( shell_cmd_mkdir ); DECLARE_SHELL_CMD ( shell_cmd_rmdir ); DECLARE_SHELL_CMD ( shell_cmd_ls ); DECLARE_SHELL_CMD ( shell_cmd_cat ); DECLARE_SHELL_CMD ( shell_cmd_users ); DECLARE_SHELL_CMD ( shell_cmd_who ); DECLARE_SHELL_CMD ( shell_cmd_tell ); /* * child.c */ CHILDP_DATA * new_child ( pid_t, int *, int *, int *, char * ); bool die_child ( CHILDP_DATA *, int * ); /* * plr_save.c */ void save_pc ( CD * ); CD * load_pc ( char * ); #ifndef _sysBSD /* * snprintf.c */ int snprintf ( char *, size_t, char *, ... ); int vsnprintf ( char *, size_t, char *, va_list ); #endif #undef TD #undef MUDCD #undef SD #undef HD #undef PD #undef SCD #undef RSD #undef NPCID #undef OID #undef RID #undef NPCRD #undef ORD #undef CD #undef NPCD #undef PCD #undef OD /* * Externals */ extern int errno; extern char * pProgramName; extern jmp_buf jbReboot; extern int iTelnetPort; extern int iBinaryPort; extern int iMUDCommPort; extern sapsocket sTelnetControl; extern sapsocket sBinaryControl; extern sapsocket sMUDCommControl; extern int iMaxPlayers; extern int iNumberPlayers; extern char * pLoginScreenFilename; extern time_t tCurrentTime; extern char cNullChar; extern char * pStrings; extern char * pStringsEnd; extern char * pStringsPos; extern long lStringSpace; extern CHILDP_DATA * pChildren; extern bool bStrComparing; extern char * pCOFilename; extern long lCurrentLine; extern bool bErrorsFound; extern bool bWarningsFound; extern FILE * pLogFile; extern char * pBootFilename; extern char * pMUDCommFilename; extern char * pTempDir; extern char * pShellProgramName; extern char * pLogDir; extern char * pPlayerDir; extern char * pShellDir; extern char * pXWordFilename; extern char * pGreetingFilename; extern char * pGoodbyeFilename; extern char * pMOTDFilename; extern char * pEmDir; extern char * pImageDir; extern char * pHelpDir; extern char * pNPCDir; extern char * pObjectDir; extern char * pRoomDir; extern char * pZoneDir; extern char * pQuestDataDir; extern char * pEmUsageFilename; extern char * pGreeting; extern char * pGoodbye; extern char * pMOTD; extern char * pMUDName; extern long lLoopStallTime; extern long lEmMaxTime; extern int iHashListSize; extern bool bEmFuncUsage; extern int iEmInterpStackSize; extern int iEmVarStackSize; extern char cCreationCode[]; extern int iCreationCodeTimer; extern bool bRunning; extern int iMode; extern int iMemoryMode; extern TERM_DATA * pTermFree; extern CHAR_DATA * pCharFree; extern OBJ_DATA * pObjFree; extern XWORD_DATA * pXWordList; extern MUD_COMM_DATA * pMUDCommList; extern TERM_DATA * pTermList; extern HELP_DATA * pHelpList; extern NPC_INDEX_DATA ** ppNPCIndexList; extern OBJ_INDEX_DATA ** ppObjIndexList; extern ROOM_INDEX_DATA ** ppRoomIndexList; extern ZONE_DATA * pZoneList; extern QUEST_DATA * pQuestDataList; extern CHAR_DATA ** ppCharList; extern OBJ_DATA ** ppObjList; extern RUNNING_SCRIPT_DATA * pRunningScriptList; extern int iMaxShowCount; union { intl iNumber; ROOM_INDEX_DATA * pRoom; } uDefaultRoom; extern const char cLetterTable[]; extern const char * pWordNumberTable[]; extern const char * pCreationCodeTable[]; extern const struct str_number_type snFileTypeTable[]; extern const struct str_number_type snDirTable[]; extern struct cmd_type cCmdTable[]; extern struct cmd_type cSysCmdTable[]; extern struct olc_cmd_type olccNPCTable[]; extern struct olc_cmd_type olccObjectTable[]; extern struct olc_cmd_type olccRoomTable[]; extern struct shell_cmd_type scShellCmdTable[]; extern const struct str_number_type snPositionTable[]; extern const struct str_number_type snSectorTable[]; extern const struct str_number_type snSexTable[]; extern const struct str_number_type snHairColorTable[]; extern const struct str_number_type snEyeColorTable[]; extern const struct race_type rRaceTable[]; extern const struct str_number_type snNPCScriptTriggerTable[]; extern const struct str_number_type snObjScriptTriggerTable[]; extern const struct str_number_type snRoomScriptTriggerTable[]; extern const struct str_number_type snNPCScriptCommandTable[]; extern const struct str_number_type snObjScriptCommandTable[]; extern const struct str_number_type snRoomScriptCommandTable[]; extern const struct script_func_type sfScriptFunctionTable[]; extern const struct str_number_type snItemTypeTable[]; extern const struct number_number_type nnItemEquipTable[]; extern const struct str_number_type snSizeTable[]; extern const struct str_number_type snMaterialTable[]; extern const struct str_number_type snNPCFlagsTable[]; extern const struct str_number_type snPartFlagsTable[]; extern const struct str_number_type snActFlagsTable[]; extern const struct str_number_type snObjectFlagsTable[]; extern const struct str_number_type snRoomFlagsTable[]; extern struct npc_load_type npclLoadTable[]; extern struct obj_load_type olLoadTable[]; extern struct room_load_type rlLoadTable[]; extern struct zone_load_type zlLoadTable[]; #endif /* SERVER */ #endif /* __SAPPHIRE_H__ */ /* * End of sapphire.h */