> if (!has_materials(ch, spellnum))
> { blah }
>
> where has_materials looks something like:
> has_materials(struct char_data * ch, int spellnum)
> {
> switch (spellnum) {
> case SPELL_ARMOR:
> return (mag_materials(ch, 1, 2, 3, TRUE, FALSE));
> break;
> }
> etc.
> }
> return 0;
What I did, is first in:
int call_magic(struct cha....
in spell_parser.c, I added this:
if (IS_SET(SINFO.routines, MAG_MATERIALS))
if (!mag_materials(level, caster, cvict, spellnum, savetype))
return(0);
Just before:
if (IS_SET(SINFO.routines, MAG_DAMAGE))
mag_damage(level, caster, cvict, spellnum, savetype);
Note thats not the way it comes defined in the stock code, i edited the
mag_maerials call to take the same arguments as the others like mag_damage
So the check up there on the return value, exits us if mag_materials
returns false, the char didnt have the materials, thus never going further
to call the spell itself
To add this to a spell, heres an example of a spell_clone define
spello(SPELL_CLONE,
100, 100, 0,
POS_STANDING, TAR_CHAR_ROOM | TAR_SELF_ONLY, FALSE, MAG_MATERIALS
| MAG_SUMMONS);
So we are tackin on the MAG_MATERIALS.
In magic.c I edited the header of mag materials to:
!int mag_materials(int level, struct char_data *ch, struct char_data
! *victim, int spellnum, int savetype) {
+ int verbose = TRUE, extract = TRUE, item0 = 0, item1 = 0, item2 = 0;
struct obj_data *tobj;
struct obj_data *obj0 = NULL, *obj1 = NULL, *obj2 = NULL;
+ switch (spellnum) {
+ case SPELL_CLONE : item0 = 3012;
+ break;
+ default: return(FALSE);
+ break;
+ }
for (tobj = ch->carrying; tobj; tobj = tobj->next_content) {
if ((item0 > 0) && (GET_OBJ_VNUM(tobj) == item0)) {
Note the lines with the + is what I added. So I have a switch where
I add whatever spells i want, and the obj vnums that spell takes
This could all be done many ways.
The reason I edited the def of mag_maerials is otherwise the switch would
have been back in spell_parser and to keep things consistant Id rather
have it over in magic.c like all the other spell types do
*******************************************************************
* Ron Hensley ron@dmv.com *
* Systems Administrator http://www.dmv.com/~ron *
* PGP Key at WWW Page *
* DelMarVa OnLine 749-7898 Ext. 403 *
*******************************************************************
+-----------------------------------------------------------+
| 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