/* * phantstruct.h - structure definitions for Phantasia */ extern player_t; extern opponent_t; extern battle_t; extern it_combat_t; extern gladiator_t; extern account_t; extern server_t; extern client_t; extern game_t; extern player_desc_t; extern event_t; extern realm_t; extern realm_object_t; extern scoreboard_t; extern monster_t; extern charstats_t; extern shop_item_t; extern connection_t; struct player_t /* player attributes */ { /* player information */ char name[SZ_NAME]; /* player name */ char lcname[SZ_NAME]; /* player name in lowercase */ unsigned char password[16]; /* password hash */ /* player location */ double x; /* x coord */ double y; /* y coord */ char area[SZ_AREA]; /* name of the area player is in */ double circle; /* current circle player is in */ bool beyond; /* is the character past no return */ short location; /* codes for special all locations */ /* player stats */ double experience; /* experience */ double level; /* level */ double strength; /* strength */ double max_strength; /* maximum strength */ double energy; /* energy */ double max_energy; /* maximum energy */ float quickness; /* quickness */ float max_quickness; /* quickness */ double mana; /* mana */ double brains; /* brains */ double magiclvl; /* magic level */ float poison; /* poison */ float sin; /* sin */ bool gender; /* player is male/female */ short lives; /* multiple lives for council, valar */ int age; /* age of player */ int degenerated; /* age/3000 last degenerated */ /* player status */ short type; /* character type */ short special_type; /* special character type */ bool cloaked; /* is character cloaked */ bool blind; /* blindness */ short shield_nf; /* does player get shield next battle */ short haste_nf; /* will the player be hasted */ short strong_nf; /* does player get a strength bonus */ /* player currency */ double gold; /* gold */ double gems; /* gems */ /* player equipment */ double sword; /* sword */ double shield; /* shield */ float quicksilver; /* quicksilver */ int holywater; /* holy water */ int amulets; /* amulets */ int charms; /* charms */ short crowns; /* crowns */ bool virgin; /* virgin */ bool palantir; /* palantir */ bool blessing; /* blessing */ short ring_type; /* type of ring */ int ring_duration; /* duration of ring */ /* creation information */ char parent_account[SZ_NAME]; /* created by this account */ char parent_network[SZ_FROM]; /* created from this address */ time_t date_created; /* created at this time */ bool faithful; /* may other accounts load? */ /* current or previous user information */ char last_IP[SZ_FROM]; /* last IP or DNS address */ char last_account[SZ_NAME]; /* last account accessed */ time_t last_load; /* time last accessed */ time_t last_reset; /* time password was last reset */ int load_count; /* times character has been loaded */ time_t time_played; /* seconds character has been played */ /* hack foilers */ int bad_passwords; /* unsuccessful load attempts */ int muteCount; /* times caught spamming */ time_t lastMute; /* last instance spammed */ /* purgatory options */ bool purgatoryFlag; short monsterNumber; }; struct player_mod_t /* information to modify an account */ { /* new name */ bool newName; /* is there a new name? */ char name[SZ_NAME]; /* character's new name */ char lcName[SZ_NAME]; /* character's new name lowercase */ /* new password */ bool newPassword; /* is there a new password? */ unsigned char password[16]; /* hash of the new password */ bool passwordReset; /* is the password being reset? */ /* sharing permissions */ bool newPermissions; /* are we sending a perm change? */ bool faithful; /* is the character faithful */ /* info updates */ bool badPassword; /* load attempt */ }; struct opponent_t /* opponent attributes for battle */ { /* opponent information */ char name[SZ_MONSTER_NAME]; /* opponent name */ char realName[SZ_MONSTER_NAME]; /* opponent's real name */ short type; /* opponent type */ int processID; /* IT combat opponent process ID */ /* opponent stats */ double experience; /* experience */ double strength; /* strength */ double max_strength; /* maximum strength */ double energy; /* energy */ double max_energy; /* maximum energy */ float speed; /* speed */ float max_speed; /* maximum speed */ double brains; /* brains */ double size; /* monster size */ float sin; /* sin */ /* battle info */ double shield; /* shield */ short special_type; /* special monster flag */ short treasure_type; /* treasure type */ short flock_percent; /* percent chance of flocking */ }; struct battle_t /* battle information */ { /* player information */ double force_field; /* force field */ double strengthSpell; /* strength bonus */ double speedSpell; /* speed bonus */ bool ring_in_use; /* ring flag */ /* opponent information */ struct opponent_t *opponent; /* pointer to opponent info */ /* battle information */ double melee_damage; /* damage done in melee */ double skirmish_damage; /* damage done in skirmish */ bool tried_luckout; /* luckout flag */ int rounds; /* count of player attacks */ int timeouts; /* count of player timeouts */ }; struct it_combat_t { pthread_mutex_t theLock; struct opponent_t opponent[2]; /* structures to attack */ bool opponentFlag[2]; short message; double arg1; struct player_t *player_ptr; /* other battles */ struct it_combat_t *next_opponent; /* pointer to next player to fight */ }; struct client_t /* structure for client variables */ { /* socket variables */ int socket; /* the client-player socket */ bool socket_up; /* flag if socket is active */ struct sockaddr_in address; /* player address */ char out_buffer[SZ_OUT_BUFFER]; /* storage for outgoing messages */ size_t out_buffer_size; /* number of bytes in out_buffer */ char in_buffer[SZ_IN_BUFFER]; /* storage for outgoing messages */ size_t in_buffer_size; /* number of bytes in in_buffer */ /* connection information */ char IP[SZ_FROM]; /* IP or DNS of player */ char network[SZ_FROM]; /* IP or DNS of player's network */ bool addressResolved; /* is the address a DNS entry? */ char connection_id[SZ_FROM + 15]; /* IP or DNS : process id */ long machineID; /* Cookie assigned to system */ short run_level; /* area of game player is in */ char modifiedName[SZ_NAME]; /* tagged name */ /* account information */ char account[SZ_NAME]; /* account logged in as */ char lcaccount[SZ_NAME]; /* account in lowercase */ char wizaccount[SZ_NAME]; /* wizard account for backdoor */ char wizIP[SZ_FROM]; /* wizard IP for backdoor */ char previousName[SZ_NAME]; /* saves the name when killed */ char email[SZ_FROM]; /* player e-mail from account info */ char parentNetwork[SZ_FROM]; /* network of the account */ time_t date_connected; /* time this connection started */ /* client variables */ int channel; /* what chat channel is being used */ int timeout; /* current time player has to act */ int timeoutAt; /* current time player has to act */ short timeoutFlag; /* is a timeout response expected? */ double knightEnergy; /* energy bonus for knighthood */ float knightQuickness; /* quickness bonus for kinghthood */ double morgothCount; /* time since the last Morgoth defeated */ int ageCount; /* one ring counter */ short wizard; /* administrator level */ bool broadcast; /* broadcast next chat? */ bool stuck; /* did the player stay for it-combat */ bool suspended; /* hold game and only hear wizards */ time_t muteUntil; /* time after which player can chat */ time_t tagUntil; /* time the player's name tag disappears */ bool hearBroadcasts; /* are server messages posted? */ bool accountLoaded; /* do we have an account? */ bool characterLoaded; /* do we have a character? */ bool characterAnnounced; /* has the character been accounced? */ /* hack information */ time_t chatTimes[10]; int chatLength[10]; short swearCount; /* directory to important information */ struct player_t player; /* the main player structure */ struct battle_t battle; /* structure used for battles */ struct event_t *events; /* pointer to character events */ struct realm_t *realm; /* pointer to server realm variables */ struct game_t *game; /* pointer to game's game_t struct */ }; struct player_desc_t /* common information about a player */ { /* Player information */ char name[SZ_NAME]; /* name of the character */ char lcname[SZ_NAME]; /* lowercase character name */ char parent_account[SZ_NAME]; /* character parent account */ short type; /* character class */ short special_type; /* special character type */ bool gender; /* is the character male or female */ double level; /* the character's current level */ int channel; /* the chat channel being used */ short wizard; /* is player game admin */ bool cloaked; /* is the player cloaked */ bool palantir; /* does the player have a palantir */ bool blind; /* is character blind? */ }; struct game_t /* structure for a linked list of games */ { /* the thread itself */ pthread_t the_thread; /* the game thread */ bool cleanup_thread; /* has the thread ended? */ int the_socket; pid_t clientPid; /* the process ID of the client */ /* player information */ char IP[SZ_FROM]; /* IP being used */ char network[SZ_FROM]; /* network being used */ char account[SZ_NAME]; /* account being used */ long machineID; /* machine number */ /* character information */ double x; /* x-coordinate */ double y; /* y-coordinate */ bool virtual; /* player not at specific coordinates */ char area[SZ_AREA]; /* name of area in the game */ bool useLocationName; /* always show area over coords */ bool palantir; /* does the player have a palantir */ double circle; /* the circle the character is in */ int hearAllChannels; /* can this player hear all chat? */ bool chatFilter; bool sendEvents; /* include this player on broadcasts? */ struct player_desc_t *description; /* pointer to the player description */ struct it_combat_t *it_combat; /* pointer to character's it_combat */ /* event traffic */ struct event_t *events_in; /* queue for events to the thread */ pthread_mutex_t events_in_lock; /* lock on events in */ /* server info */ struct game_t *next_game; /* pointer to the next game */ }; struct event_t /* structure to describe actions */ { /* event information */ short type; /* the type of event */ double arg1, arg2; /* event arguments */ long int arg3; /* another argument */ void *arg4; /* and more arguments */ /* addressing information */ struct game_t *from; /* who created the event */ struct game_t *to; /* where the event is going */ struct event_t *next_event; /* pointer to the next event */ }; struct scoreboard_t /* scoreboard entry */ { double level; /* level of player */ char class[SZ_CLASS_NAME]; /* character type of player */ char name[SZ_NAME]; /* name of player */ char from[SZ_FROM]; /* ip or DNS of player */ char how_died[SZ_HOW_DIED]; /* description of player's fate */ time_t time; /* time of death */ }; struct monster_t /* base monster information */ { char name[SZ_MONSTER_NAME]; /* name of the monster */ short special_type; /* monster special type */ double experience; /* monster experience */ double energy; /* monster energy */ double strength; /* monster strength */ double brains; /* monster brains */ double speed; /* monster speed */ short treasure_type; /* monster treasure type */ short flock_percent; /* percent chance of flocking */ }; struct charstats_t /* character type statistics */ { char class_name[SZ_CLASS_NAME];/* name of the character class */ char short_class_name; /* character class abriviation */ double max_brains; /* max brains per level */ double max_mana; /* max mana per level */ double weakness; /* how strongly poison affects player */ double goldtote; /* how much gold char can carry */ int ring_duration; /* bad ring duration */ struct { double base; /* base for roll */ double interval; /* interval for roll */ double increase; /* increment per level */ } quickness, /* quickness */ strength, /* strength */ mana, /* mana */ energy, /* energy level */ brains, /* brains */ magiclvl; /* magic level */ }; struct shop_item_t /* menu item for purchase */ { char item[SZ_ITEMS]; /* menu item name */ double cost; /* cost of item */ }; struct realm_state_t /* things to save upon shutdown */ { double kings_gold; char king_name[SZ_NAME]; /* name of old king */ char valar_name[SZ_NAME]; /* name of old valar */ }; struct realm_object_t /* things to run into out there */ { double x; /* x coordinate */ double y; /* y coordinate */ short type; /* what the object is */ void *arg1; /* item pointer argument */ struct realm_object_t *next_object; /* pointer to the next object */ }; struct realm_t /* variables for the entire realm */ { /* server variables */ pid_t serverPid; /* the process ID of the server */ /* the linked list of games */ struct game_t *games; /* begin linked list of games */ struct game_t *knight; /* pointer to current knight */ struct game_t *king; /* pointer to current king */ struct game_t *valar; /* pointer to current valar */ bool king_flag; /* true when there is a king */ char king_name[SZ_NAME]; /* name of old king */ char valar_name[SZ_NAME]; /* name of old valar */ /* file mutexes */ pthread_mutex_t backup_lock; /* access to the backup file */ pthread_mutex_t scoreboard_lock; /* scoreboard file in use */ pthread_mutex_t character_file_lock; /* locks access to character file */ pthread_mutex_t log_file_lock; /* locks all log files */ pthread_mutex_t network_file_lock; /* locks the network file */ pthread_mutex_t tag_file_lock; /* locks the tag file */ pthread_mutex_t tagged_file_lock; /* locks the tagged file */ pthread_mutex_t history_file_lock; /* locks the history file */ /* variable/link list mutexes */ pthread_mutex_t realm_lock; /* locks the whole realm */ pthread_mutex_t account_lock; /* account file and email_limbo */ pthread_mutex_t hack_lock; /* locks hack stats */ pthread_mutex_t monster_lock; /* monster list lock */ pthread_mutex_t object_lock; /* realm object lock */ pthread_mutex_t kings_gold_lock; /* lock of the kings gold */ pthread_mutex_t connections_lock; /* lock the connection linked list */ /* changing game variables */ struct monster_t monster[NUM_MONSTERS]; /* list of all monsters */ struct realm_object_t *objects; /* list of objects in realm */ double kings_gold; /* amount of gold in kings coffers */ double steward_gold; /* amount of gold in stewards coffers */ int nextTagNumber; /* numbers for session tags */ /* realm-wide fixed information */ struct charstats_t charstats[NUM_CHARS]; /* character types */ struct shop_item_t shop_item[NUM_ITEMS]; /* shop items */ /* linked lists */ struct connection_t *connections; /* counts of logins and passwords */ /* names and e-mail addresses in limbo */ struct linked_list_t *name_limbo; struct linked_list_t *email_limbo; }; struct account_t /* structure to store account information */ { /* main information */ char name[SZ_NAME]; /* account name */ char lcname[SZ_NAME]; /* name in lowercase */ unsigned char password[16]; /* password hash */ time_t last_reset; /* time of last password reset */ char email[SZ_FROM]; /* creator e-mail */ char lcemail[SZ_FROM]; /* e-mail in lowercase */ char confirmation[SZ_PASSWORD]; /* first time confirmation */ /* creation information */ char parent_IP[SZ_FROM]; /* created from this address */ char parent_network[SZ_FROM]; /* created from this address */ time_t date_created; /* created at this time */ /* previous user information */ char last_IP[SZ_FROM]; /* last IP or DNS address */ char last_network[SZ_FROM]; /* last IP or DNS address */ time_t last_load; /* time last accessed */ int login_count; /* number of times account used */ /* hack foilers */ int bad_passwords; /* unsuccessful load attempts */ int hackCount; /* number of alleged hacks */ int rejectCount; /* times given a reject tag */ time_t lastHack; /* time of the last hack */ int muteCount; /* times given a reject tag */ time_t lastMute; /* time of the last hack */ }; struct account_mod_t /* information to modify an account */ { /* new password */ bool newPassword; /* is there a new password? */ unsigned char password[16]; /* hash of the new password */ bool passwordReset; /* is the password being reset? */ /* e-mail resets - not used */ bool newEmail; char email[SZ_FROM]; char confirmation[SZ_PASSWORD]; /* hack information */ bool hack; int hackCount; bool mute; int muteCount; /* info updates */ bool confirm; bool access; bool badPassword; }; struct server_t /* structure for top server variables */ { /* server variables */ short run_level; /* flag set to shutdown server */ int the_socket; /* socket to listen for connections */ /* game variables */ short num_games; /* current count of players */ struct realm_t realm; /* realm variables */ }; struct player_spec_t /* info for java client interface */ { /* the data */ char name[SZ_NAME + 1]; /* character name */ char type[SZ_SPEC]; /* character type and special type */ }; struct player_stats_t /* main display information */ { /* player location */ unsigned int x1; /* x coord */ unsigned int x2; /* x coord */ unsigned int y1; /* y coord */ unsigned int y2; /* y coord */ /* player stats */ unsigned int strength1; /* strength */ unsigned int strength2; /* strength */ unsigned int max_str1; /* maximum strength */ unsigned int max_str2; /* maximum strength */ unsigned int energy1; /* energy */ unsigned int energy2; /* energy */ unsigned int max_ener1; /* maximum energy */ unsigned int max_ener2; /* maximum energy */ unsigned int quickness1; /* quickness */ unsigned int quickness2; /* quickness */ unsigned int max_quick1; /* quickness */ unsigned int max_quick2; /* quickness */ unsigned int mana1; /* mana */ unsigned int mana2; /* mana */ unsigned int level1; /* level */ unsigned int level2; /* level */ /* player currency */ unsigned int gold1; /* gold */ unsigned int gold2; /* gold */ /* player equipment */ unsigned int sword1; /* sword */ unsigned int sword2; /* sword */ unsigned int shield1; /* shield */ unsigned int shield2; /* shield */ unsigned int quicksilver1; /* quicksilver */ unsigned int quicksilver2; /* quicksilver */ bool crowns; /* crowns */ bool virgin; /* virgin */ bool palantir; /* palantir */ bool blessing; /* blessing */ bool ring; /* ring */ /* player information */ char name[SZ_NAME + 1]; /* player name */ char area[SZ_AREA + 1]; /* name of the area player is in */ }; struct button_t /* client button configuration */ { /* compass buttons */ char compass; /* interface buttons */ char button[8][SZ_LABEL]; }; struct linked_list_t /* generic linked list */ { char name[SZ_FROM]; struct linked_list_t *next; }; struct examine_t /* examine strcture */ { char title[SZ_NAME + 30]; /* player name */ char location[50]; /* name of the area player is in */ /* player information */ char account[SZ_NAME]; /* account player is using */ char network[SZ_FROM]; /* player's domain */ short channel; /* channel player is on */ /* player stats */ double level; /* level */ double experience; /* experience */ double nextLevel; /* experience */ double strength; /* strength */ double max_strength; /* maximum strength */ double energy; /* energy */ double max_energy; /* maximum energy */ float quickness; /* quickness */ float max_quickness; /* quickness */ double mana; /* mana */ double brains; /* brains */ double magiclvl; /* magic level */ float poison; /* poison */ float sin; /* sin */ char gender[7]; /* player is male/female */ short lives; /* multiple lives for council, valar */ /* player status */ char cloaked[5]; /* is character cloaked */ char blind[5]; /* blindness */ /* player currency */ double gold; /* gold */ double gems; /* gems */ /* player equipment */ double sword; /* sword */ double shield; /* shield */ float quicksilver; /* quicksilver */ int holywater; /* holy water */ int amulets; /* amulets */ int charms; /* charms */ short crowns; /* crowns */ char virgin[5]; /* virgin */ char palantir[5]; /* palantir */ char blessing[5]; /* blessing */ char ring[5]; /* ring */ /* creation information */ int age; /* age of player */ int degenerated; /* age/3000 last degenerated */ char date_loaded[30]; /* loaded on this date */ char date_created[30]; /* created at this time */ char time_played[12]; /* seconds character has been played */ }; struct tag_t /* saved struct of bans, mutes, etc. */ { int number; short type; time_t validUntil; bool affectNetwork; bool contagious; char description[SZ_FROM]; }; struct tagged_t /* saved struct of bans, mutes, etc. */ { int tagNumber; short type; char name[SZ_FROM]; time_t validUntil; }; struct network_t /* strcture to save hack info for networks */ { char address[SZ_FROM]; int hackCount; time_t lastHack; int muteCount; time_t lastMute; time_t expires; }; struct connection_t /* short term struct to watch for hacks by connection */ { char theAddress[SZ_FROM]; time_t connections[10]; int connectionCount; time_t badPasswords[8]; int badPasswordCount; time_t eraseAt; struct connection_t *next; }; struct tagged_list_t /* to create a list of tags */ { struct tagged_t theTagged; struct tagged_list_t *next; }; struct history_t /* list of past administrative events */ { time_t date; short type; char name[SZ_FROM]; char description[SZ_LINE + 50]; }; struct history_list_t /* to create a list of history */ { struct history_t theHistory; struct history_list_t *next; }; struct detail_t /* information on player's connection */ { char modifiedName[SZ_NAME]; char name[SZ_NAME]; char faithful[5]; char parentAccount[SZ_NAME]; char charParentNetwork[SZ_FROM]; int playerMutes; char account[SZ_NAME]; char email[SZ_FROM]; char accParentNetwork[SZ_FROM]; int accountMutes; char IP[SZ_FROM]; char network[SZ_FROM]; int machineID; char dateConnected[30]; int networkMutes; }; struct tagged_sort_t /* strcture to help tag inheritance */ { int tag; struct tagged_t *tagged[4]; struct tagged_sort_t *next; };