/*** Bless Spell ***/
/*** Created by Eerevann Tokani ***/
/*** Cleanup by Wonderflug ***/
inherit "/std/spells/base.c";
void setup()
{
set_spell_name("Bless");
set_sphere("all");
set_spell_level(1);
set_target_type("one");
set_range(0);
set_line_of_sight_needed(0);
set_help_desc("This spell grants the target a +1 to hit in battle for "
"a limited duration.");
set_gp_cost(2);
set_casting_time(1);
set_rounds( ({ "round1" }) );
allow_on_ghosts();
}
int round1(object caster, mixed target, mixed out_range, int time, int quiet)
{
int resist_value;
int level, duration;
string deity;
if ( wrong_alignment(caster) )
{
punish_align(caster);
return 0;
}
if (!target)
{
tell_object(caster,
"Your spell failed ... there is no one of that name here.\n");
return -1;
}
if (target->query_property("bless_on"))
{
tell_object(caster,
"The target is already under the effects of a Bless.\n");
return -1;
}
if ( !quiet )
{
tell_room(environment(caster),(string)caster->query_cap_name()+
" chants, 'bleiso umanos'.\n", ({target,caster}));
tell_object(target, "You chant, 'bleiso umanos'.\n");
}
if(target == caster)
{
tell_object(caster, "You cast Bless upon yourself.\n");
tell_room(environment(caster),(string)caster->query_cap_name()+
" casts a spell upon "+caster->query_objective()+"self.\n",caster);
}
else
{
tell_object(target, (string)caster->query_cap_name()+
" kneels over you and Blesses you.\n");
tell_object(caster, "You kneel over "+
(string)target->query_cap_name() + " and bless "+
target->query_objective()+".\n");
tell_room(environment(caster),(string)caster->query_cap_name()+
" kneels over "+target->query_cap_name()+" chanting softly.\n",
({target,caster}) );
}
switch ( caster->query_sphere_power("all") )
{
case "minor":
level = 5;
break;
case "major":
level = 15;
break;
default:
level = 10;
}
target->adjust_tmp_tohit_bon(level);
target->add_static_property("bless_on", 1);
duration = 100+((int)caster->query_level()*10);
deity = caster->query_deity();
target->add_timed_property(deity+"bless", 1, duration);
call_out("wear_off", duration, target, level);
return 0;
}
void wear_off(object target, int level)
{
if(target)
{
target->adjust_tmp_tohit_bon(-level);
target->destruct_bless_shadow();
target->remove_static_property("bless_on");
tell_object(target, "%^BOLD%^Your blessing wears off.\n");
}
}