From: Admin Subject: GOHOME Command In player_special_data_saved in structs.h, you will see a bunch of spares. Change one of them to int gohome. then in utils.h, right below GET_PRACTICES(ch), put this line: #define GET_GOHOME(ch) ((ch)->player_specials->saved.gohome) In interpreter.c, with all the ACMD prototypes, put the following lines: ACMD(do_gohome); ACMD(do_takehome); ACMD(do_givehome); Then, in the command list, make the command declarations like this: { "gohome", POS_STANDING, do_gohome, 1, 0 }, { "givehome", POS_DEAD, do_givehome, LVL_GRGOD, 0 }, { "takehome", POS_DEAD, do_takehome, LVL_GRGOD, 0 }, Here are the commands, just put these in whatever .c file you want.: ACMD(do_gohome) { if (GET_GOHOME(ch) == 0) { send_to_char("You don't have a gohome!\r\n", ch); return; } if (real_room(GET_GOHOME(ch)) < 0) { sprintf(buf, "Invalid Gohome, Room %d does not exist.\r\n", GET_GOHOME(ch)); send_to_char(buf, ch); return; } sprintf(buf, "%s fades into nothingness and is gone.\r\n", GET_NAME(ch)); send_to_room(buf, ch->in_room); char_from_room(ch); char_to_room(ch, real_room(GET_GOHOME(ch))); sprintf(buf, "%s appears in a flash of blinding light!\r\n", GET_NAME(ch)); send_to_room(buf, ch->in_room); look_at_room(ch, 0); } ACMD(do_givehome) { struct char_data *vict; int home; half_chop(argument, arg, buf); if (!*arg || !*buf || !isdigit(*buf)) { send_to_char("Usage: givehome \r\n", ch); return; } if (!(vict = get_char_vis(ch, arg))) { send_to_char(NOPERSON, ch); return; } if (GET_GOHOME(vict) != 0) { send_to_char("Character already has a gohome, remove the old one first!\r\n ", ch$ return; } home = atoi(buf); if (real_room(home) < 0) { send_to_char("Room does not exist.\r\n", ch); return; } GET_GOHOME(vict) = home; GET_LOADROOM(vict) = home; sprintf(buf1, "You make %s a gohome!\r\n", GET_NAME(vict)); send_to_char(buf1, ch); sprintf(buf1, "%s makes you a gohome!\r\n", GET_NAME(ch)); send_to_char(buf1, vict); } ACMD(do_takehome) { struct char_data *vict; skip_spaces(&argument); if (!*argument) { send_to_char("Usage: takehome \r\n", ch); return; } if (!(vict = get_char_vis(ch, argument))) { send_to_char(NOPERSON, ch); return; } if (GET_GOHOME(vict) == 0) { sprintf(buf, "%s does not even have a gohome!\r\n", GET_NAME(vict)); send_to_char(buf, ch); return; } GET_GOHOME(vict) = 0; sprintf(buf, "%s removes your gohome!\r\n", GET_NAME(ch)); send_to_char(buf, vict); sprintf(buf, "You remove %s gohome!\r\n", GET_NAME(vict)); send_to_char(buf, ch); }