#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
void do_lessons(CHAR_DATA *ch, char *argument)
{
char buf[MAX_INPUT_LENGTH];
int cost;
int cost2;
cost = ch->pcdata->powers[BARD_LESSONS] * 100000;
cost2 = cost - ch->exp;
if (argument[0] == '\0')
{
send_to_char("Options are: show, improve.\n\r", ch);
return;
}
if (!str_cmp(argument, "show"))
{
sprintf(buf, "Your skill is currently at %d.\n\r", ch->pcdata->powers[BARD_LESSONS]);
send_to_char(buf, ch);
}
else if (!str_cmp(argument, "improve"))
{
if (ch->exp < cost)
{
sprintf(buf, "You need %d more experience.\n\r", cost2);
send_to_char(buf, ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] >= 10)
{
send_to_char("You're already as skilled as you can become.\n\r", ch);
return;
}
ch->exp -= cost;
send_to_char("You learn a little more about the arts.\n\r", ch);
ch->pcdata->powers[BARD_LESSONS]++;
return;
}
else
{
send_to_char("Try improve or show.\n\r", ch);
return;
}
return;
}
void do_sing(CHAR_DATA *ch, char *argument)
{
char buf[MAX_INPUT_LENGTH];
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
int chance;
int dam[4];
CHAR_DATA *victim;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
if (!IS_CLASS(ch, CLASS_BARD))
{
send_to_char("Only bards can sing!\n\r", ch);
return;
}
if (arg1[0] == '\0' && arg2[0] == '\0')
{
send_to_char("Syntax: sing (song) (target)\n\r", ch);
send_to_char("Possible Songs: \n\r", ch);
send_to_char("Minuet, Minne, Madrigal, March, Dissonance \n\r", ch);
send_to_char("Requiem, Paeon, Ballad, Lullaby, Hymnus, Spiritual \n\r",
ch);
return;
}
if (str_cmp(arg1, "minuet") && str_cmp(arg1, "minne") && str_cmp(arg1, "madrigal") &&
str_cmp(arg1, "march") && str_cmp(arg1, "requiem") && str_cmp(arg1, "paeon") &&
str_cmp(arg1, "ballad") && str_cmp(arg1, "lullaby") && str_cmp(arg1, "hymnnus") &&
str_cmp(arg1, "spiritual") && str_cmp(arg1, "dissonance"))
{
send_to_char("Possible Songs: Minuet, Minne, Madrigal, March, Requiem, Paeon,\n\r", ch);
send_to_char("Ballad, Lullaby, Hymnus, Dissonance, Spiritual\n\r", ch);
return;
}
if (!str_cmp(arg2, "self") || !str_cmp(arg2, ch->name))
victim = ch;
else if ((victim = get_char_room(ch, arg2)) == NULL)
{
send_to_char("They aren't here.\n\r", ch);
return;
}
if (ch->pcdata->powers[SONG_MASTERY] < 1)
ch->pcdata->powers[SONG_MASTERY] = 1;
chance = number_range(1, ch->pcdata->powers[BARD_LESSONS]);
if (chance == 1)
{
if (ch->pcdata->powers[SONG_MASTERY] < 10)
{
send_to_char("Your skill at singing improves.\n\r", ch);
ch->pcdata->powers[SONG_MASTERY]++;
}
}
if (!str_cmp(arg1, "minuet"))
{
if (IS_NPC(victim))
{
send_to_char("Not on NPCs.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_MINUET] > 0)
{
send_to_char("They're already affected!\n\r", ch);
return;
}
sprintf(buf, "#nYou sing a wonderful #rminuet#n to %s.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s sings a wonderful #rminuet#n to you.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_MINUET] += (50 * ch->pcdata->powers[SONG_MASTERY]);
victim->damroll += (50 * ch->pcdata->powers[SONG_MASTERY]);
return;
}
else if (!str_cmp(arg1, "minne"))
{
if (IS_NPC(victim))
{
send_to_char("Not on NPCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 1)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if(victim->pcdata->songs[SONG_MINNE] > 0)
{
send_to_char("They're already affected!\n\r", ch);
return;
}
sprintf(buf, "#nYou sing a wonderful #Lminne#n to %s.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s sings a wonderful #Lminne#n to you.\n\r", ch->name);
send_to_char(buf,victim);
victim->pcdata->songs[SONG_MINNE] += (50 * ch->pcdata->powers[SONG_MASTERY]);
victim->armor -= (50 * ch->pcdata->powers[SONG_MASTERY]);
return;
}
else if (!str_cmp(arg1, "madrigal"))
{
if (IS_NPC(victim))
{
send_to_char("Not on NPCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 2)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_MADRIGAL] > 0)
{
send_to_char("They're already affected!\n\r", ch);
return;
}
sprintf(buf, "#nYou sing a wonderful #Gmadrigal#n to %s.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s sings a wonderful #Gmadrigal#n to you.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_MADRIGAL] += (50 * ch->pcdata->powers[SONG_MASTERY]);
victim->hitroll += (50 * ch->pcdata->powers[SONG_MASTERY]);
return;
}
else if (!str_cmp(arg1, "spiritual"))
{
if(ch->pcdata->powers[BARD_LESSONS] < 10)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
dam[0] = ch->pcdata->songs[0] + ch->pcdata->songs[1] + ch->pcdata->songs[2] + ch->pcdata->songs[3];
dam[1] = ch->pcdata->songs[4] + ch->pcdata->songs[5] + ch->pcdata->songs[6] + ch->pcdata->songs[7];
dam[2] = dam[0] + dam[1];
dam[3] = dam[2] * 12.5;
damage(ch, victim, dam[3], gsn_requiem);
sprintf(buf, "#yYou channel all your #7inspiration#y into one powerful song, hitting #C%s #yincredibly hard. [#L%d#y]#n\n\r",
victim->name, dam[3]);
send_to_char(buf, ch);
sprintf(buf, "#C%s #ychannels every bit of their #7inspiration #yinto one powerful song, hitting you hard. [#L%d#y]#n\n\r", ch->name, dam[3]);
send_to_char(buf, victim);
WAIT_STATE(ch, 36);
return;
}
else if (!str_cmp(arg1, "lullaby"))
{
if (IS_NPC(victim))
{
send_to_char("Only on PCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 7)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_LULLABY] > 0)
{
send_to_char("They're already asleep.\n\r", ch);
return;
}
sprintf(buf, "#nYou sing a #0lullaby#n to %s, putting them to sleep.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s sings a #0lullaby#n to you, putting you to sleep.\n\r", ch->name);
send_to_char(buf, victim);
victim->position = POS_STUNNED;
}
else if (!str_cmp(arg1, "requiem"))
{
if (IS_NPC(victim))
{
send_to_char("Only on PCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 4)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_REQUIEM] > 0)
{
send_to_char("They're already suffering.\n\r", ch);
return;
}
sprintf(buf, "#nYou instill within %s a horrific #rrequiem#n.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s instills within you a horrific #rrequiem#n.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_REQUIEM] += ch->pcdata->powers[SONG_MASTERY];
return;
}
else if (!str_cmp(arg1, "dissonance"))
{
if (ch->pcdata->powers[BARD_LESSONS] < 9)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
dam[0] = number_range(1, 100);
dam[1] = number_range(5, 500);
dam[2] = number_range(9, 900);
dam[3] = number_range(13, 1300);
dam[4] = number_range(17, 1700);
damage(ch, victim, dam[0], gsn_requiem);
damage(ch, victim, dam[1], gsn_requiem);
damage(ch, victim, dam[2], gsn_requiem);
damage(ch, victim, dam[3], gsn_requiem);
damage(ch, victim, dam[4], gsn_requiem);
sprintf(buf, "#nThe #7intrdouction#n to your dissonant rush does #y[#L%d#y]#n damage to #C%s.#n\n\r", dam[0], victim->name);
send_to_char(buf, ch);
sprintf(buf, "#nThe #7warmup#n to your dissonant attack does #y[#L%d#y]#n damage to #C%s.#n\n\r", dam[1], victim->name);
send_to_char(buf, ch);
sprintf(buf, "#nThe #7body#n of your dissonant onslaught does #y[#L%d#y]#n damage to #C%s.#n\n\r", dam[2], victim->name);
send_to_char(buf, ch);
sprintf(buf, "#nThe #7outro#n to your dissonant song does #y[#L%d#y]#n damage to #C%s.#n\n\r", dam[3], victim->name);
send_to_char(buf, ch);
sprintf(buf, "#nThe #7aftermath#n of your attack does #y[#L%d#y]#n damage to #C%s.#n\n\r", dam[4], victim->name);
send_to_char(buf, ch);
sprintf(buf, "You take #y[#L%d#y]#n damage from %s's dissonant song #7introduction.#m\n\r", dam[0], ch->name);
send_to_char(buf, victim);
sprintf(buf, "The #7warmup#n to %s's dissonant attack does #y[#L%d#y]#n damage to you.\n\r", ch->name, dam[1]);
send_to_char(buf, victim);
sprintf(buf, "The #7body#n of %s's dissonant onslaught does #[#L%d#y]#n damage to you.\n\r", ch->name, dam[2]);
send_to_char(buf, victim);
sprintf(buf, "%s's dissonant song #7outro#n deals #y[#L%d#y]#n damage to you.\n\r", ch->name, dam[3]);
send_to_char(buf, victim);
sprintf(buf, "You take #y[#L%d#y]#n damage from %s's dissonant #7aftermath.#n\n\r", dam[4], ch->name);
send_to_char(buf, victim);
WAIT_STATE(ch, 36);
return;
}
else if (!str_cmp(arg1, "paeon"))
{
if (IS_NPC(victim))
{
send_to_char("Only on PCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 5)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_PAEON] > 0)
{
send_to_char("They're regenerating quickly already.\n\r", ch);
return;
}
sprintf(buf, "#nYou successfully cause %s to regenerate quickly with your #Cpaeon#n.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s successfully causes you to regenerate quickly with their #Cpaeon#n.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_PAEON] += ch->pcdata->powers[SONG_MASTERY];
return;
}
else if (!str_cmp(arg1, "ballad"))
{
if (IS_NPC(victim))
{
send_to_char("Only on players.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 6)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_BALLAD] > 0)
{
send_to_char("They're regenerating mana fiercely already.\n\r", ch);
return;
}
sprintf(buf, "#nYou cause %s to regenerate mana fiercely with your #Pballad#n.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s causes you to regenerate mana fiercely with their #Pballad#n.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_BALLAD] += ch->pcdata->powers[SONG_MASTERY];
return;
}
else if (!str_cmp(arg1, "hymnus"))
{
if (IS_NPC(victim))
{
send_to_char("Only PCs.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 8)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_HYMNUS] > 0)
{
send_to_char("They are already suffering from it.\n\r", ch);
return;
}
sprintf(buf, "#nYou degrade %s and their ability to regenerate mana with your #7hymnus#n.\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s degrades your ability to regenerate mana with their #7hymnus#n.\n\r", victim->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_HYMNUS] += ch->pcdata->powers[SONG_MASTERY];
return;
}
else if (!str_cmp(arg1, "march"))
{
if (IS_NPC(victim))
{
send_to_char("Only on players.\n\r", ch);
return;
}
if (ch->pcdata->powers[BARD_LESSONS] < 3)
{
send_to_char("You need to take more lessons.\n\r", ch);
return;
}
if (victim->pcdata->songs[SONG_MARCH] > 0)
{
send_to_char("They're already marching!\n\r", ch);
return;
}
sprintf(buf, "#nYou sing a wonderful #ymarch#n to %s\n\r", victim->name);
send_to_char(buf, ch);
sprintf(buf, "#n%s sings a wonderful #ymarch#n to you.\n\r", ch->name);
send_to_char(buf, victim);
victim->pcdata->songs[SONG_MARCH] += (ch->pcdata->powers[SONG_MASTERY]*50);
return;
}
return;
}
void do_songs(CHAR_DATA *ch, char *argument)
{
char uta[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
int song = 0;
for (song = 0; song < 9; song++)
{
switch(song)
{
case 0:
sprintf(uta, "Minuet: ");
break;
case 2:
sprintf(uta, "Madrigal: ");
break;
case 1:
sprintf(uta, "Minne: ");
break;
case 3:
sprintf(uta, "March: ");
break;
case 4:
sprintf(uta, "Requiem: ");
break;
case 5:
sprintf(uta, "Paeon: ");
break;
case 6:
sprintf(uta, "Ballad: ");
break;
case 7:
sprintf(uta, "Lullaby: ");
break;
case 8:
sprintf(uta, "Hymnus: ");
break;
}
sprintf(buf, "%s %d\n\r", uta, ch->pcdata->songs[song]);
send_to_char(buf, ch);
}
sprintf(buf, "Mastery: %d\n", ch->pcdata->powers[SONG_MASTERY]);
send_to_char(buf, ch);
return;
}
void do_mtravel(CHAR_DATA *ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
ROOM_INDEX_DATA *location;
one_argument (argument, arg);
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_BARD))
{
send_to_char("Huh?\n\r", ch );
return;
}
if ((victim = get_char_world(ch, arg)) == NULL)
{
send_to_char("You are unable to find them.\n\r", ch );
return;
}
if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL))
{
send_to_char( "You cannot enter the Astral sphere.\n\r",ch);
return;
}
if (ch->move < 250)
{
send_to_char("Your to tired to go travelling.\n\r", ch );
return;
}
location = victim->in_room;
act("You concentrate on the journey ahead.", ch, NULL, NULL, TO_CHAR);
act("$n uses $s .", ch, NULL, NULL, TO_ROOM);
ch->move -= 250;
char_from_room(ch);
char_to_room(ch, location);
do_look(ch, "");
act("You materialize.", ch, NULL, NULL, TO_CHAR);
act("$n suddenly appear from out of nowhere.", ch, NULL, NULL, TO_ROOM);
return;
}
void do_bardeq( 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_BARD) )
{
send_to_char("You are not a Bard!!!\n\r",ch);
return;
}
if (arg[0] == '\0')
{
send_to_char("Please specify which piece of titan armor you wish to make: ring
bracer collar mask leggings boots gauntlets sleeves robe belt hood flute cloak.\n\r",ch);
return;
}
if ( ch->practice < 150 )
{
send_to_char("It costs 150 points of primal to create a piece of Bard armor.\n\r",ch);
return;
}
if (!str_cmp(arg,"robe")) vnum = 10103;
else if (!str_cmp(arg,"flute")) vnum = 10111;
else if (!str_cmp(arg,"ring")) vnum = 10100;
else if (!str_cmp(arg,"bracer")) vnum = 10102;
else if (!str_cmp(arg,"collar")) vnum = 10101;
else if (!str_cmp(arg,"hood")) vnum = 10104;
else if (!str_cmp(arg,"leggings")) vnum = 10105;
else if (!str_cmp(arg,"boots")) vnum = 10106;
else if (!str_cmp(arg,"gloves")) vnum = 10107;
else if (!str_cmp(arg,"sleeves")) vnum = 10110;
else if (!str_cmp(arg,"cloak")) vnum = 10108;
else if (!str_cmp(arg,"belt")) vnum = 10109;
else if (!str_cmp(arg,"mask")) vnum = 10112;
else
{
send_to_char("Please specify which piece of titan armor you wish to
make: ring bracer collar hood leggings boots gloves sleeves
cloak belt mask flute.\n\r",ch);
return;
}
if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
{
send_to_char("Missing object, please inform Morpheus.\n\r",ch);
return;
}
obj = create_object(pObjIndex, 50);
obj->questowner = str_dup(ch->pcdata->switchname);
obj_to_char(obj, ch);
act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
ch->practice -=150;
return;
}