Okay if I understand the question correctly you asked why quit in your
house because you loose/drop all you eq? correct?
Well the eq isn't really taken out of the game. it's droped then crashed
saved every 5 mins. it's faster than rem all, drop all, save, quit.
Anyways the eq is still in the game wich causes another problem with
reloading times but thats a different question. All that stuff is under
objsave.c and there should be something under the do_save function if I
rember correctly where it does the statement and sees weather or not you
are in a room flagged house. if you are it crash saves your house.
the rest of the stuff where it says
if (ROOM_FLAGGED(save_room, ROOM_HOUSE))
save_char(ch, save_room);
that just saves the room the character automaticly loads in when they
log back in.
>
> While I'm very experienced at programming, I am new to C. And I may be
> getting lost in the code somewhere.
>
> If someone goes into thier house, and types 'quit' they drop their
> equipment. I've followed the code in the do_quit, and it is exactly
> right. extract_char dropped the equipment then calls save_char...
> I've checked the FTp site and compared my version (modified bpl14) with
> the bpl14 and the bpl13a stocks... there are no differences. The
> stock code droppes equipment when quitting in a house also.
>
> What am I missing?? Am I doing something wrong?
>
> I trimmed a little to save lines. My version doesn't differ from the
> website if you need the few lines I snipped.
> >From act.other.c:
> ACMD(do_quit)
> {
> sh_int save_room;
> struct descriptor_data *d, *next_d;
>
> if (IS_NPC(ch) || !ch->desc)
> return;
>
> if /* I can't quit legally then don't-- snipped /* {
> } else {
> if (!GET_INVIS_LEV(ch))
> act("$n has left this existance.", TRUE, ch, 0, 0, TO_ROOM);
> sprintf(buf, "%s has left this existance.", 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/NEXT snipped. */
>
> save_room = ch->in_room;
> if (free_rent)
> Crash_rentsave(ch, 0);
> 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))
> save_char(ch, save_room);
> }
> }
>
> And from handler.c:
> /* Extract a ch completely from the world, and leave his stuff behind */
> void extract_char(struct char_data * ch)
> {
> struct char_data *k, *temp;
> struct descriptor_data *t_desc;
> struct obj_data *obj;
> int i, freed = 0;
>
> if (!IS_NPC(ch) && !ch->desc) {
> for (t_desc = descriptor_list; t_desc; t_desc = t_desc->next)
> if (t_desc->original == ch)
> do_return(t_desc->character, NULL, 0, 0);
> }
> if (ch->in_room == NOWHERE) {
> log("SYSERR: NOWHERE extracting char %s. (%s, extract_char)",
> GET_NAME(ch), __FILE__);
> exit(1);
> }
> if (ch->followers || ch->master)
> die_follower(ch);
>
> /* Forget snooping, if applicable */
> if (ch->desc) {/* Snipped-- Stops Snooping/* }
>
> /* transfer objects to room, if any */
> while (ch->carrying) {
> obj = ch->carrying;
> obj_from_char(obj);
> obj_to_room(obj, ch->in_room);
> }
>
> /* transfer equipment to room, if any */
> for (i = 0; i < NUM_WEARS; i++)
> if (GET_EQ(ch, i))
> obj_to_room(unequip_char(ch, i), ch->in_room);
>
> if (FIGHTING(ch))
> stop_fighting(ch); /* And stop everyone else too -snipped */
>
> char_from_room(ch);
>
> /* pull the char from the list */
> REMOVE_FROM_LIST(ch, character_list, next);
>
> if (ch->desc && ch->desc->original)
> do_return(ch, NULL, 0, 0);
>
> if (!IS_NPC(ch)) {
> save_char(ch, NOWHERE);
> Crash_delete_crashfile(ch);
> } else {
> if (GET_MOB_RNUM(ch) > -1) /* if mobile */
> mob_index[GET_MOB_RNUM(ch)].number--;
> clearMemory(ch); /* Only NPC's can have memory */
> if (SCRIPT(ch))
> extract_script(SCRIPT(ch));
> if (SCRIPT_MEM(ch))
> extract_script_mem(SCRIPT_MEM(ch));
> free_char(ch);
> freed = 1;
> }
>
> if (!freed && ch->desc != NULL) {
> STATE(ch->desc) = CON_MENU;
> SEND_TO_Q(MENU, ch->desc);
> } else { /* if a player gets purged from within the game */
> if (!freed)
> free_char(ch);
> }
> }
>
+------------------------------------------------------------+
| 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