>From: Moppe Sewerin <mans@graphiclife.com> >Reply-To: Circle Discussion List <CIRCLE@post.queensu.ca> >When my players rent, they don't end up in the room they rented. They >end up in the starting room for mortals. This is really annoying =). I'm >using Circle bpl19. Any1 who think they could help me with this? I can explain the problem to you and give a solution, but I don't know if its the best solution. The problem is, in objsave.c when a player rents, that player's loadroom becomes the room he is in, but when extract_char() is called, that player gets saved again, but this time, in NOWHERE. Here is my fix. In db.c: void save_char(struct char_data *ch, room_rnum load_room) { struct char_file_u st; if (IS_NPC(ch) || !ch->desc || GET_PFILEPOS(ch) < 0) return; char_to_store(ch, &st); strncpy(st.host, ch->desc->host, HOST_LENGTH); st.host[HOST_LENGTH] = '\0'; - if (!PLR_FLAGGED(ch, PLR_LOADROOM)) { - if (load_room == NOWHERE) - st.player_specials_saved.load_room = NOWHERE; - else - st.player_specials_saved.load_room = GET_ROOM_VNUM(load_room); - } + if (!PLR_FLAGGED(ch, PLR_LOADROOM) && load_room != NOWHERE) + st.player_specials_saved.load_room = GET_ROOM_VNUM(load_room); fseek(player_fl, GET_PFILEPOS(ch) * sizeof(struct char_file_u), SEEK_SET); fwrite(&st, sizeof(struct char_file_u), 1, player_fl); } Then, in your other commands where they leave the game, you put in stuff like: In act.other.c: do_quit(): if (free_rent) Crash_rentsave(ch, 0); extract_char(ch); /* Char is saved in extract char */ + /* Char return to mortal_start_room on login */ + if (!PLR_FLAGGED(ch, PLR_LOADROOM)) + GET_LOADROOM(ch) = NOWHERE; + /* If someone is quitting in their house, let them load back here */ if (ROOM_FLAGGED(loadroom, ROOM_HOUSE)) save_char(ch, loadroom); In objsave.c: gen_receptionist(): mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); act("$n helps $N into $S private chamber.", FALSE, recep, 0, ch, TO_NOTVICT); save_room = ch->in_room; extract_char(ch); save_char(ch, save_room); + + /* This allows player to reload in INN if re-enter game. */ + if (!PLR_FLAGGED(ch, PLR_LOADROOM)) + GET_LOADROOM(ch) = GET_ROOM_VNUM(save_room); } else { Crash_offer_rent(ch, recep, TRUE, mode); act("$N gives $n an offer.", FALSE, ch, 0, recep, TO_ROOM); } There is one other way they can leave the game - dying. You can set their loadroom to NOWHERE if you want. _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp. -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT