Hi everyone. I'm new to programming and administrating as a whole. I've actually been a builder for about 10 years or so now on the Rom code bases. Well, I decided to dive into trying to make my own mud, so, I started one up with a friend of mine, but…now I'm stuck. We've got the codebase, and we've got everything up and running, but…where are some good tut's to check out on basic shell commands and what they do, some "what if" scenarios like "what if the mud crashes, how do I bring it back up?" etc, etc…If anyone knows, that'd be greatly appreciated. Thanks so much.
Zeno, thank you very much. I took the time to read all of the pages that you offered to me. And they were very helpful. I understand that owning and operating a mud takes a lot of time, and I'm willing to give that time, so I have no worries there. The project I'm working on now is a project that'll take a good 2 or 3 years before it's fully operational, and I don't mind. But, anyway, I thank you so much for sharing those links with me. Now, all I need to do is find a good Dawn of Time OLC Building guide and I should be ok. I found one from Nick G.'s website, and it does well. Unfortunately though, it's missing the one command that I really want, and the one I really want is the command to dump all of the area files but 1 (maybe 2 so new immortals can log in and go somewhere [the newbie school] when they first log on), and I can't figure it out.
I wonder if I could go into the shell and just remove the area files that way. But, when I removed just 1 area file, I couldn't get the code to recompile and startup, but…maybe I was thinking something and it just didn't want to do it. I'm still working with it though. Anyway, any more suggestions or advise would be greatly appreciated. But, please, make sure it's constructive, thanks again everyone!
Ok. I'm having a bit of trouble and I've been working on it for hours. I'm trying to remove .are files from the shell. Now, here's the situation.
(1) The mud is still running (2) I'm logged into the shell (3) I'm in my /dot/area file (4) I type in 'rm <areafilename>.are' and hit enter, then confirm that the file is gone. File is gone. (5) I go into my arealist.txt file, and then delete the area name from the arealist.txt file. I save the changes, go back into my arealist.txt file to ensure that the changes were saved (and they always are). (6) I move from my /dot/area to my /dot/src file, do a regular make (not a clean make), then back up to my /dot directory. ….finally…. (7) I do a quick 'nohup ./dawn 2666 &' in the /dot directory. after that, this is the output….
[1] 4184 nohup: appending output to 'nohup.out'
…..well, here's the problem. That should start up my mud, but it doesn't. To get it started again, I have to reload the area files that I've dumped. Now…I'm at a complete loss for what to do…I'm connecting to the shell through puTTY, and everything else I do seems to be ok. Any suggestions?
[edit]….Also, I did find another 'area.txt' file in my /dot/help directories, but when I went through it (not changing anything), all it was was what appeared to be the area helpfile descriptions. Could I be missing something from that file?
the thing about area files is that sometimes theres some code linked to the areas. look through merc.h and find the parts that say ROOM_VNUM_SCHOOL and OBJ_VNUM_SWORD and other well known vnums you'll need to either remove these or change the vnum to a vnum in an area that you're not removing. i'm not sure if there are other places in the code that you'll have to look in but having this knowledge should help you out a little. just make sure you remove the area from area.lst as well or the mud will try to load an area that isn't there. oh and you don't need to do a make when you're messing with area files. just when you do anything in the src directory.
[edit to add] and always do a clean make (either type make clean, or if your makefile doesn't have that in it, just rm -rf *.o and make) when you change any of the header ( files that end in .h) files.
Ok. I'm having a bit of trouble and I've been working on it for hours. I'm trying to remove .are files from the shell. Now, here's the situation.
(1) The mud is still running (2) I'm logged into the shell (3) I'm in my /dot/area file (4) I type in 'rm <areafilename>.are' and hit enter, then confirm that the file is gone. File is gone. (5) I go into my arealist.txt file, and then delete the area name from the arealist.txt file. I save the changes, go back into my arealist.txt file to ensure that the changes were saved (and they always are). (6) I move from my /dot/area to my /dot/src file, do a regular make (not a clean make), then back up to my /dot directory. ….finally…. (7) I do a quick 'nohup ./dawn 2666 &' in the /dot directory. after that, this is the output….
[1] 4184 nohup: appending output to 'nohup.out'
…..well, here's the problem. That should start up my mud, but it doesn't. To get it started again, I have to reload the area files that I've dumped. Now…I'm at a complete loss for what to do…I'm connecting to the shell through puTTY, and everything else I do seems to be ok. Any suggestions?
[edit]….Also, I did find another 'area.txt' file in my /dot/help directories, but when I went through it (not changing anything), all it was was what appeared to be the area helpfile descriptions. Could I be missing something from that file?
Check the log files or start it up normally (run the exec) to see the problem.
the thing about area files is that sometimes theres some code linked to the areas. look through merc.h and find the parts that say ROOM_VNUM_SCHOOL and OBJ_VNUM_SWORD and other well known vnums you'll need to either remove these or change the vnum to a vnum in an area that you're not removing. i'm not sure if there are other places in the code that you'll have to look in but having this knowledge should help you out a little. just make sure you remove the area from area.lst as well or the mud will try to load an area that isn't there. oh and you don't need to do a make when you're messing with area files. just when you do anything in the src directory.
[edit to add] and always do a clean make (either type make clean, or if your makefile doesn't have that in it, just rm -rf *.o and make) when you change any of the header ( files that end in .h) files.
Forgive me if I'm not understanding this correctly. Basically…what I'm understanding here is that I will have to go through each line of the code, and delete any line that may pertain to that specific area. Is that true? If that's true, surely there's a simpler way…? If I'm not understanding correctly, perhaps you could be a little more in depth with the steps please? Thank you though, for posting your idea. I hope to get another post from you soon.
Not really. You would need to go into the header files and find any definitions of OBJ_VNUM_SWORD and the like. If they represent a vnum you deleted, you need to change that definition.
easy way would be to go into the src directory, type grep VNUM_ *.* and then remove/edit the results there's really not that many of them if i remember correctly. unless whatever codebase you're using is REALLY modified.
[edit] oh yeah and you'll cut your work in half if you just leave in the limbo.are vnums cause most of the defined vnums are in that area.
I'm using the Dawn of Time codebase, and when I did the grep VNUM_ *.cpp, this was the result….
============================= fight.cpp: vnum = OBJ_VNUM_BRAINS; global.cpp: ch->in_room= get_room_index(ROOM_VNUM_LIMBO); global.cpp: limbo_mob_index_data->area = get_vnum_area( ROOM_VNUM_LIMBO); handler.cpp: if((room = get_room_index(ROOM_VNUM_OOC)) != NULL){ handler.cpp: if(obj_to->pIndexData->vnum == OBJ_VNUM_PIT) handler.cpp: if( ( location = get_room_index( ROOM_VNUM_OOC ) ) == NULL) handler.cpp: "Please report this to an admin.\r\n", ROOM_VNUM_OOC); handler.cpp: "This room SHOULD be an OOC room - please report this bug to an admin.\r\n", ROOM_VNUM_OOC); handler.cpp: obj = create_object( get_obj_index( OBJ_VNUM_SILVER_ONE )); handler.cpp: obj = create_object( get_obj_index( OBJ_VNUM_GOLD_ONE)); handler.cpp: obj = create_object( get_obj_index( OBJ_VNUM_GOLD_SOME )); handler.cpp: obj = create_object( get_obj_index( OBJ_VNUM_SILVER_SOME )); handler.cpp: obj = create_object( get_obj_index( OBJ_VNUM_COINS )); handler.cpp: if( obj->pIndexData->vnum == OBJ_VNUM_FIRE ) jail.cpp: ch->printlnf("The jail command transfers players to room %d.", ROOM_VNUM_JAIL); jail.cpp: if(victim->in_room_vnum()==ROOM_VNUM_JAIL){ jail.cpp: if(!get_room_index( ROOM_VNUM_JAIL )){ jail.cpp: char_to_room( victim, get_room_index( ROOM_VNUM_JAIL )); jail.cpp: ch->printlnf("The jail room is %d… the room should have the norecall and ooc flags set.", ROOM_VNUM_JAIL); jail.cpp: if(victim->in_room_vnum()!=ROOM_VNUM_JAIL) lockers.cpp: o=create_object(get_obj_index(OBJ_VNUM_DUMMY)); magic.cpp: light = create_object( get_obj_index( OBJ_VNUM_LIGHT_BALL )); magic.cpp: mushroom = create_object( get_obj_index( OBJ_VNUM_MUSHROOM )); magic.cpp: foodvnum = OBJ_VNUM_MUSHROOM; magic.cpp: foodvnum = OBJ_VNUM_MUSHROOM; magic.cpp: if (get_obj_index(OBJ_VNUM_ROSE)) { magic.cpp: rose = create_object(get_obj_index(OBJ_VNUM_ROSE)); magic.cpp: spring = create_object( get_obj_index( OBJ_VNUM_SPRING )); magic.cpp: disc = create_object(get_obj_index(OBJ_VNUM_DISC)); magic.cpp: portal = create_object(get_obj_index(OBJ_VNUM_PORTAL)); magic.cpp: portal = create_object(get_obj_index(OBJ_VNUM_PORTAL)); magic.cpp: portal = create_object(get_obj_index(OBJ_VNUM_PORTAL)); magic_ce.cpp: if (( scrap = get_obj_index( OBJ_VNUM_MUSHROOM )) == NULL ) magic_ja.cpp: if (get_obj_index(OBJ_VNUM_ROSE)){ magic_ja.cpp: rose = create_object(get_obj_index(OBJ_VNUM_ROSE)); magic_ke.cpp: if ( get_obj_index( OBJ_VNUM_DIVINE_LIGHT ) == NULL ) magic_ke.cpp: bugf("Vnum %d not found for Divine Light!", OBJ_VNUM_DIVINE_LIGHT ); magic_ke.cpp: ch->printlnf( "Vnum %d not found for Divine Light, please report to the admin.", OBJ_VNUM_DIVINE_LIGHT ); magic_ke.cpp: dlight = create_object( get_obj_index( OBJ_VNUM_DIVINE_LIGHT )); magic_ke.cpp: if (( pObj = get_obj_index( OBJ_VNUM_SPIRIT_HAMMER )) == NULL ) magic_ke.cpp: ch->printf( "Vnum %d not found for Spirit Hammer, please report to the admin.", OBJ_VNUM_SPIRIT_HAMMER ); magic_ke.cpp: if (( pObj = get_obj_index( OBJ_VNUM_DRUIDSTAFF )) == NULL ) magic_ke.cpp: ch->printlnf( "Vnum %d not found for Druidstaff, please report to the admin.", OBJ_VNUM_DRUIDSTAFF ); magic_ke.cpp: if ( cObj->pIndexData->vnum != OBJ_VNUM_STAFF ) magic_ke.cpp: if (( pObj = get_obj_index( OBJ_VNUM_TOTEMSTAFF )) == NULL ) magic_ke.cpp: ch->printlnf( "Vnum %d not found for Druidstaff, please report to the admin.", OBJ_VNUM_TOTEMSTAFF ); magic_ke.cpp: if ( cObj->pIndexData->vnum != OBJ_VNUM_DRUIDSTAFF ) magic_ob.cpp: mushroom = create_object( get_obj_index( OBJ_VNUM_MUSHROOM )); magic_ra.cpp: if ((pMobIndex = get_mob_index(MOB_VNUM_SUMMON_GUARDIAN))) /* make sure mob exists */ magic_ra.cpp: sprintf(buf,"BUG: in spell_summon_guardian - missing mob vnum %d!\r\n", MOB_VNUM_SUMMON_GUARDIAN); magic_ra.cpp: pMobIndex = get_mob_index(MOB_VNUM_VYR_GOOD); magic_ra.cpp: MOB_VNUM_VYR_GOOD); magic_ra.cpp: pMobIndex = get_mob_index(MOB_VNUM_VYR_BAD); magic_ra.cpp: MOB_VNUM_VYR_BAD); magic_ra.cpp: pObjIndex = get_obj_index(OBJ_VNUM_SUMMON_JUSTICE); magic_ra.cpp: sprintf(buf,"BUG: in spell_summon_justice - missing object vnum %d!\r\n", OBJ_VNUM_SUMMON_JUSTICE); magic_re.cpp: ouritem = create_object( get_obj_index( OBJ_VNUM_MUSHROOM )); magic_re.cpp: ouritem = create_object( get_obj_index( OBJ_VNUM_LIGHT_BALL )); magic_re.cpp: if ( get_obj_index(OBJ_VNUM_FIRE) == NULL ) magic_re.cpp: bugf("Vnum %d not found for do_build!", OBJ_VNUM_FIRE); magic_re.cpp: ch->printlnf( "Vnum %d not found for do_build!, please report to the admin.", OBJ_VNUM_FIRE ); magic_re.cpp: fire = create_object( get_obj_index( OBJ_VNUM_FIRE )); magic_re.cpp: if ( get_obj_index(OBJ_VNUM_RAFT) == NULL ) magic_re.cpp: bugf("Vnum %d not found for do_build!", OBJ_VNUM_RAFT); magic_re.cpp: ch->printlnf( "Vnum %d not found for do_build!, please report to the admin.", OBJ_VNUM_RAFT ); magic_re.cpp: raft = create_object( get_obj_index( OBJ_VNUM_RAFT )); magic_re.cpp: if ( get_obj_index(OBJ_VNUM_STAFF) == NULL ) magic_re.cpp: bugf("Vnum %d not found for do_build!", OBJ_VNUM_STAFF); magic_re.cpp: ch->printlnf( "Vnum %d not found for do_build!, please report to the admin.", OBJ_VNUM_STAFF ); magic_re.cpp: staff = create_object( get_obj_index( OBJ_VNUM_STAFF )); magic_sb.cpp: gatec = create_object( get_obj_index(OBJ_VNUM_PORTAL)); //Needs a new OBJ_VNUM_GATE magic_sb.cpp: gatec = create_object(get_obj_index(OBJ_VNUM_PORTAL)); magic_sb.cpp: gatev = create_object(get_obj_index(OBJ_VNUM_PORTAL)); magic_sb.cpp: portal = create_object( get_obj_index ( OBJ_VNUM_PORTAL )); magic_sb.cpp: portal = create_object(get_obj_index(OBJ_VNUM_PORTAL)); mixedit.cpp: if (( oid = get_obj_index( OBJ_VNUM_MUSHROOM )) == NULL ) mixedit.cpp: if (( oid = get_obj_index( OBJ_VNUM_DUMMY )) == NULL ) mixedit.cpp: // OBJ_VNUM_DUMMY shouldn't be left anything other than VNUM_DUMMY nanny.cpp: if(IS_IRC(ch) && get_room_index(ROOM_VNUM_STARTIRC)){ nanny.cpp: return ROOM_VNUM_STARTIRC; nanny.cpp: if(get_room_index(ROOM_VNUM_STARTTELNET)){ nanny.cpp: return ROOM_VNUM_STARTTELNET; nanny.cpp: return ROOM_VNUM_OOC; nanny.cpp: if(get_obj_index(OBJ_VNUM_WORLD_MAP)) // load world map if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_WORLD_MAP)),ch); nanny.cpp: if(get_obj_index(OBJ_VNUM_NEWBIE_GUIDE )) // load newbie guide if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_NEWBIE_GUIDE)),ch); nanny.cpp: if(get_obj_index(OBJ_VNUM_EVIL_CITY_MAP)){ // load main evil city map if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_EVIL_CITY_MAP)),ch); nanny.cpp: if(get_obj_index(OBJ_VNUM_GOOD_CITY_MAP)){ // load main good city map if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_GOOD_CITY_MAP)),ch); nanny.cpp: if(race_table[ch->race]->recall_room==ROOM_VNUM_EVIL_RECALL) nanny.cpp: if(get_obj_index(OBJ_VNUM_EVIL_CITY_MAP)){ // load main evil city map if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_EVIL_CITY_MAP)),ch); nanny.cpp: if(get_obj_index(OBJ_VNUM_GOOD_CITY_MAP)){ // load main good city map if it exists nanny.cpp: obj_to_char(create_object(get_obj_index(OBJ_VNUM_GOOD_CITY_MAP)),ch); nanny.cpp: if(get_room_index(ROOM_VNUM_LIMBO)==NULL){ nanny.cpp: bugf("BUG: get_room_index(ROOM_VNUM_LIMBO)==NULL" nanny.cpp: "ROOM_VNUM_LIMBO = %d! Saving game settings, change it in there.\r\n", ROOM_VNUM_LIMBO); nanny.cpp: char_to_room( ch, get_room_index(ROOM_VNUM_LIMBO)); nanny.cpp: target_room= get_room_index( ROOM_VNUM_LIMBO ); pload.cpp: ROOM_INDEX_DATA *limbo=get_room_index( ROOM_VNUM_LIMBO ); pload.cpp: ROOM_VNUM_LIMBO); pload.cpp: interpret(ch, FORMATF("goto %d",ROOM_VNUM_LIMBO)); pload.cpp: ROOM_VNUM_LIMBO); pload.cpp: ROOM_INDEX_DATA *limbo=get_room_index( ROOM_VNUM_LIMBO ); pload.cpp: ROOM_INDEX_DATA *limbo=get_room_index( ROOM_VNUM_LIMBO ); races.cpp: r->recall_room=ROOM_VNUM_LIMBO; races.cpp: r->death_room=ROOM_VNUM_LIMBO; redit.cpp: ROOM_VNUM_LIMBO); redit.cpp: char_to_room(ch, get_room_index(ROOM_VNUM_LIMBO)); rp.cpp: if (( pObjIndex = get_obj_index( OBJ_VNUM_RP_ITEM )) == NULL ) { save.cpp: (ch->in_room == get_room_index( ROOM_VNUM_LIMBO ) save.cpp: : ch->in_room == NULL ? ROOM_VNUM_LIMBO: ch->in_room->vnum ); save.cpp: ( pet->in_room == get_room_index( ROOM_VNUM_LIMBO ) save.cpp: : pet->in_room == NULL ? ROOM_VNUM_LIMBO : pet->in_room->vnum ); save.cpp: ch->name, room_vnum, ROOM_VNUM_LIMBO); save.cpp: ch->in_room = get_room_index( ROOM_VNUM_LIMBO ); save.cpp: pet->in_room = get_room_index( ROOM_VNUM_LIMBO ); save.cpp: if(obj->pIndexData->vnum==OBJ_VNUM_LIGHT_BALL){ save.cpp: obj = create_object( get_obj_index( OBJ_VNUM_DUMMY )); skill_ke.cpp: if (( pObjIndex = get_obj_index( OBJ_VNUM_MUSHROOM )) == NULL ) { skill_ke.cpp: if ( fire->pIndexData->vnum == OBJ_VNUM_FIRE ) { skill_ke.cpp: if ( obj->pIndexData->vnum == OBJ_VNUM_SLICE ) { skill_ke.cpp: coinIndex = get_obj_index( OBJ_VNUM_SILVER_ONE ); skill_ke.cpp: coinIndex = get_obj_index( OBJ_VNUM_GOLD_ONE ); skill_ke.cpp: if(obj->pIndexData->vnum==OBJ_VNUM_DRUIDSTAFF){ skill_ke.cpp: }else if (obj->pIndexData->vnum==OBJ_VNUM_TOTEMSTAFF){ skill_ke.cpp: vnum = MOB_VNUM_TOTEM_BEAR + month; // Bear = 60 and is used as an offset skill_ti.cpp: int objvnum=OBJ_VNUM_CRYSTAL_FLASK; skill_ti.cpp: objvnum=OBJ_VNUM_BADCRYSTAL_FLASK; // classes that can't do it usually stuff up special.cpp:#define MOB_VNUM_PATROLMAN 2106 special.cpp:#define GROUP_VNUM_TROLLS 2100 special.cpp:#define GROUP_VNUM_OGRES 2101 special.cpp: if (vch->pIndexData->vnum == MOB_VNUM_PATROLMAN) special.cpp: if (vch->pIndexData->group == GROUP_VNUM_OGRES special.cpp: if (vch->pIndexData->vnum == MOB_VNUM_PATROLMAN) special.cpp: if (vch->pIndexData->group == GROUP_VNUM_TROLLS special.cpp: if ( ( location = get_room_index( ROOM_VNUM_OOC ) ) == NULL) special.cpp: "Please report this to an admin.\r\n", ROOM_VNUM_OOC); special.cpp: "This room SHOULD be an OOC room - please report this bug to an admin.\r\n", ROOM_VNUM_OOC); support.cpp: vnum=OBJ_VNUM_OUTFIT_LIGHT; support.cpp: vnum=OBJ_VNUM_OUTFIT_VEST; support.cpp: vnum=OBJ_VNUM_OUTFIT_SLEEVES; support.cpp: vnum=OBJ_VNUM_OUTFIT_CAP; support.cpp: vnum=OBJ_VNUM_OUTFIT_GLOVES; support.cpp: vnum=OBJ_VNUM_OUTFIT_LEGGINGS; support.cpp: vnum=OBJ_VNUM_OUTFIT_BOOTS; support.cpp: vnum=OBJ_VNUM_OUTFIT_BELT; support.cpp: vnum = OBJ_VNUM_OUTFIT_SWORD; // just in case! support.cpp: vnum=OBJ_VNUM_OUTFIT_SHIELD; update.cpp: char_to_room( ch, get_room_index( ROOM_VNUM_LIMBO ) ); update.cpp: char_to_room( ch, get_room_index( ROOM_VNUM_LIMBO ) ); update.cpp: if ( obj->pIndexData->vnum == OBJ_VNUM_FIRE ) { update.cpp: if ( get_obj_index(OBJ_VNUM_ASHES) == NULL ) update.cpp: bugf("Vnum %d not found for ashes!", OBJ_VNUM_ASHES); update.cpp: ashes = create_object( get_obj_index( OBJ_VNUM_ASHES )); update.cpp: if ( obj->pIndexData->vnum == OBJ_VNUM_DIVINE_LIGHT ) { update.cpp: if ( !(obj->in_obj && obj->in_obj->pIndexData->vnum == OBJ_VNUM_PIT pathofdarkness@zeno:~/dot/src$ ================================
And because of that reason, I'm not really sure where to begin. I want to dump everything except limbo….but when I hit up my alist….this is what I get…
I don't even see Limbo, but I do see an OOC area…..would the be the substitute?
And if so, would dumping all the area files not just be easier? I mean, maybe if (when the codebase was built) they built the vnums like you're talking about Igabod, into the area's themselves, not the code? I mean, I see the grep results…but I'm not 100% sure I'm reading them correctly. If I am reading them correctly, then I shouldn't have to worry about dumping the area files, right? So…maybe it's not starting up after I dump 2-3 area files because vnums in those files were linked to/with vnums in another area file?
You need to do grep VNUM_ *.h (or *.hpp if your headers have that suffix) to find the defines, what you did found every instance where they're used. What you need is the defines to see what the actual vnum is, so that you know what areas not to remove.
[Edit:] I'm going to venture a guess that dawn.are is formerly called limbo.are, and between dawn.are, mudschool.are and the ooc resources area, you're not going to want to remove those.
Ok. Apparently, the mud Owner wanted to try something a bit simpler with less color. Or, at least something that is more familiar. DoT is great, but not for a first timer I'd imagine. So, we've decided to go with AFKMud 2.1.1. Well, now I'm running into a very simple problem. The banned name list can't be found. I've tried….
grep ban *.cpp grep authorized *.cpp grep unacceptable *.cpp
etc etc etc
….and the problem is. I don't know which file the banned name list is in. I've even tried to grep 'banned name list' and it just gets stupid on me or I get stupid on it. Does anyone have any suggestions? Please, I hope you do. I know we've switch code midstream of you assisting us (and I'm eternally greatful), so I hope that your assistance will continue. Thanks again!