/* Battle Rager Class by Zaphonite and Xkilla */
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "rok.h"
#include "player.h"
#include "battlerager.h"
/*
*Local Functions
*/
void do_unfrenzy( CHAR_DATA *ch, char *argument )
{
if ( IS_NPC(ch) )
return;
if (IS_CLASS(ch, CLASS_BATTLERAGER))
{
send_to_char("You take a deep breath and calm yourself.\n\r",ch);
act("$n takes a deep breath and tries to calm $mself.",ch,NULL,NULL,TO_ROOM);
ch->pcdata->stats[UNI_RAGE] = 0;
WAIT_STATE(ch,12);
return;
}
send_to_char("But you are not in crinos form!\n\r",ch);
return;
}
void do_frenzy( CHAR_DATA *ch, char *argument )
{
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BATTLERAGER) && (ch, BAT_RAGE))
{
send_to_char("Huh?\n\r", ch);
return;
}
if ( IS_CLASS(ch, CLASS_BATTLERAGER) && (ch, BAT_RAGE))
{
if ( ch->pcdata->stats[UNI_RAGE] >= 10 )
{
send_to_char("But you have already frenzied.\n\r",ch);
return;
}
if ( ch->move < 100 )
{
send_to_char("But you don't have enough move to frenzy.\n\r", ch);
return;
}
send_to_char("You start to frenzy.\n\r",ch);
act("$n is starting to frenzy.",ch,NULL,NULL,TO_ROOM);
ch->pcdata->stats[UNI_RAGE] += 250;
ch->move -= 100;
WAIT_STATE(ch,12);
return;
}
else if ((ch, BAT_RAGE) && (ch, BAT_ALE))
{
if ( ch->pcdata->stats[UNI_RAGE] >= 10 )
{
send_to_char("But you have already frenzied.\n\r",ch);
return;
}
if ( ch->move < 100 )
{
send_to_char("But you don't have enough move to frenzy.\n\r", ch);
return;
}
send_to_char("You start to frenzy.\n\r",ch);
act("$n is starting to frenzy.",ch,NULL,NULL,TO_ROOM);
ch->pcdata->stats[UNI_RAGE] += 250;
ch->move -= 100;
WAIT_STATE(ch,12);
return;
}
else
send_to_char("But you are already in the state of Michi.\n\r",ch);
return;
}
void do_bragertrain( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
int inpart = 0;
int cost = 0;
smash_tilde(argument);
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BATTLERAGER))
{
send_to_char("Huh?\n\r", ch);
return;
}
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax: BRagertrain <person> <power> \n\r", ch);
send_to_char("Speed (15000), Toughness (15000), Strength (20000), Ale (10000), Frenzy (10000),\n\r",ch);
send_to_char("Weaponskill (25000), BRagerRun (20000), BRagerSight (15000), BRagerFrenzy (15000).\n\r",ch);
return;
}
if ( ( victim = get_char_room( ch, arg1 ) ) == NULL )
{
send_to_char( "They arent here.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Not on NPC's.\n\r", ch );
return;
}
if (!IS_CLASS(victim, CLASS_BATTLERAGER)) {
send_to_char("Only on battleragers.\n\r", ch );
return;}
if (!str_cmp(arg2,"toughness"))
{inpart = BAT_TOUGHNESS; cost = 15000;}
else if (!str_cmp(arg2,"strength"))
{inpart = BAT_STRENGTH; cost = 20000;}
else if (!str_cmp(arg2,"ale"))
{inpart = BAT_ALE; cost = 10000;}
else if (!str_cmp(arg2,"frenzy"))
{inpart = BAT_RAGE; cost = 10000;}
else if (!str_cmp(arg2,"weaponskill"))
{inpart = BAT_WEAPONSKILL; cost = 25000;}
else if (!str_cmp(arg2,"bragersight"))
{inpart = BAT_RAGERSIGHT; cost = 15000;}
else if (!str_cmp(arg2,"bragerfrenzy"))
{inpart = BAT_RAGERFRENZY; cost = 15000;}
else if (!str_cmp(arg2,"bragerrun"))
{inpart = BAT_RAGERRUN; cost = 20000;}
else if (!str_cmp(arg2,"speed"))
{inpart = BAT_SPEED; cost = 15000;}
else
{
send_to_char("Please specify a power:\n\r",ch);
send_to_char("Speed (15000), Toughness (15000), Strength (20000), Ale (10000), Rage (10000),\n\r",ch);
send_to_char("Weaponskill (25000),RagerRun (20000), RagerSight (15000), RagerFrenzy (15000).\n\r",ch);
return;
}
if (IS_SET(victim->pcdata->powers[1], inpart))
{
send_to_char("They have already got that power.\n\r",ch);
return;
}
if (ch->pcdata->stats[BATTLE_TOTAL] < cost ||
ch->pcdata->stats[BATTLE_CURRENT] < cost)
{
send_to_char("You have insufficient rager power to train that power.\n\r",ch);
return;
}
SET_BIT(victim->pcdata->powers[1], inpart);
ch->pcdata->stats[BATTLE_CURRENT] -= cost;
if (victim != ch) send_to_char("You have been trained in a battle rager power!.\n\r",victim);
send_to_char("Done.\n\r",ch);
if (victim != ch) save_char_obj(ch);
save_char_obj(victim);
return;
}
void do_bragersight( CHAR_DATA *ch, char *argument )
{
if ( IS_NPC(ch) )
return;
if (IS_CLASS(ch, CLASS_BATTLERAGER))
{
if (!( ch, BAT_RAGERSIGHT))
{
send_to_char("You havent been trained to unleash your wild senses.\n\r",ch);
return;
}
}
if ( IS_SET(ch->act, PLR_HOLYLIGHT) )
{
REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
send_to_char( "Your wild senses return to normal.\n\r", ch );
}
else
{
SET_BIT(ch->act, PLR_HOLYLIGHT);
send_to_char( "Your wild senses increase.\n\r", ch );
}
return;
}
void do_bragerrun( CHAR_DATA *ch, char *argument )
{
char arg [MAX_INPUT_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BATTLERAGER))
{
send_to_char("Huh?.\n\r",ch);
return;
}
if (IS_CLASS(ch, CLASS_BATTLERAGER))
{
if (!( ch, BAT_RAGERRUN))
{
send_to_char("You havent been trained to RagerRun.\n\r",ch);
return;
}
}
if ( arg[0] == '\0' )
{
send_to_char("Run to who?.\n\r",ch);
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char( "They are not here.\n\r",ch);
return;
}
if ( victim == ch ) {
send_to_char( "You run into yourself.\n\r",
ch);
return; }
if (victim->level != LEVEL_AVATAR ||
!IS_CLASS(victim, CLASS_BATTLERAGER))
{
send_to_char( "Hmm... You can't seem to run to
them.\n\r",ch );
return;
}
if (victim->in_room == NULL)
{
send_to_char( "You can't run to them.\n\r",ch);
return;
}
send_to_char("You run out of the room.\n\r",ch);
act("$n runs out of the room.",ch,NULL,NULL,TO_ROOM);
char_from_room(ch);
char_to_room(ch,victim->in_room);
do_look(ch,"");
send_to_char("You run into the room.\n\r",ch);
act("$n runs into the room.",ch,NULL,NULL,TO_ROOM);
return;
}
void do_bragerarmour( CHAR_DATA *ch, char *argument )
{
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
int vnum = 0;
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BATTLERAGER))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (arg[0] == '\0')
{
send_to_char("Command: bragerarmour <piece>.\n\r", ch);
return;
}
if (!str_cmp(arg,"ring" )) vnum = 29621;
else if (!str_cmp(arg,"collar" )) vnum = 29622;
else if (!str_cmp(arg,"plate" )) vnum = 29612;
else if (!str_cmp(arg,"helmet" )) vnum = 29613;
else if (!str_cmp(arg,"leggings" )) vnum = 29616;
else if (!str_cmp(arg,"boots" )) vnum = 29614;
else if (!str_cmp(arg,"gauntlets")) vnum = 29615;
else if (!str_cmp(arg,"armguards")) vnum = 29620;
else if (!str_cmp(arg,"cloak" )) vnum = 29619;
else if (!str_cmp(arg,"belt" )) vnum = 29617;
else if (!str_cmp(arg,"bracer" )) vnum = 29618;
else if (!str_cmp(arg,"mask" )) vnum = 29623;
else if (!str_cmp(arg,"spear" )) vnum = 29611;
else
{
send_to_char("Please specify what BattleRager armor you wish to make: Ring Collar\n\rPlate Helmet Leggings Boots
Gauntlets Sleeves Cape Belt Bracer Visor.\n\r",ch);
return;
}
if ( (ch->pcdata->stats[BATTLE_TOTAL] < 20000 || ch->pcdata->stats[BATTLE_CURRENT] < 20000))
{
send_to_char("It costs 20000 rager power points to create BattleRager armour.\n\r",ch);
return;
}
if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
{
send_to_char("Missing object, please inform KaVir.\n\r",ch);
return;
}
ch->pcdata->stats[BATTLE_CURRENT] -= 20000;
ch->pcdata->stats[BATTLE_TOTAL] -= 20000;
obj = create_object(pObjIndex, 50);
obj_to_char(obj, ch);
act("$p appears in your hands in a swirl of chaos.",ch,obj,NULL,TO_CHAR);
act("$p appears in $n's hands in a swirl of chaos.",ch,obj,NULL,TO_ROOM);
return;
}
void do_clanstats( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char lord[MAX_INPUT_LENGTH];
CHAR_DATA *gch;
if (IS_NPC(ch)) return;
if (ch->pcdata->stats[UNI_GEN] < 3)
strcpy(lord,ch->name);
else strcpy(lord,ch->lord);
sprintf( buf, "Clan: %s \n\r", ch->clan );
send_to_char( buf, ch );
send_to_char("[ Name ] [ Hits ] [ Mana ] [ Move ] [ Exp ] [ Power ]\n\r", ch );
for ( gch = char_list; gch != NULL; gch = gch->next )
{
if ( IS_NPC(gch) ) continue;
if ( !str_cmp(ch->lord,lord) || !str_cmp(ch->name,lord))
{
sprintf( buf,
"[%-16s] [%-6d] [%-6d] [%-6d] [%-9d] [ %-7d ]\n\r",
capitalize( gch->name ),
gch->hit,gch->mana,gch->move,
gch->exp,gch->pcdata->stats[DEMON_POWER]);
send_to_char( buf, ch );
}
}
return;
}
void do_rclass( CHAR_DATA *ch, char *argument )
{
char buf [MAX_INPUT_LENGTH];
CHAR_DATA *victim;
char arg [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BATTLERAGER) || ch->pcdata->stats[UNI_GEN] > 3)
{
send_to_char("Huh?\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "Who do you wish to make a Rager?\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( ch == victim )
{
send_to_char("Not on yourself.\n\r", ch );
return;
}
if ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) )
{
send_to_char( "Only on avatars.\n\r", ch );
return;
}
if (!IS_IMMUNE(victim,IMM_DEMON))
{
send_to_char( "Not on an unwilling person.\n\r", ch);
return;
}
if (victim->class != 0) {
send_to_char("They already have a profession.\n\r", ch );
return;}
if (ch->exp < 10000)
{
send_to_char("You cannot afford the 10,000 exp.\n\r",ch);
return;
}
ch->exp = ch->exp - 10000;
act("You make $N a rager!", ch, NULL, victim, TO_CHAR);
act("$n makes $N a rager!", ch, NULL, victim, TO_NOTVICT);
act("$n makes you a rager!", ch, NULL, victim, TO_VICT);
victim->class=0;
victim->class=CLASS_BATTLERAGER;
victim->special=0;
if (IS_CLASS(victim, CLASS_VAMPIRE)) do_mortalvamp(victim,"");
REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
REMOVE_BIT(victim->act, PLR_WIZINVIS);
REMOVE_BIT(victim->special, SPC_SIRE);
REMOVE_BIT(victim->special, SPC_ANARCH);
victim->pcdata->stats[UNI_RAGE] = 0;
victim->pcdata->stats[UNI_GEN] = ch->pcdata->stats[UNI_GEN] + 1;
victim->special = 0;
free_string(victim->morph);
victim->morph=str_dup("");
free_string(victim->clan);
victim->clan=str_dup(ch->clan);
free_string(victim->lord);
if (ch->pcdata->stats[UNI_GEN] == 1)
victim->lord=str_dup(ch->name);
else
{
sprintf(buf,"%s %s",ch->lord,ch->name);
victim->lord=str_dup(buf);
}
save_char_obj(ch);
save_char_obj(victim);
return;
}