/***************************************************************************\
[*] ___ ____ ____ __ __ ____ [*] 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);
}
}
}