ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/spell_util.C
(Generate patch)

Comparing deliantra/server/server/spell_util.C (file contents):
Revision 1.64 by root, Thu Mar 13 12:20:52 2008 UTC vs.
Revision 1.65 by root, Sat Mar 15 13:33:40 2008 UTC

183int 183int
184caster_level (object *caster, object *spell) 184caster_level (object *caster, object *spell)
185{ 185{
186 int level = caster->level; 186 int level = caster->level;
187 187
188 /* If this is a player, try to find the matching skill */ 188 /* if a rod is fired by a player, take the use_magic_item skill in consideration. */
189 if (caster->type == PLAYER && spell->skill) 189 if (caster->type == ROD && caster->env && caster->env->type == PLAYER)
190 {
191 object *skill = find_skill_by_number (caster->env, SK_USE_MAGIC_ITEM);
192 int sk_level = skill ? skill->level : 1;
193
194 level = MIN (level, sk_level + level / 10 + 1);
195 }
196 else if (caster->type == PLAYER && spell->skill) /* If this is a player, try to find the matching skill */
190 for (int i = 0; i < NUM_SKILLS; i++) 197 for (int i = 0; i < NUM_SKILLS; i++)
191 if (caster->contr->last_skill_ob[i] && caster->contr->last_skill_ob[i]->skill == spell->skill) 198 if (caster->contr->last_skill_ob[i] && caster->contr->last_skill_ob[i]->skill == spell->skill)
192 { 199 {
193 level = caster->contr->last_skill_ob[i]->level; 200 level = caster->contr->last_skill_ob[i]->level;
194 break; 201 break;
195 } 202 }
196
197 /* if a rod is fired by a player, take the use_magic_item skill in consideration. */
198 if (caster->type == ROD && caster->env && caster->env->type == PLAYER)
199 {
200 object *skill = find_skill_by_number (caster->env, SK_USE_MAGIC_ITEM);
201 int sk_level = skill ? skill->level : 1;
202
203 level = MIN (level, sk_level + level / 10 + 1);
204 }
205 203
206 /* Got valid caster level. Now adjust for attunement */ 204 /* Got valid caster level. Now adjust for attunement */
207 level += caster->path_repelled & spell->path_attuned ? -8 : 0; 205 level += caster->path_repelled & spell->path_attuned ? -8 : 0;
208 level += caster->path_attuned & spell->path_attuned ? +8 : 0; 206 level += caster->path_attuned & spell->path_attuned ? +8 : 0;
209 207
257 else 255 else
258 { 256 {
259 sp = (int) (spell->stats.sp * PATH_SP_MULT (caster, spell)); 257 sp = (int) (spell->stats.sp * PATH_SP_MULT (caster, spell));
260 if (spell->stats.sp && !sp) 258 if (spell->stats.sp && !sp)
261 sp = 1; 259 sp = 1;
260
262 grace = (int) (spell->stats.grace * PATH_SP_MULT (caster, spell)); 261 grace = (int) (spell->stats.grace * PATH_SP_MULT (caster, spell));
263 if (spell->stats.grace && !grace) 262 if (spell->stats.grace && !grace)
264 grace = 1; 263 grace = 1;
265 } 264 }
266 265

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines