Esempio n. 1
0
/* 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);
  }
}
Esempio n. 2
0
/* 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);
      }
    }
}
Esempio n. 3
0
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");
}