Difference for common/living.c from version 1.76 to 1.77


version 1.76 version 1.77
Line 1
 
Line 1
 /*  /*
  * static char *rcsid_living_c =   * static char *rcsid_living_c =
  *   "$Id: living.c,v 1.76 2006/02/09 00:48:36 akirschbaum Exp $";   *   "$Id: living.c,v 1.77 2006/03/07 18:46:23 cavesomething Exp $";
  */   */
   
 /*  /*
Line 1593
 
Line 1593
 {  {
     int p_exp_min;      int p_exp_min;
          
     /* Ensure that our permanent experience minimum is met. */      /* Ensure that our permanent experience minimum is met.
     p_exp_min = (int)(PERM_EXP_MINIMUM_RATIO * (float)(op->stats.exp));       * permenent_exp_ratio is an integer percentage, we divide by 100
        * to get the fraction   */
       p_exp_min = (int)(settings.permanent_exp_ratio * (float)(op->stats.exp)/100);
   
     if (op->perm_exp < p_exp_min)      if (op->perm_exp < p_exp_min)
         op->perm_exp = p_exp_min;          op->perm_exp = p_exp_min;
Line 1660
 
Line 1662
     if (exp_to_add > limit) exp_to_add=limit;      if (exp_to_add > limit) exp_to_add=limit;
   
     ADD_EXP(op->stats.exp, (float) exp_to_add * (skill_obj? skill_obj->expmul:1));      ADD_EXP(op->stats.exp, (float) exp_to_add * (skill_obj? skill_obj->expmul:1));
     if (settings.use_permanent_experience) {      if (settings.permanent_exp_ratio) {
  ADD_EXP(op->perm_exp, (float) exp_to_add * PERM_EXP_GAIN_RATIO * (skill_obj? skill_obj->expmul:1));   ADD_EXP(op->perm_exp, (float) exp_to_add * PERM_EXP_GAIN_RATIO * (skill_obj? skill_obj->expmul:1));
  calc_perm_exp(op);   calc_perm_exp(op);
     }      }
Line 1671
 
Line 1673
  limit=(levels[skill_obj->level+1]-levels[skill_obj->level])/2;   limit=(levels[skill_obj->level+1]-levels[skill_obj->level])/2;
  if (exp_to_add > limit) exp_to_add=limit;   if (exp_to_add > limit) exp_to_add=limit;
  ADD_EXP(skill_obj->stats.exp, exp_to_add);   ADD_EXP(skill_obj->stats.exp, exp_to_add);
  if (settings.use_permanent_experience) {   if (settings.permanent_exp_ratio) {
      skill_obj->perm_exp += exp_to_add * PERM_EXP_GAIN_RATIO;       skill_obj->perm_exp += exp_to_add * PERM_EXP_GAIN_RATIO;
      calc_perm_exp(skill_obj);       calc_perm_exp(skill_obj);
  }   }
Line 1692
 
Line 1694
     sint64 del_exp;      sint64 del_exp;
   
     if (exp > op->stats.exp) exp = op->stats.exp;      if (exp > op->stats.exp) exp = op->stats.exp;
     if (settings.use_permanent_experience) {      if (settings.permanent_exp_ratio) {
  del_exp = (op->stats.exp - op->perm_exp) * PERM_EXP_MAX_LOSS_RATIO;   del_exp = (op->stats.exp - op->perm_exp) * PERM_EXP_MAX_LOSS_RATIO;
  if (del_exp < 0) del_exp = 0;   if (del_exp < 0) del_exp = 0;
  if (exp > del_exp) exp=del_exp;   if (exp > del_exp) exp=del_exp;
Line 1813
 
Line 1815
     }      }
 }  }
   
 /* Applies a death penalty experience.  20% or 3 levels, whichever is  /* Applies a death penalty experience, the size of this is defined by the
  *  less experience lost.    * settings death_penalty_percentage and death_penalty_levels, and by the
    * amount of permenent experience, whichever gives the lowest loss.
  */   */
   
 void apply_death_exp_penalty(object *op) {  void apply_death_exp_penalty(object *op) {
     object *tmp;      object *tmp;
     sint64 loss;      sint64 loss;
     sint64 loss_20p;  /* 20 percent experience loss */      sint64 percentage_loss;  /* defined by the setting 'death_penalty_percent' */
     sint64 loss_3l;   /* 3 level experience loss */      sint64 level_loss;   /* defined by the setting 'death_penalty_levels */
   
     for(tmp=op->inv;tmp;tmp=tmp->below)      for(tmp=op->inv;tmp;tmp=tmp->below)
  if(tmp->type==SKILL && tmp->stats.exp) {    if(tmp->type==SKILL && tmp->stats.exp) {
   
      loss_20p = tmp->stats.exp * 0.20;       percentage_loss = tmp->stats.exp * settings.death_penalty_ratio/100;
      loss_3l = tmp->stats.exp - levels[MAX(0,tmp->level -3)];       level_loss = tmp->stats.exp - levels[MAX(0,tmp->level - settings.death_penalty_level)];
   
      /* With the revised exp system, you can get cases where       /* With the revised exp system, you can get cases where
       * losing 3 levels would still require that you have more        * losing several levels would still require that you have more
       * exp than you current have - this is true if the levels        * exp than you currently have - this is true if the levels
       * tables is a lot harder.        * tables is a lot harder.
       */        */
      if (loss_3l < 0) loss_3l = 0;       if (level_loss < 0) level_loss = 0;
   
      loss = check_exp_loss(tmp, MIN(loss_3l, loss_20p));       loss = check_exp_loss(tmp, MIN(level_loss, percentage_loss));
   
      tmp->stats.exp -= loss;       tmp->stats.exp -= loss;
      player_lvl_adj(op,tmp);       player_lvl_adj(op,tmp);
  }   }
   
     loss_20p = op->stats.exp * 0.20;      percentage_loss = op->stats.exp * settings.death_penalty_ratio/100;
     loss_3l = op->stats.exp - levels[MAX(0,op->level -3)];      level_loss = op->stats.exp - levels[MAX(0,op->level - settings.death_penalty_level)];
     if (loss_3l < 0) loss_3l = 0;      if (level_loss < 0) level_loss = 0;
     loss = check_exp_loss(op, MIN(loss_3l, loss_20p));      loss = check_exp_loss(op, MIN(level_loss, percentage_loss));
   
     op->stats.exp -= loss;      op->stats.exp -= loss;
     player_lvl_adj(op,NULL);      player_lvl_adj(op,NULL);


Legend:
line(s) removed in v.1.76 
line(s) changed
 line(s) added in v.1.77

File made using version 1.98 of cvs2html by leaf at 2011-07-21 17:08