/* 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; }