This is how my code looks, but it still don't seem to be working. I'm
still loaded to the mortal_/immortal_ start_room.
>Christoffer
On Wed, 20 May 1998, Lord Kyu wrote:
> ACMD(do_quit)
> {
> void die(struct char_data * ch);
> void Crash_rentsave(struct char_data * ch, int cost);
> extern int free_rent;
> sh_int save_room;
> struct descriptor_data *d, *next_d;
>
> if (IS_NPC(ch) || !ch->desc)
> return;
>
> if (subcmd != SCMD_QUIT && GET_LEVEL(ch) < LVL_IMMORT)
> send_to_char("You have to type quit--no less, to quit!\r\n", ch);
> else if (GET_POS(ch) == POS_SLEEPING)
> send_to_char("You can't quit while sleeping.\r\n", ch);
> else if (GET_POS(ch) == POS_FIGHTING)
> send_to_char("No way! You're fighting for your life!\r\n", ch);
> else if (GET_POS(ch) < POS_STUNNED) {
> send_to_char("You die before your time...\r\n", ch);
> die(ch);
> } else {
> if (!GET_INVIS_LEV(ch))
> act("$n has left the game.", TRUE, ch, 0, 0, TO_ROOM);
> sprintf(buf, "%s has quit the game.", GET_NAME(ch));
> mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE);
> send_to_char("Goodbye, friend.. Come back soon!\r\n", ch);
>
> /*
> * kill off all sockets connected to the same player as the one who is
> * trying to quit. Helps to maintain sanity as well as prevent duping.
> */
> for (d = descriptor_list; d; d = next_d) {
> next_d = d->next;
> if (d == ch->desc)
> continue;
> if (d->character && (GET_IDNUM(d->character) == GET_IDNUM(ch)))
> close_socket(d);
> }
>
> save_room = ch->in_room;
> if (free_rent)
> write_aliases(ch); /* If your alias' dont save you will want to
> remove this */
> Crash_rentsave(ch, 0);
> save_char(ch, save_room);
> extract_char(ch); /* Char is saved in extract char */
>
> /* If someone is quitting in their house, let them load back here */
> if (ROOM_FLAGGED(save_room, ROOM_HOUSE))
> write_aliases(ch);
> save_char(ch, save_room);
> }
> }
>
> And this is a small snip from my interpreter.c in case that is where your
> problem lies. If anyone knows anything that is wrong with the way I have
> done this please let me know. I am always looking to make improements.
>
> if ((load_room = GET_LOADROOM(d->character)) != NOWHERE)
> load_room = real_room(load_room);
>
> /* If char was saved with NOWHERE, or real_room above failed... */
> if (load_room == NOWHERE) {
> if (GET_LEVEL(d->character) >= LVL_IMMORT)
> load_room = r_immort_start_room;
> else
> load_room = r_mortal_start_room;
> }
>
> if (PLR_FLAGGED(d->character, PLR_FROZEN))
> load_room = r_frozen_start_room;
>
> char_to_room(d->character, load_room);
> if ((load_result = Crash_load(d->character)))
> if (GET_LEVEL(d->character) < LVL_IMMORT &&
> !PLR_FLAGGED(d->character, PLR_FROZEN)) {
> char_from_room(d->character);
> char_to_room(d->character, load_room);
> }
>
> - Lord Kyu -
+------------------------------------------------------------+
| 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/15/00 PST