On Tue, 21 Jan 1997, Ghost Shaidan wrote:
- I have put in this...
- for(j=0;j < MAX_SPELL_AFFECT; j++){
- if (obj_proto[i].spell_affect[j].spelltype > 0) {
- fprintf(new_file, "S\n%i %i %i\n",
- obj_proto[i].spell_affect[j].spelltype,obj_proto[i].spell_affect[j].level,
- obj_proto[i].spell_affect[j].percentage);
- }
- }
-
- in the objs_to_file function, and this:
-
- for(i-0;i < MAX_SPELL_AFFECT; i++){
*** hmmmm ^^^ Is this a typo, or actual code? ***
- dest->spell_affect[i].spelltype =
src->spell_affect[i].spelltype;
- dest->spell_affect[i].level = src->spell_affect[i].level;
- dest->spell_affect[i].percentage = src->spell_affect[i].percentage;
- }
-
- in the copy_object function..
-
- and still nothing, I fully admit to being in over my head here, but i am
- trying...i cant seem to think of even a way to test what i am doing wrong?
- any ideas or tips? or references (besides Sammy's generosity?)
Check the comment above in your code. If that's your code, that i-0 would
probably be the culprit. I looked at some code I wrote a long time ago to
put weapon spells in the olc, and your code is identical to mine in
objs_to_file and copy_object. Here's what I've got for oset:
case 67:
if (GET_OBJ_TYPE(OBJ_NEW(ch)) != ITEM_WEAPON) {
send_to_char("You can only set autocasting spells on weapons!\r\n", ch);
return;
}
if(!*val_arg) {
send_to_char("Usage : oset spell '<spell>' <level> <%>\r\n", ch);
send_to_char("Use this to set a weapon's autocast spell.\r\n", ch);
send_to_char("Use oset spell '<spell>' 0 to remove a spell.\r\n", ch);
send_to_char("Example : oset spell 'fireball' 20 10\r\n", ch);
return;
}
s = strtok(val_arg, "'");
if(s == NULL) {
send_to_char("Use ' to enclose the spell name please.\r\n", ch);
return;
}
ex = strtok(NULL, "'");
spell = find_skill_num(s);
if(spell < 1 || spell > MAX_SPELLS) {
send_to_char("Can't find that spell.\r\n", ch);
return;
}
if(!ex) {
send_to_char("Usage : oset spell '<spell>' <level> <%>\r\n", ch);
send_to_char("Use this to set a weapon's autocast spell.\r\n", ch);
send_to_char("Use oset spell '<spell>' 0 to remove a spell.\r\n", ch);
send_to_char("Example : oset spell 'fireball' 20 10\r\n", ch);
return;
}
t1 = atoi(ex);
half_chop(ex, field, val_arg);
t2 = MIN(100, MAX(1, atoi(val_arg)));
for(i = i; i < MAX_SPELL_AFFECT; i++) {
if(OBJ_NEW(ch)->spell_affect[i].spelltype == spell) {
if(t1 == 0) {
OBJ_NEW(ch)->spell_affect[i].spelltype = 0;
send_to_char("Spell removed.\r\n", ch);
return;
}
OBJ_NEW(ch)->spell_affect[i].spelltype = spell;
OBJ_NEW(ch)->spell_affect[i].level = t1;
OBJ_NEW(ch)->spell_affect[i].percentage = t2;
send_to_char("Spell changed.\r\n", ch);
return;
}
if(OBJ_NEW(ch)->spell_affect[i].spelltype == 0)
if(minaff == -1) minaff = i;
}
if(minaff == -1) {
send_to_char("No free spell slots on this object.\r\n", ch);
return;
}
OBJ_NEW(ch)->spell_affect[minaff].spelltype = spell;
OBJ_NEW(ch)->spell_affect[minaff].level = t1;
OBJ_NEW(ch)->spell_affect[minaff].percentage = t2;
SET_BIT(OBJ_NEW(ch)->obj_flags.extra_flags, ITEM_MAGIC);
send_to_char("Spell added.\r\n", ch);
return;
If you take out the check for weapons, you can drop it right in with a
single keyword instead of one for each value. It also checks to make sure
the spell is valid and has the capability to remove spells from an object
:)
Sam
+-----------------------------------------------------------+
| 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