J.T. wrote: > > I have been trying to get particular races to start with certain spells > and skills like classes, I copied the code in spell_parser.c and set it > up for races, added everything to races.c and spells.h, but it still > won't work. Anyone got any ideas of what I am doing wrong or what I > could do to make this work? I would appreciate any suggestions or ideas. > Thanks in advance. > > +------------------------------------------------------------+ > | Ensure that you have read the CircleMUD Mailing List FAQ: | > | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | > +------------------------------------------------------------+ Here's how I did it for infravision. You could maybe use some of this as a starting point. Infra for non-magic user non-humans First, in utils.h add this #define IS_RACE_INFRA(ch) (IS_ELF(ch) || IS_DROW(ch) || IS_GNOME(ch) || \ IS_DWARF(ch) || IS_HALFELF(ch) || IS_HALFORC(ch)) adjust for whatever your races are. In class.c case RACE_DROW: ch->real_abils.intel += 1; ch->real_abils.wis -= 1; ch->real_abils.dex += 1; SET_SKILL(ch, SPELL_INFRAVISION, 80); break; and so on. This step might vary depending on how you imped the race code if you need the whole function let me know in spell_parser.c in do_cast change if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)] ) { send_to_char("You do not know that spell!\r\n", ch); return; } to if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)] && \ !((IS_RACE_INFRA(ch)) && (spellnum == SPELL_INFRAVISION )) ) { send_to_char("You do not know that spell!\r\n", ch); return; } ---------------------------------------------------------------------------- higher up in int mag_manacost int mag_manacost(struct char_data * ch, int spellnum) { int mana; if ( (IS_RACE_INFRA(ch)) && (spellnum == SPELL_INFRAVISION) ){ mana =10; return mana; }else{ mana = MAX(SINFO.mana_max - (SINFO.mana_change * (GET_LEVEL(ch) - SINFO.min_level[(int) GET_CLASS(ch)])), SINFO.mana_min); } return mana; } note, I did it that way so a level 1 drow warrior wouldn't have to have 120 mana to cast a simple spell that just doesn't happen to be in the skill list for warriors in class.c There may be better ways to do this, but it was quick and dirty :) and, so it shows up in thier "spells" list, in do_spells change it to look something like this... ACMD(do_spells) { extern char *spells[]; extern struct spell_info_type spell_info[]; int i; strcpy(buf, "You know of the following Spells:\r\n"); strcpy(buf2, buf); for (i = 1; i < MAX_SPELLS+1; i++) { if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)] || IS_RACE_INFRA(ch)) { if (GET_SKILL(ch, i) > 0) { sprintf(buf, "%-20s %s\r\n", spells[i], how_good(GET_SKILL(ch, i))); strcat(buf2, buf); } } } page_string(ch->desc, buf2, 1); } +------------------------------------------------------------+ | 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/08/00 PST