#include "include.h"
void do_battlepaint(CHAR_DATA *ch,char *argument)
{
AFFECT_DATA af;
if (cabal_down(ch,CABAL_RAVAGER))
return;
if ( (get_skill(ch,gsn_battlepaint) == 0 )
|| ch->level < skill_table[gsn_battlepaint].skill_level[ch->class])
{
send_to_char("Huh?\n\r",ch);
return;
}
if (ch->mana < 25)
{
send_to_char("You don't have the mana.\n\r",ch);
return;
}
if (is_affected(ch,gsn_battlepaint))
{
send_to_char("Your face is already covered with battle paint.\n\r",ch);
return;
}
if (number_percent() > ch->pcdata->learned[gsn_battlepaint])
{
send_to_char("You fail to coat your face with battlepaint.\n\r",ch);
act("$n fumbles with messily with a pouch of paint.",ch,0,0,TO_ROOM);
ch->mana -= 15;
check_improve(ch,gsn_battlepaint,FALSE,2);
return;
}
ch->mana -= 25;
init_affect(&af);
af.where = TO_AFFECTS;
af.type = gsn_battlepaint;
af.level = ch->level;
af.duration = ch->level;
if (ch->level <= 10)
{
af.modifier = 2;
}
else if (ch->level <= 20)
{
af.modifier = 4;
}
else if (ch->level <= 30)
{
af.modifier = 6;
}
else if (ch->level <= 40)
{
af.modifier = 8;
}
else if (ch->level <= 50)
{
af.modifier = 10;
}
else
{
af.modifier = 12;
}
af.bitvector = 0;
af.aftype = AFT_SKILL;
af.location = APPLY_HITROLL;
affect_to_char(ch,&af);
af.location = APPLY_DAMROLL;
affect_to_char(ch,&af);
af.modifier = ch->level * 2;
af.location = APPLY_HIT;
affect_to_char(ch,&af);
send_to_char("You paint your face with blue and white battle paint.\n\r", ch );
act("$n paints $s face with blue and white battle paint.",ch,0,0,TO_ROOM);
return;
}
void do_resist(CHAR_DATA *ch, char *argument)
{
AFFECT_DATA af;
int chance;
if (cabal_down(ch,CABAL_RAVAGER))
return;
if ( (chance = get_skill(ch,gsn_ressist)) == 0
|| (ch->level < skill_table[gsn_ressist].skill_level[ch->class]))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (is_affected(ch,gsn_ressist))
{
send_to_char("You are already resisting.\n\r",ch);
return;
}
if (ch->mana < 50)
{
send_to_char("You don't have the mana.\n\r",ch);
return;
}
if (number_percent() > ch->pcdata->learned[gsn_ressist])
{
ch->mana -= 25;
send_to_char("You try to resist, but fail.\n\r",ch);
return;
}
init_affect(&af);
af.where = TO_AFFECTS;
af.duration = (ch->level)/10;
af.location = 0;
af.modifier = 0;
af.level = ch->level;
af.type = gsn_ressist;
af.aftype = AFT_POWER;
affect_to_char(ch,&af);
af.aftype = AFT_POWER;
af.modifier = -ch->level / 5;
af.location = APPLY_SAVES;
affect_to_char(ch,&af);
send_to_char("You focus on resisting physical and magical attacks.\n\r", ch );
act("$n's face becomes clouded as $s focuses deeply.",ch,NULL,NULL,TO_ROOM);
ch->mana -= 50;
return;
}
void do_claymore(CHAR_DATA *ch, char *argument)
{
AFFECT_DATA af;
OBJ_DATA *claymore;
int dice_1, dice_2, chance;
if (cabal_down(ch,CABAL_RAVAGER))
return;
if ( (chance = get_skill(ch,gsn_claymore)) == 0
|| (ch->level < skill_table[gsn_claymore].skill_level[ch->class]))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (is_affected(ch,gsn_claymore))
{
send_to_char("You already have forged a claymore.\n\r",ch);
return;
}
if (ch->mana < 100)
{
send_to_char("You don't have the mana.\n\r",ch);
return;
}
if (number_percent() > ch->pcdata->learned[gsn_claymore])
{
ch->mana -= 50;
send_to_char("You try to forge a claymore, but fail.\n\r",ch);
return;
}
if (ch->level < 25)
{
dice_1 = 5; dice_2 = 7;
}
else if (ch->level < 30)
{
dice_1 = 7; dice_2 = 6;
}
else if (ch->level < 35)
{
dice_1 = 5; dice_2 = 9;
}
else if (ch->level < 40)
{
dice_1 = 5; dice_2 = 10;
}
else if (ch->level < 45)
{
dice_1 = 8; dice_2 = 6;
}
else
{
dice_1 = 7; dice_2 = 8;
}
claymore = create_object(get_obj_index(OBJ_VNUM_CLAYMORE), ch->level);
claymore->timer = ch->level * 5;
claymore->value[1] = dice_1;
claymore->value[2] = dice_2;
claymore->level = ch->level;
init_affect(&af);
af.where = TO_OBJECT;
af.aftype = AFT_SPELL;
af.type = gsn_claymore;
af.level = ch->level;
af.duration = -1;
af.location = APPLY_HITROLL;
af.modifier = ch->level / 4;
af.bitvector = 0;
affect_to_obj(claymore,&af);
af.location = APPLY_DAMROLL;
affect_to_obj(claymore,&af);
obj_to_char(claymore,ch);
init_affect(&af);
af.where = TO_AFFECTS;
af.aftype = AFT_POWER;
af.type = gsn_claymore;
af.duration = 60;
af.location = 0;
af.bitvector = 0;
af.modifier = 0;
af.level = ch->level;
affect_to_char(ch,&af);
act("$n is blessed by $s clans deity with a beautiful $p!",ch ,claymore,0,TO_ROOM);
act("You are blessed by your clan deity with a beautiful $p!",ch, claymore,0,TO_CHAR);
check_improve(ch,gsn_claymore,TRUE,1);
return;
}
void do_firstaid(CHAR_DATA *ch,char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
AFFECT_DATA af;
if (cabal_down(ch,CABAL_RAVAGER))
return;
one_argument(argument,arg);
if ( (get_skill(ch,gsn_firstaid) == 0)
|| (ch->level < skill_table[gsn_firstaid].skill_level[ch->class]) )
{
send_to_char("Huh?\n\r",ch);
return;
}
if (is_affected(ch,gsn_firstaid))
{
send_to_char("You can't apply more aid yet.\n\r",ch);
return;
}
if (ch->mana < 50)
{
send_to_char("You don't have the mana.\n\r",ch);
return;
}
if (arg[0] == '\0')
victim = ch;
else if ((victim = get_char_room(ch,arg)) == NULL)
{
send_to_char("They aren't here.\n\r",ch);
return;
}
if (number_percent() > ch->pcdata->learned[gsn_firstaid])
{
act("You fail to apply battle dressing to $N's wounds.",ch,0,victim,TO_CHAR);
act("$n fumbles with $s bandages but fails to use them effectively.",ch,0,0,TO_ROOM);
ch->mana -= 25;
check_improve(ch,gsn_firstaid,FALSE,3);
return;
}
ch->mana -= 50;
if (victim != ch)
{
act("$n applies bandages to $N's battle wounds.",ch,0,victim,TO_NOTVICT);
act("You apply bandages to $N's battle wounds.",ch,0,victim,TO_CHAR);
act("$n applies bandages to your battle wounds.",ch,0,victim,TO_VICT);
}
else
{
act("$n applies bandages to $mself.",ch,0,0,TO_ROOM);
send_to_char("You apply battle dressing to yourself.\n\r",ch);
}
send_to_char("You feel better.\n\r",victim);
victim->hit = UMIN(victim->hit + (4*ch->level), victim->max_hit);
if (number_percent() < 60)
{
if (IS_AFFECTED(victim,AFF_PLAGUE))
{
affect_strip(victim,gsn_plague);
act("The sores on $n's body vanish.\n\r",victim,0,0,TO_ROOM);
send_to_char("The sores on your body vanish.\n\r",victim);
}
}
if (number_percent() < 60)
{
if (is_affected(victim, gsn_blindness))
{
affect_strip(victim, gsn_blindness);
send_to_char("Your vision returns!\n\r",victim);
}
}
if (number_percent() < 60)
{
if (is_affected(victim,gsn_poison))
{
affect_strip(victim,gsn_poison);
send_to_char("A warm feeling goes through your body.\n\r",victim);
act("$n looks better.",victim,0,0,TO_ROOM);
}
if (is_affected(victim,gsn_poison_dust))
{
affect_strip(victim,gsn_poison_dust);
send_to_char("The dust in your eyes is cleaned out.\n\r",victim);
act("The dust in $n's eyes looks cleaned out.",victim,0,0,TO_ROOM);
}
}
check_improve(ch,gsn_firstaid,TRUE,3);
init_affect(&af);
af.where = TO_AFFECTS;
af.type = gsn_bandage;
af.location = 0;
af.duration = 5;
af.modifier = 0;
af.bitvector = 0;
af.level = ch->level;
af.aftype = AFT_SKILL;
affect_to_char(ch,&af);
return;
}
void do_swing(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim;
OBJ_DATA *wield;
int check_chstr = get_curr_stat(ch,STAT_STR);
int check_chdex = get_curr_stat(ch,STAT_DEX);
int max_hit, i, chance, dam;
if (cabal_down(ch,CABAL_RAVAGER))
return;
if ( (chance = get_skill(ch,gsn_swing)) == 0
|| (ch->level < skill_table[gsn_swing].skill_level[ch->class]))
{
send_to_char("Huh?\n\r",ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You aren't fighting anyone.\n\r",ch);
return;
}
wield = get_eq_char(ch,WEAR_WIELD);
if ( (wield == NULL)
&& (get_eq_char(ch,WEAR_DUAL_WIELD) == NULL) )
{
send_to_char("You must be wielding a weapon to swing.\n\r", ch );
return;
}
if (check_chstr == 25)
{
dam = dice(wield->value[1],wield->value[2]) * 5;
}
else if (check_chstr == 23)
{
dam = dice(wield->value[1],wield->value[2]) * 2 ;
}
else if (check_chstr < 23)
{
dam = dice(wield->value[1],wield->value[2]) * 1.5;
}
else
{
dam = dice(wield->value[1],wield->value[2]) + 30;
}
if (check_chdex == 25)
{
max_hit = 4;
}
else if (check_chdex == 24)
{
max_hit = 3;
}
else if (check_chdex < 24)
{
max_hit = 2;
}
else
{
max_hit = 1;
}
for ( i=0; i < max_hit; i++ )
{
act("$n violently swings out with $s weapon!",ch,0,victim,TO_NOTVICT);
act("You violently swing out at $N with your weapon!",ch,0,victim,TO_CHAR);
act("$n violently swings out at you with $s weapon!",ch,0,victim,TO_VICT);
damage( ch, victim, dam, gsn_swing,DAM_NONE,TRUE);
}
check_improve(ch,gsn_swing,TRUE,1);
WAIT_STATE(ch,2*PULSE_VIOLENCE);
return;
}