#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; }