/* code for skill improvement through use */ void improve_skill(struct char_data *ch, int skill, int chance) { int percent = GET_SKILL(ch, skill); int newpercent, max; char skillbuf[MAX_STRING_LENGTH]; char mybuf[256]; max = max_lvl_skill[1][spells[find_skill_num_def(skill)].difficulty][(int) GET_LEVEL(ch)]; if (percent >= max || IS_NPC(ch)) return; if (number(1, (chance * 50)) > (GET_WIS(ch) + GET_INT(ch))) return; newpercent = 1; if (number(1, 120) <= GET_WIS(ch)) newpercent++; if (number(1, 120) <= GET_INT(ch)) newpercent++; percent += newpercent; percent = MIN(percent, max); SET_SKILL(ch, skill, percent); if (newpercent) { sprintf(mybuf, "SKILLIMPROVE: %s improved skill %s, int = %d, wis = %d, improved by = %d, now = %d", GET_NAME(ch), spells[find_skill_num_def(skill)].command, GET_INT(ch), GET_WIS(ch), newpercent, percent); mudlog(mybuf, 'D', COM_IMMORT, TRUE); sprintf(skillbuf, "{RYou feel your skill in {W%s {Rimproving.{x\r\n", spells[find_skill_num_def(skill)].command); send_to_char(skillbuf, ch); } }
/* affect_update: called from comm.c (causes spells to wear off) */ void affect_update(void) { static struct affected_type *af, *next; static struct char_data *i; for (i = character_list; i; i = i->next) for (af = i->affected; af; af = next) { next = af->next; if (af->duration >= 1) af->duration--; else if (af->duration == -1) /* No action */ af->duration = -1; /* GODs only! unlimited */ else { if ((af->type > 0) && (af->type <= MAX_SPELLS)) if (!af->next || (af->next->type != af->type) || (af->next->duration > 0)) if (spells[find_skill_num_def(af->type)].wear_off) { send_to_char(spells[find_skill_num_def(af->type)].wear_off, i); send_to_char("\r\n", i); } if (strcmp(spells[find_skill_num_def(af->type)].command, "wraith form") == 0) { die(i, NULL); } else affect_remove(i, af); } } }
void Obj_to_store(struct obj_data * obj, int objnum, int obj_pos, FILE * fl) { void olc_print_bitvectors(FILE *f, long bitvector, long max); int j; fprintf(fl, "-obj_begin-\n"); fprintf(fl, "-obj_number- %d\n", GET_OBJ_VNUM(obj)); fprintf(fl, "-obj_tnum- %d\n", objnum); fprintf(fl, "-obj_pos- %d\n", obj_pos); if (GET_OBJ_VAL(obj, 0)) { fprintf(fl, "-obj_value0- %d\n", GET_OBJ_VAL(obj, 0)); } if (GET_OBJ_VAL(obj, 1)) { fprintf(fl, "-obj_value1- %d\n", GET_OBJ_VAL(obj, 1)); } if (GET_OBJ_VAL(obj, 2)) { fprintf(fl, "-obj_value2- %d\n", GET_OBJ_VAL(obj, 2)); } if (GET_OBJ_VAL(obj, 3)) { fprintf(fl, "-obj_value3- %d\n", GET_OBJ_VAL(obj, 3)); } if (GET_OBJ_VAL(obj, 4)) { fprintf(fl, "-obj_value4- %d\n", GET_OBJ_VAL(obj, 4)); } if (GET_OBJ_TIMER(obj)) { fprintf(fl, "-obj_timer- %d\n", GET_OBJ_TIMER(obj)); } if (GET_OBJ_EXTRA(obj)) { fprintf(fl, "-obj_extra_flags- "); olc_print_bitvectors(fl, GET_OBJ_EXTRA(obj), NUM_ITEM_FLAGS); fprintf(fl, "\n"); } if (GET_OBJ_BITV(obj)) { fprintf(fl, "-obj_bitvector- "); olc_print_bitvectors(fl, GET_OBJ_BITV(obj), NUM_AFF_FLAGS); fprintf(fl, "\n"); } if (GET_OBJ_BITV2(obj)) { fprintf(fl, "-obj_bitvector- "); olc_print_bitvectors(fl, GET_OBJ_BITV2(obj), NUM_AFF2_FLAGS); fprintf(fl, "\n"); } for (j = 0; j < MAX_OBJ_AFFECT; j++) { if (obj->affected[j].location) { fprintf(fl, "-obj_affect_loc- %d\n", obj->affected[j].location); fprintf(fl, "-obj_affect_mod- %d\n", obj->affected[j].modifier); } } switch (GET_OBJ_TYPE(obj)) { case ITEM_SPELLBOOK: if (GET_OBJ_SPELLLIST(obj)) { for (j = 0; j < GET_OBJ_VAL(obj, 0); j++) { if (GET_OBJ_SPELLLISTNUM(obj, j)) { fprintf(fl, "-obj_spellbook_entry- %s\n", spells[find_skill_num_def(GET_OBJ_SPELLLISTNUM(obj, j))].command); } } } break; case ITEM_POTION: case ITEM_SCROLL: if (GET_OBJ_VAL(obj, 1)) { fprintf(fl, "-obj_spell1- %s\n", spells[find_skill_num_def(GET_OBJ_VAL(obj, 1))].command); } if (GET_OBJ_VAL(obj, 2)) { fprintf(fl, "-obj_spell2- %s\n", spells[find_skill_num_def(GET_OBJ_VAL(obj, 2))].command); } if (GET_OBJ_VAL(obj, 3)) { fprintf(fl, "-obj_spell3- %s\n", spells[find_skill_num_def(GET_OBJ_VAL(obj, 3))].command); } break; case ITEM_WAND: case ITEM_STAFF: if (GET_OBJ_VAL(obj, 1)) { fprintf(fl, "-obj_spell1- %s\n", spells[find_skill_num_def(GET_OBJ_VAL(obj, 1))].command); } break; } fprintf(fl, "-obj_end-\n"); }