/***************************************************************************\ [*] ___ ____ ____ __ __ ____ [*] ROGUE: ROM With Attitude [*] [*] /#/ ) /#/ ) /#/ ) /#/ /#/ /#/ [*] All rights reserved [*] [*] /#/ < /#/ / /#/ _ /#/ /#/ /#/-- [*] Copyright(C) 2000-2001 [*] [*] /#/ \(#(__/ (#(__/ (#(__/#/ (#(___ [*] Kenneth Conley (Mendanbar) [*] [*] Expression of Digital Creativity.. [*] scmud@mad.scientist.com [*] [-]---------------------------------------+-+-----------------------------[-] [*] File: pueblo.c [*] [*] Usage: Pueblo Funtions [*] \***************************************************************************/ #include "merc.h" #include "interp.h" #include "recycle.h" #include "tables.h" #include "pueblo.h" ACMD(do_pmusic) { char arg[MSL]; char buf[MSL]; int i, x; const char *def_music[][2] = { { "FF2 World", "ff2world.mid" }, { "FF3 Main", "ff3main.mid" }, { "FF3 World", "ff3wld.mid" }, { "DragonLance", "dragonl.mid" }, { "FF2 Cecil", "ff2cecil.mid" }, { "Organ Theme", "organ.mid" }, { "FF5 Theme", "ff5theme.mid" }, { "Aeris Theme", "aeris.mid" }, { "Sephiroth", "sephiroth.mid" }, { "FF7 World", "ff7world.mid" }, { "FF7 Ancients", "ancients.mid" }, { "Heroic Song", "heroic.mid" }, { "Crystal Prelude", "prelude.mid" }, { "FF8 Landing", "landing.mid" }, { "FF8 Find your Way", "findyourway.mid"}, { "\n", "\n"} }; argument = one_argument(argument, arg); if (IS_NPC(ch) || (!IS_SET(ch->act,PLR_PUEBLO) && !IS_SET(ch->act, PLR_MSP))) { send_to_char("Huh?\n\r",ch); } else if (!arg || !*arg) { send_to_char("The following pre-set music is availible...\n\r",ch); for (i = 0; *def_music[i][0] != '\n'; i++) { sprintf(buf," %2d. %-25s `y%s`n\r\n",i,def_music[i][0], IS_STAFF(ch) ? def_music[i][1] : ""); send_to_char(buf,ch); } send_to_char( "\r\nUsage: pmusic <number>\r\n", ch); } else if (!isdigit(*arg)) send_to_char( "Usage: pmusic <number>\r\n" "Type \"pmusic\" without arguments for a list of pre-set music.\r\n",ch); else { i = atoi(arg); if (i < 0) { send_to_char("The number cannot be negative.\r\n", ch); } else { for (x = 0; *def_music[x][0] != '\n'; x++); if (i >= x) { // Subtract 1 to account for the NULL line... sprintf(buf,"The range for the pmusic number is 0-%d.\r\n", x-1); send_to_char(buf,ch); } else { sprintf(buf,"Activating Music: %s, Infinate Loop...\n\r",def_music[i][0]); send_to_char(buf,ch); music_to_char(ch, def_music[i][1]); } } } } ACMD(do_pstop) { if (IS_NPC(ch) || (!IS_SET(ch->act,PLR_PUEBLO) && !IS_SET(ch->act, PLR_MSP))) { send_to_char("Huh?\n\r",ch); return; } send_to_char("Deactivating Music: Please Standby...\n\r",ch); if (IS_SET(ch->act, PLR_PUEBLO)) send_to_char("</xch_mudtext><img xch_mode=html>" "<img xch_sound=stop>" "<br><img xch_mode=text>",ch); else if (IS_SET(ch->act, PLR_MSP)) send_to_char("!!MUSIC(Off)\r\n",ch); return; } ACMD(do_volume) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; sh_int value; argument = one_argument( argument, arg ); if (IS_NPC(ch)) { send_to_char("Not on NPCs.\n\r",ch); return; } if (!IS_SET(ch->act, PLR_PUEBLO) && !IS_SET(ch->act, PLR_MSP)) { send_to_char("Huh?\n\r",ch); return; } if (arg[0] == '\0') { sprintf(buf, "Syntax: volume <0-100>\n\r" "Your current volume level is %d%%.\r\n", ch->pcdata->volume); send_to_char(buf, ch); return; } if ((atoi(arg) > 100) || (atoi(arg) < 1)) { send_to_char("Value must be within 0-100\n\r",ch); return; } value = atoi(arg); ch->pcdata->volume = value; sprintf(buf,"Pueblo Volume set to %d.\n\r", value); send_to_char(buf,ch); sound(PUEBLO_V_TEST, ch, 0, 0, TO_CHAR, POS_DEAD); return; } void image_to_char(CHAR_DATA *ch, const char *image) { char buf[MSL]; if (!ch || !image) return; if (PLR_FLAGGED(ch, PLR_PUEBLO)) { sprintf(buf, "</xch_mudtext><img xch_mode=html>"); sprintf(buf+strlen(buf), "<img src=\"%s%s\">", PUEBLO_DIR, image); strcat(buf, "<br><img xch_mode=text>"); send_to_char(buf, ch); } } void music_to_char(CHAR_DATA *ch, const char *sound) { char buf[MSL]; if (!ch || !sound) return; if (IS_SET(ch->act, PLR_PUEBLO)) { sprintf(buf, "</xch_mudtext><img xch_mode=html>"); sprintf(buf + strlen(buf), "<img xch_sound=loop xch_volume=%d src=\"%s%s\">", ch->pcdata->volume, PUEBLO_DIR, sound); strcat(buf, "<br><img xch_mode=text>"); send_to_char(buf, ch); } else if (IS_SET(ch->act, PLR_MSP)) { sprintf(buf, "!!MUSIC(%s V=%d L=-1 U=%s)\r\n", sound, ch->pcdata->volume, PUEBLO_DIR); send_to_char(buf, ch); } } ACMD(do_sound) { char arg[MIL]; CHAR_DATA *vict; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!arg[0] || !argument[0]) { send_to_char("Usage: sound <char/room/all> <filename>\r\n", ch); return; } if (str_infix(".wav", argument) && str_infix(".mid", argument)) strcat(argument, ".wav"); if (!str_cmp(arg, "room")) { ch->Send("Sending %s to room.\r\n", argument); sound(argument, ch, 0, 0, TO_ROOM | TO_CHAR, POS_DEAD); } else if (!str_cmp(arg, "all")) { ch->Send("Sending %s to all.\r\n", argument); sound(argument, ch, 0, 0, TO_ALL | TO_CHAR, POS_DEAD); } else if ((vict = get_char_world(ch, arg)) != NULL && !IS_NPC(ch)) { ch->Send("Sending %s to %s.\r\n", argument, vict->name); sound(argument, ch, 0, vict, TO_VICT, POS_DEAD); } else send_to_char("Usage: sound <char/room/all> <filename>\r\n", ch); } #define SENDOK(ch) ((ch)->desc && ((ch)->position >= min_pos) && !IS_NPC(ch)) void perform_sound(char *sound, CHAR_DATA *ch) { char buf[MAX_STRING_LENGTH]; if (!*sound || !ch) return; if (ch->desc) { if (PLR_FLAGGED(ch, PLR_PUEBLO)) { sprintf(buf, "</xch_mudtext><img xch_mode=html>"); sprintf(buf + strlen(buf), "<img xch_sound=play xch_volume=%d src=\"%s%s\">", ch->pcdata->volume, PUEBLO_DIR, sound); strcat(buf, "<br><img xch_mode=text>"); } else if (PLR_FLAGGED(ch, PLR_MSP)) { sprintf(buf, "!!SOUND(%s V=%d U=%s)\r\n", sound, ch->pcdata->volume, PUEBLO_DIR); } else return; // Don't write anything to buffer if nothing to write. write_to_buffer(ch->desc, buf, 0); } return; } void sound( char *str, CHAR_DATA *ch, OBJ_DATA *obj, void *vict_obj, int type, int min_pos) { CHAR_DATA *to; DESCRIPTOR_DATA *d; ROOM_INDEX_DATA *room; if (!*str) return; if (str_infix(".wav", str) && str_infix(".mid", str)) strcat(str, ".wav"); // assume sound file. if (IS_SET(type, TO_CHAR)) { if (ch && SENDOK(ch)) perform_sound(str, ch); } if (IS_SET(type, TO_VICT)) { if ((to = (CHAR_DATA *)vict_obj) && SENDOK(to)) perform_sound(str, to); } if (IS_SET(type, TO_ALL | TO_ZONE)) { for (d = descriptor_list; d; d = d->next) { if (d->character && SENDOK(d->character) && (d->character != ch) && ((IS_SET(type, TO_ALL) || (d->character->in_room->area == ch->in_room->area)))) perform_sound(str, d->character); } } if (IS_SET(type, TO_ROOM | TO_NOTVICT)) { if (ch && IN_ROOM(ch) != NULL) room = IN_ROOM(ch); else if (obj && IN_ROOM(obj) != NULL) room = IN_ROOM(obj); else { mudlogf(BRF, LVL_STAFF, TRUE, "SYSERR: no valid target to sound()"); return; } for (to = room->people; to; to = to->next_in_room) { if (SENDOK(to) && (to != ch) && (IS_SET(type, TO_ROOM) || (to != vict_obj))) perform_sound(str, to); } } }