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.42 by root, Mon Apr 30 04:25:30 2007 UTC vs.
Revision 1.45 by root, Thu May 17 00:33:29 2007 UTC

627 ****************************************************************************/ 627 ****************************************************************************/
628void 628void
629regenerate_rod (object *rod) 629regenerate_rod (object *rod)
630{ 630{
631 if (rod->stats.hp < rod->stats.maxhp) 631 if (rod->stats.hp < rod->stats.maxhp)
632 { 632 rod->stats.hp = min (rod->stats.maxhp, rod->stats.hp + 1 + rod->stats.maxhp / 10);
633 rod->stats.hp += 1 + rod->stats.maxhp / 10;
634
635 if (rod->stats.hp > rod->stats.maxhp)
636 rod->stats.hp = rod->stats.maxhp;
637 }
638} 633}
639
640 634
641void 635void
642drain_rod_charge (object *rod) 636drain_rod_charge (object *rod)
643{ 637{
644 rod->stats.hp -= SP_level_spellpoint_cost (rod, rod->inv, SPELL_HIGHEST); 638 rod->stats.hp -= SP_level_spellpoint_cost (rod, rod->inv, SPELL_HIGHEST);
1087 * at least process that code. 1081 * at least process that code.
1088 */ 1082 */
1089 if (op->type == PLAYER && op == caster) 1083 if (op->type == PLAYER && op == caster)
1090 { 1084 {
1091 cast_level = caster_level (caster, spell_ob); 1085 cast_level = caster_level (caster, spell_ob);
1086
1092 if (spell_ob->skill) 1087 if (spell_ob->skill)
1093 { 1088 {
1094 skill = find_skill_by_name (op, spell_ob->skill); 1089 skill = find_skill_by_name (op, spell_ob->skill);
1090
1095 if (!skill) 1091 if (!skill)
1096 { 1092 {
1097 new_draw_info_format (NDI_UNIQUE, 0, op, "You need the skill %s to cast %s.", &spell_ob->skill, &spell_ob->name); 1093 new_draw_info_format (NDI_UNIQUE, 0, op, "You need the skill %s to cast %s.", &spell_ob->skill, &spell_ob->name);
1098 return 0; 1094 return 0;
1099 } 1095 }
1096
1100 if (min_casting_level (op, spell_ob) > cast_level && !QUERY_FLAG (op, FLAG_WIZ)) 1097 if (min_casting_level (op, spell_ob) > cast_level && !QUERY_FLAG (op, FLAG_WIZ))
1101 { 1098 {
1102 new_draw_info (NDI_UNIQUE, 0, op, "You lack enough skill to cast that spell."); 1099 new_draw_info (NDI_UNIQUE, 0, op, "You lack enough skill to cast that spell.");
1103 return 0; 1100 return 0;
1104 } 1101 }
1105 } 1102 }
1103
1106 /* If the caster is the wiz, they don't ever fail, and don't have 1104 /* If the caster is the wiz, they don't ever fail, and don't have
1107 * to have sufficient grace/mana. 1105 * to have sufficient grace/mana.
1108 */ 1106 */
1109 if (!QUERY_FLAG (op, FLAG_WIZ)) 1107 if (!QUERY_FLAG (op, FLAG_WIZ))
1110 { 1108 {
1185 if (op->type != PLAYER) 1183 if (op->type != PLAYER)
1186 return 0; 1184 return 0;
1187 1185
1188 if ((mflags & P_NO_CLERIC) && spell_ob->stats.grace) 1186 if ((mflags & P_NO_CLERIC) && spell_ob->stats.grace)
1189 new_draw_info_format (NDI_UNIQUE, 0, op, "This ground is unholy! %s ignores you.", godname); 1187 new_draw_info_format (NDI_UNIQUE, 0, op, "This ground is unholy! %s ignores you.", godname);
1188 else if (object *item = op->contr->ranged_ob)
1189 {
1190 if (item->type == SPELL)
1191 new_draw_info (NDI_UNIQUE, 0, op, "Something blocks your spellcasting.");
1192 else if (item->type == SCROLL)
1193 new_draw_info (NDI_UNIQUE, 0, op, "Something blocks the magic of your scroll.");
1194 else
1195 new_draw_info (NDI_UNIQUE, 0, op, "Something blocks the magic of your item.");
1196 }
1190 else 1197 else
1191 new_draw_info (NDI_UNIQUE, 0, op, "Something blocks the spell!"); 1198 new_draw_info (NDI_UNIQUE, 0, op, "Something blocks the spell!");
1192 1199
1193 return 0; 1200 return 0;
1194 } 1201 }
1201 op->spell = spell_ob; 1208 op->spell = spell_ob;
1202 /* put the stringarg into the object struct so that when the 1209 /* put the stringarg into the object struct so that when the
1203 * spell is actually cast, it knows about the stringarg. 1210 * spell is actually cast, it knows about the stringarg.
1204 * necessary for the invoke command spells. 1211 * necessary for the invoke command spells.
1205 */ 1212 */
1206 if (stringarg)
1207 {
1208 op->spellarg = strdup (stringarg); 1213 op->spellarg = stringarg ? strdup (stringarg) : 0;
1209 } 1214
1210 else
1211 op->spellarg = NULL;
1212 return 0; 1215 return 0;
1213 } 1216 }
1214 else if (op->casting_time != 0) 1217 else if (op->casting_time != 0)
1215 { 1218 {
1216 if (op->type == PLAYER) 1219 if (op->type == PLAYER)
1217 new_draw_info (NDI_UNIQUE, 0, op, "You are casting!"); 1220 new_draw_info (NDI_UNIQUE, 0, op, "You are casting!");
1221
1218 return 0; 1222 return 0;
1219 } 1223 }
1220 else 1224 else
1221 { /* casting_time == 0 */ 1225 { /* casting_time == 0 */
1222 op->casting_time = -1; 1226 op->casting_time = -1;
1242 */ 1246 */
1243 if ((spell_ob->casting_time > 0) && op->speed_left < -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * FABS (op->speed)) 1247 if ((spell_ob->casting_time > 0) && op->speed_left < -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * FABS (op->speed))
1244 op->speed_left = -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * FABS (op->speed); 1248 op->speed_left = -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * FABS (op->speed);
1245 } 1249 }
1246 else if (caster->type == WAND || caster->type == HORN || caster->type == ROD || caster->type == POTION || caster->type == SCROLL) 1250 else if (caster->type == WAND || caster->type == HORN || caster->type == ROD || caster->type == POTION || caster->type == SCROLL)
1247 {
1248 op->speed_left -= 2 * FABS (op->speed); 1251 op->speed_left -= 2 * FABS (op->speed);
1249 }
1250 } 1252 }
1251 1253
1252 if (op->type == PLAYER && op == caster) 1254 if (op->type == PLAYER && op == caster)
1253 { 1255 {
1254 op->stats.grace -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_GRACE); 1256 op->stats.grace -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_GRACE);
1265 if (!skill) 1267 if (!skill)
1266 { 1268 {
1267 new_draw_info_format (NDI_UNIQUE, 0, op, "You lack the skill %s to use the %s", &caster->skill, query_name (caster)); 1269 new_draw_info_format (NDI_UNIQUE, 0, op, "You lack the skill %s to use the %s", &caster->skill, query_name (caster));
1268 return 0; 1270 return 0;
1269 } 1271 }
1272
1270 change_skill (op, skill, 0); /* needed for proper exp credit */ 1273 change_skill (op, skill, 0); /* needed for proper exp credit */
1271 } 1274 }
1272 1275
1273 switch (spell_ob->subtype) 1276 switch (spell_ob->subtype)
1274 { 1277 {
1275 /* The order of case statements is same as the order they show up 1278 /* The order of case statements is same as the order they show up
1276 * in in spells.h. 1279 * in in spells.h.
1277 */ 1280 */
1278 case SP_RAISE_DEAD: 1281 case SP_RAISE_DEAD:
1279 success = cast_raise_dead_spell (op, caster, spell_ob, dir, stringarg); 1282 success = cast_raise_dead_spell (op, caster, spell_ob, dir, stringarg);
1280 break; 1283 break;
1281 1284
1282 case SP_RUNE: 1285 case SP_RUNE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines