Here is an update to my nice little ferry code :) This one has 2 main
updates:
1 - Recreate support added, should fix crashbug
2 - Addition of messaging to ferry rooms and dock rooms
Anyways, begin code:
/***************************************************************************
* ferry.c Added to
CircleMUD *
* V.
1.1 *
* Base Programming: Shadowbeam of Darkstar: The Knight of
Darkness *
* Bug Fixes: Fili of Darkstar: The Knight of
Darkness *
* (DARKSTAR: telnet://mdarkstar.ml.org:7007,
http://mdarkstar.home.ml.org) *
***************************************************************************/
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "db.h"
#define F_FROM_ROOM 1000 // One of the dock rooms
#define FERRY_ROOM 1333 // The room of the ferry
#define F_TO_ROOM 6006 // The second dock room
#define F_FROM_ROOM_DIR_FROM_ROOM WEST // F_FROM_ROOM Exit to ferry
#define F_FROM_ROOM_DIR_FROM_FERRY EAST // Exit from ferry to
F_FROM_ROOM
#define F_TO_ROOM_DIR_FROM_ROOM EAST // F_TO_ROOM Exit to ferry
#define F_TO_ROOM_DIR_FROM_FERRY WEST // Exit from ferry to
F_FROM_ROOM
#define F_TIME_ARRIVE_FROM_ROOM 6//Time ferry arrives from
F_FROM_ROOM
#define F_TIME_LEAVE_FROM_ROOM 12//Time ferry leaves from
F_FROM_ROOM
#define F_TIME_ARRIVE_TO_ROOM 18 //Time ferry arrives from
F_TO_ROOM
#define F_TIME_LEAVE_TO_ROOM 23 //Time ferry leaves from
F_TO_ROOM
extern struct room_data *world;
extern struct time_info_data time_info;
int op_dirs[6] = {2, 3, 0, 1, 5, 4};
int created = FALSE;
void create_exit(int vnum_from, int vnum_to, int from_dir) {
if(created == FALSE)
{
CREATE(world[real_room(vnum_from)].dir_option[from_dir], struct
room_direction_data, 1);
world[real_room(vnum_from)].dir_option[from_dir]->to_room =
real_room(vnum_to);
}
else if(created == TRUE)
{
RECREATE(world[real_room(vnum_from)].dir_option[from_dir], struct
room_direction_data, 1);
world[real_room(vnum_from)].dir_option[from_dir]->to_room =
real_room(vnum_to);
}
} // Or malloc? Who knows...
void remove_exit(int vnum_from, int vnum_to, int from_dir) {
free(world[vnum_from].dir_option[from_dir]);
}
void update_ferry(void) {
if(time_info.hours == F_TIME_ARRIVE_FROM_ROOM){
create_exit(F_FROM_ROOM, FERRY_ROOM, F_FROM_ROOM_DIR_FROM_ROOM);
create_exit(FERRY_ROOM, F_FROM_ROOM, F_FROM_ROOM_DIR_FROM_FERRY);
send_to_room("The ferry sails up and docks\r\n",
real_room(F_FROM_ROOM));
send_to_room("The ferry sails up to the docks\r\n",
real_room(FERRY_ROOM));
}
if(time_info.hours == F_TIME_ARRIVE_TO_ROOM){
create_exit(F_TO_ROOM, FERRY_ROOM, F_TO_ROOM_DIR_FROM_ROOM);
create_exit(FERRY_ROOM, F_TO_ROOM, F_TO_ROOM_DIR_FROM_FERRY);
send_to_room("The ferry sails up and docks\r\n",
real_room(F_FROM_ROOM));
send_to_room("The ferry sails up to the docks\r\n",
real_room(FERRY_ROOM));
}
if(time_info.hours == F_TIME_LEAVE_FROM_ROOM){
remove_exit(F_FROM_ROOM, FERRY_ROOM, F_FROM_ROOM_DIR_FROM_ROOM);
remove_exit(FERRY_ROOM, F_FROM_ROOM, F_FROM_ROOM_DIR_FROM_FERRY);
send_to_room("The ferry sails off into the distance\r\n",
real_room(F_FROM_ROOM));
send_to_room("The ferry begins its voyage\r\n",
real_room(FERRY_ROOM));
}
if(time_info.hours == F_TIME_LEAVE_TO_ROOM){
remove_exit(F_TO_ROOM, FERRY_ROOM, F_TO_ROOM_DIR_FROM_ROOM);
remove_exit(FERRY_ROOM, F_TO_ROOM, F_TO_ROOM_DIR_FROM_FERRY);
send_to_room("The ferry sails off into the distance\r\n",
real_room(F_TO_ROOM));
send_to_room("The ferry begins its voyage\r\n",
real_room(FERRY_ROOM));
created = TRUE;
}
return;
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST