version 1.53 | | version 1.54 |
---|
| | |
/* | | /* |
* static char *rcsid_living_c = | | * static char *rcsid_living_c = |
* "$Id: living.c,v 1.53 2003/09/26 05:46:09 mwedel Exp $"; | | * "$Id: living.c,v 1.54 2003/10/27 07:24:13 mwedel Exp $"; |
*/ | | */ |
| | |
/* | | /* |
| | |
/* Container objects are not meant to adjust a players, but other applied | | /* Container objects are not meant to adjust a players, but other applied |
* objects need to make adjustments. | | * objects need to make adjustments. |
* This block should handle all player specific changes | | * This block should handle all player specific changes |
| | * The check for Praying is a bit of a hack - god given bonuses are put |
| | * in the praying skill, and the player should always get those. |
| | * It also means we need to put in additional checks for applied below, |
| | * because the skill shouldn't count against body positions being used |
| | * up, etc. |
*/ | | */ |
if(QUERY_FLAG(tmp,FLAG_APPLIED) && tmp->type!=CONTAINER && tmp->type!=CLOSE_CON) { | | if ((QUERY_FLAG(tmp,FLAG_APPLIED) && tmp->type!=CONTAINER && tmp->type!=CLOSE_CON) || |
| | (tmp->type == SKILL && tmp->subtype == SK_PRAYING)) { |
if(op->type==PLAYER) { | | if(op->type==PLAYER) { |
if (tmp->type == BOW) | | if (tmp->type == BOW) |
op->contr->ranges[range_bow] = tmp; | | op->contr->ranges[range_bow] = tmp; |
| | |
} /* if this is a player */ | | } /* if this is a player */ |
| | |
/* Update slots used for items */ | | /* Update slots used for items */ |
| | if (QUERY_FLAG(tmp,FLAG_APPLIED)) { |
for (i=0; i<NUM_BODY_LOCATIONS; i++) | | for (i=0; i<NUM_BODY_LOCATIONS; i++) |
op->body_used[i] += tmp->body_info[i]; | | op->body_used[i] += tmp->body_info[i]; |
| | } |
| | |
if(tmp->type==SYMPTOM) { | | if(tmp->type==SYMPTOM) { |
speed_reduce_from_disease = tmp->last_sp / 100.0; | | speed_reduce_from_disease = tmp->last_sp / 100.0; |
| | |
/* skills modifying the character -b.t. */ | | /* skills modifying the character -b.t. */ |
/* for all skills and skill granting objects */ | | /* for all skills and skill granting objects */ |
case SKILL: | | case SKILL: |
| | if (!QUERY_FLAG(tmp,FLAG_APPLIED)) break; |
| | |
if (IS_COMBAT_SKILL(tmp->subtype)) wc_obj=tmp; | | if (IS_COMBAT_SKILL(tmp->subtype)) wc_obj=tmp; |
| | |
if (op->chosen_skill) { | | if (op->chosen_skill) { |
| | |
| | |
if(tmp->stats.ac) | | if(tmp->stats.ac) |
ac-=(tmp->stats.ac+tmp->magic); | | ac-=(tmp->stats.ac+tmp->magic); |
if(settings.spell_encumbrance == TRUE && | | if(settings.spell_encumbrance == TRUE && op->type==PLAYER) |
op->type==PLAYER) | | |
op->contr->encumbrance+=(int)3*tmp->weight/1000; | | op->contr->encumbrance+=(int)3*tmp->weight/1000; |
if (op->type == PLAYER) | | if (op->type == PLAYER) |
op->contr->ranges[range_skill] = op; | | op->contr->ranges[range_skill] = op; |
| | |
case ARMOUR: /* Only the best of these three are used: */ | | case ARMOUR: /* Only the best of these three are used: */ |
if(settings.spell_encumbrance == TRUE && op->type==PLAYER) | | if(settings.spell_encumbrance == TRUE && op->type==PLAYER) |
op->contr->encumbrance+=(int)tmp->weight/1000; | | op->contr->encumbrance+=(int)tmp->weight/1000; |
| | |
case BRACERS: | | case BRACERS: |
case FORCE: | | case FORCE: |
if(tmp->stats.wc) { | | if(tmp->stats.wc) { |
| | |
| | |
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.use_permanent_experience) { |
ADD_EXP(op->perm_exp, (float) exp_to_add * (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); |
} | | } |
| | |