For newbie start rooms, hometown start rooms, whatever... In config.c, follow the definition for mortal_start_room... Sorta like: sh_int newbie_start_room = 18801; sh_int hometown1_start_room = 19001; In db.c, add the checks to make sure that the start rooms exist, and add the conversion between vnum and rnum. You can look at the examples with frozen_start_room and immort_start_room, follow those examples and it will work... Then change the loading code in interpreter.c to check the chars for hometown, check their level, whatever... and set load_room to whatever... Here's what the code looks like now.. /* 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); You can add checks like: if(GET_LEVEL(d->character) == 1) { load_room = r_newbie_start_room; or: if(GET_HOME(d->character) == 1) { load_room = r_hometown1_start_room; if(GET_HOME(d->character) == 2) { load_room = r_hometown2_start_room; You can also mess with recall code and stuff so that players would recall to their hometown, etc... Lots of possibilities... P.S. Don't forget your extern sh_int newbie_start_room and stuff whereever necessary... > > Hi, > I'm new to the list (Hi all) and to implementing in general. Here's my > problem: > > I am trying to make it so that players will enter the room at different > locations. What I mean by this is that I want new players to start at one > location and players the quit or have NOWHERE defined as their start location > to start at another room. The reason for this is because I have a start up > sequence of rooms I want new characters to go thru and I only want this to > happen once. My problem is that I don't entirely understand the process by > which players are assigned their starting room. > > I noticed when the character is created there is the following: > > if (GET_PFILEPOS(d->character) < 0) > GET_PFILEPOS(d->character) = > create_entry(GET_NAME(d->character));init_char(d->character); > save_char(d->character, NOWHERE); > SEND_TO_Q(motd, d); > SEND_TO_Q("\r\n\n*** PRESS RETURN: ", d); > > Changing the save_char() location at this point from NOWHERE to the new start > room doesn't work becuase there is another save_char() down under case 1 of the > main menu > > case '1': > reset_char(d->character); > if (PLR_FLAGGED(d->character, PLR_INVSTART)) > GET_INVIS_LEV(d->character) = GET_LEVEL(d->character); > if ((load_result = Crash_load(d->character))) > d->character->in_room = NOWHERE; > ----> save_char(d->character, NOWHERE); > send_to_char(WELC_MESSG, d->character); > d->character->next = character_list; > character_list = d->character; > > <after this point it checks for special loading circumstances> > > > My question is what is the first save_char() for when the player is created and > is there any way I can set the start location there for new players? Or, is > there any special flag that is set when a player is first created that I can > key on? In the future I would like to create multiple start towns and I can > see that being a slight problem with the way the characters are loaded into the > game. Has anyone encountered this before? And, if so how was it solved? > > Also, does save_char() expect the vnum or rnum of the room? > > Thanks in advance for any help you can provide, > > Brian aka Haddixx > > __ > > > > > > > > -- > "Take my advice and go back to the time | Brian Menges > you came from. The future isn't what | NASA Ames Research Center > it used to be."--G'kar, "The Long Dark" | Mail Stop: N262-2 > 0__0 | Phone: (415) 604-0069 > =============ooO==(__)==Ooo=============| menges@eos.arc.nasa.gov >
This archive was generated by hypermail 2b30 : 12/18/00 PST