On Mon, 11 Nov 1996, Nic Suzor wrote: > i thought about that, but it would mean that everyone would be able to > practice those spells, and see them etc, but only ogres could cast... its a > little messy, i was hoping for a cleaner way to do them... To 'struct spell_info_type' (in spells.h) add: bool races[NUM_RACES]; bool race_dependant; /* automatically set by spell_race() */ Now add the following function to spell_parser.c: void spell_race(int spell, int race) { char buf[256]; int bad = 0; if (spell < 0 || spell > TOP_SPELL_DEFINE) { sprintf(buf, "SYSERR: attempting assign to illegal spellnum %d", spell); log(buf); return; } if (race < 0 || race >= NUM_RACES) { sprintf(buf, "SYSERR: assigning '%s' to illegal race %d", skill_name(spell), race); log(buf); bad = 1; } if (!bad) { spell_info[spell].races[race] = TRUE; spell_info[spell].race_dependant = TRUE; } } Add the following lines to 'void spello()': for (i = 0; i < NUM_RACES; i++) spell_info[spell].races[i] = FALSE; spell_info[spell].race_dependant = FALSE; The following macro will also be of some use: #define CAN_CAST(ch, s) (GET_LEVEL(ch) >= LVL_IMMORT || \ !spell_info[s].race_dependant || \ spell_info[s].races[GET_RACE(ch)]) Now in spec_procs.c, do the following (my new lines are marked with a plus sign at the beginning; you'll need to remove those. Any that are not marked with the + are context lines to show you where to put them), these changes occur somewhere around line 121. if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]) + if (CAN_CAST(ch)) { Now in SPECIAL(guild), find the following line: if (skill_num < 1 || And change it to: if (skill_num < 1 || !CAN_CAST(ch) || You can do the same in do_cast if you want to present a special message when someone tries to cast a spell their race is not capable of casting; although since they can't learn the spell and they can't see it in the practice list (unless they are immortal) I suppose it doesn't really matter. -- Daniel Koepke dkoepke@california.com Forgive me father, for I am sin. Back after a brief excursion to Alaska. +-----------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://cspo.queensu.ca/~fletcher/Circle/list_faq.html | +-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST