I typed this small list of things I changed in the Rom2.4b4 code that were either bugs or things that I wanted to improve. I made this list cause people kept coming on my mud askin how to do this or that when they decided to make their own mud. I got tired of sayin the same things all over, so I made this list. ;) In this file the lines that have the " + " next to them is where the new code was added in. In this file the lines that starts with a " - " means that that specific line was taken out. Also, in some parts I commented next to the line I added in so that you have a quick reference as to what the code is for. The lines that have my comments are: /* Kracus- ... */ I didn't include descriptions of how to use these bugs, or even try to explain them, cause people would try to crash muds. So, if you don't understand what these changes fix or modify, then pull out your c book. Most coders of Rom2.4 know about these bugs and modifications so all you experienced coders don't even worry bout these things, cause you prolly already fixed them. ...Kracus Based on ROM Version 2.4 beta (c)1993-96 Russ Taylor Based on Merc 2.1 code by Hatchet, Furey, and Kahn Original DikiMud by: Hans Staerfeldt, Katja Nyboe, Tom Madsen, Micheal Seifert, Sebastian Hammer ----------------------------------------------------------------- Bug- In comm.c, in the page_to_char_bw function there was a missing "return;" statement that needed to be added in. /* Send a page to one char. */ void page_to_char_bw( const char *txt, CHAR_DATA *ch ) { if ( txt == NULL || ch->desc == NULL) + return; /* Kracus-added return; to stop charm mob bug */ if (ch->lines == 0 ) { send_to_char(txt,ch); return; } ----------------------------------------------------------------- Bug- In act_obj.c, in the do_buy function there needs to be a " smash_tilde " statement. void do_buy( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; int cost,roll; if ( argument[0] == '\0' ) { send_to_char( "Buy what?\n\r", ch ); return; } if ( IS_SET(ch->in_room->room_flags, ROOM_PET_SHOP) ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *pet; ROOM_INDEX_DATA *pRoomIndexNext; ROOM_INDEX_DATA *in_room; + smash_tilde(argument); /* Kracus- added to stop bug*/ if ( IS_NPC(ch) ) return; argument = one_argument(argument,arg); /* hack to make new thalos pets work */ if (ch->in_room->vnum == 9621) note: may be better to just smash all tildes in the interpret. ----------------------------------------------------------------- Bug- In scan.c, in do_scan there needs to be a check for null rooms. You need to take out 2 lines and add in 2 new lines.-Kracus scan_room = ch->in_room; for (depth = 1; depth < 4; depth++) { if ((pExit = scan_room->exit[door]) != NULL && scan_room->exit[door]->u1.to_room != NULL) { - scan_room= pExit->u1.to_room; - scan_list( pExit->u1.to_room,ch,depth,door); + scan_room = pExit->u1.to_room; + scan_list(scan_room, ch, depth, door); } } return; } note: this change also makes scan go in depth and not just 1room. ----------------------------------------------------------------- Bug- In const.c, in the pc race table, There is a common possible bug, due to making the class multipliers 0. To avoid this bug make all class multipliers greater than 0. The { 150, 100, 125, 100} below are the class multipliers, keep them above 0. { "dwarf","Dwarf", 8,{ 150, 100, 125, 100},/*Kracus-class multiliers*/ { "berserk" }, { 14, 12, 14, 10, 15 }, { 20, 16, 19, 14, 21 }, SIZE_MEDIUM }, note: one thing I noticed in Rom24b4 is that when a character is a race that is 150 class multiplier for their class and 40cps, it is 1500 to level. If they have less then 40cps then it is 1000 to level. Rom does not seem to call the class multiplier unless the cps are 40 or above. You might want to make the default less then 40 cps call the class multiplier and add it in. I am not sure if Russ and Crew wanted it this way, but change it or leave it at your own discretion. -Kracus ----------------------------------------------------------------- Bug- In act_info.c, in do_score function, you need to add in 2 new lines. You might also want to do a send_to_char message here also.-Kracus void do_score( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; + if(IS_NPC(ch)) + return; ----------------------------------------------------------------- Levels- If you decided to increase the levels of your mud, be aware that Russ Taylor and RomCrew built Rom2.4 for 60levels and you will completely unbalance your mud should you decide to do this.-Kracus 1. you have to increase the value in db.c MAX_STRING_LENGTH. 2. you also should change all spell durations on spells in magic.c 3. you should redo the thac0s for armor class 4. you should change the levels limits for gate and portals spells 5. you should redo some imm commands that limit level to 60 6. you should adjust all mobs in areas to balance your new levels 7. you should adjust the pkill limits to reflect your new levels 8. you might want to adjust eq restricts if you feel it necessary 9. you should change the help files for imm commands and levels 10. you need to adjust the skills or spells that loop by char->level 11. you need to adjust xp_compute in fight.c, so no 1000exp kills 12. you might want to put a limit, charming only mobs 1000hp or less 13. you also have to increase MAX_LEVEL in merc.h 14. you should adjust the code where mobs to cast spells based on 60levels 15. you might want to adjust the level checks in saves_spells in magic.c 16. there is obviously more changes needed, but you should know what else needs to be modified... ----------------------------------------------------------------- SafeRooms- In fight.c, in bool is_safe, There was not a check for saferooms and pkill for players who are clanned and doing the killing.-Kracus /* player doing the killing */ else { if (!is_clan(ch)) { send_to_char("Join a clan if you want to kill players.\n\r",ch); return TRUE; } if (IS_SET(victim->act,PLR_KILLER) || IS_SET(victim->act,PLR_THIEF)) return FALSE; if (!is_clan(victim)) { send_to_char("They aren't in a clan, leave them alone.\n\r",ch); return TRUE; } /*Kracus- safe room check */ + if (IS_SET(victim->in_room->room_flags,ROOM_SAFE)) + { + send_to_char("Not in this room.\n\r",ch); + return TRUE; + } ----------------------------------------------------------------- ClanLoot- In fight.c, in function make_corpse, stock Rom2.4 it allows clanned players to loot corpses. If you don't want clanned players looting corpses you need to take a line out and add a new line in.-Kracus if (!is_clan(ch)) corpse->owner = str_dup(ch->name); else { - corpse->owner = NULL; + corpse->owner = str_dup(ch->name);/*Kracus-add this line in*/ if (ch->gold > 1 || ch->silver > 1) { obj_to_obj(create_money(ch->gold / 2, ch->silver/2), corpse); ch->gold -= ch->gold/2; ch->silver -= ch->silver/2; } } ----------------------------------------------------------------- KillerFlag- In fight.c, void check_killer, Rom2.4 did not do a check for giving a killer flag if the character was in a clan and out of level and pkilling an opposing clanned player.-Kracus /* * NPC's are cool of course (as long as not charmed). * Hitting yourself is cool too (bleeding). * So is being immortal (Alander's idea). * And current killers stay as they are. */ if ( IS_NPC(ch) || ch == victim || ch->level >= LEVEL_IMMORTAL + || !is_same_clan(ch,victim) /*Kracus- add this line in */ || IS_SET(ch->act, PLR_KILLER) || ch->fighting == victim) return; ----------------------------------------------------------------- NonMana Classes- In magic.c, in do_cast, Rom2.4 set nonmana classes to cast at below their level. In order to make nonmana classes cast at their level you can take out the line or just adjust it.-Kracus ch->mana -= mana; if (IS_NPC(ch)) || class_table[ch->class].fMana)/* class has spells */ (*skill_table[sn].spell_fun) ( sn, ch->level, ch, vo,target); else - (*skill_table[sn].spell_fun) (sn, 3*ch->level/4, ch, vo,target); + (*skill_table[sn].spell_fun) (sn, ch->level, ch, vo,target); check_improve(ch,sn,TRUE,1); } note: it not the cleanest kind of change and you could do it other ways. ----------------------------------------------------------------- Just remember when you modify stuff in the Rom code it probably affects alot of other stuff, so always check what the code does and what is affected by it before you decided to change it. well, that's it for the small list of changes... -Kracus.