wileymud-1.187b/
wileymud-1.187b/attic/
wileymud-1.187b/attic/bin/
wileymud-1.187b/attic/lib/
wileymud-1.187b/attic/lib/adm/
wileymud-1.187b/attic/lib/man/
wileymud-1.187b/attic/lib/new-wld/
wileymud-1.187b/attic/lib/new-wld/default/
wileymud-1.187b/attic/lib/old/
wileymud-1.187b/attic/lib/wld/
wileymud-1.187b/attic/public_html/
wileymud-1.187b/attic/public_html/gfx/
wileymud-1.187b/attic/src/bin/
wileymud-1.187b/attic/src/etc/
wileymud-1.187b/attic/src/libauth-4.0-p5/
wileymud-1.187b/attic/src/sedna/
wileymud-1.187b/backups/
wileymud-1.187b/bin/
wileymud-1.187b/docs/
wileymud-1.187b/etc/
wileymud-1.187b/lib/
wileymud-1.187b/lib/adm/
wileymud-1.187b/lib/boards/
wileymud-1.187b/lib/log/
wileymud-1.187b/lib/man/
wileymud-1.187b/lib/ply/
wileymud-1.187b/lib/ply/a/
wileymud-1.187b/lib/ply/b/
wileymud-1.187b/lib/ply/c/
wileymud-1.187b/lib/ply/d/
wileymud-1.187b/lib/ply/g/
wileymud-1.187b/lib/ply/k/
wileymud-1.187b/lib/ply/m/
wileymud-1.187b/lib/ply/s/
wileymud-1.187b/lib/ply/t/
wileymud-1.187b/public_html/gfx/
wileymud-1.187b/src/bin/
wileymud-1.187b/src/convert/attic/
wileymud-1.187b/src/convert/obj/
wileymud-1.187b/src/convert/perl/
wileymud-1.187b/src/convert/perl/MudConvert/
wileymud-1.187b/src/convert/perl/MudConvert/DUMP/
wileymud-1.187b/src/convert/perl/MudConvert/Report/
wileymud-1.187b/src/convert/perl/MudConvert/WileyMUD/
wileymud-1.187b/src/convert/perl/output/
wileymud-1.187b/src/convert/perl/output/DUMP/
wileymud-1.187b/src/convert/perl/output/Report/
wileymud-1.187b/src/convert/perl/output/WileyMUD/
wileymud-1.187b/src/etc/
wileymud-1.187b/src/etc/init.d/
wileymud-1.187b/src/etc/rc.d/
wileymud-1.187b/src/etc/rc.d/init.d/
wileymud-1.187b/src/lib/
wileymud-1.187b/src/lib/adm/
wileymud-1.187b/src/lib/boards/
wileymud-1.187b/src/lib/log/
wileymud-1.187b/src/lib/man/
wileymud-1.187b/src/lib/ply/
wileymud-1.187b/src/lib/ply/a/
wileymud-1.187b/src/lib/ply/b/
wileymud-1.187b/src/lib/ply/c/
wileymud-1.187b/src/lib/ply/d/
wileymud-1.187b/src/lib/ply/e/
wileymud-1.187b/src/lib/ply/f/
wileymud-1.187b/src/lib/ply/g/
wileymud-1.187b/src/lib/ply/h/
wileymud-1.187b/src/lib/ply/i/
wileymud-1.187b/src/lib/ply/j/
wileymud-1.187b/src/lib/ply/k/
wileymud-1.187b/src/lib/ply/l/
wileymud-1.187b/src/lib/ply/m/
wileymud-1.187b/src/lib/ply/n/
wileymud-1.187b/src/lib/ply/o/
wileymud-1.187b/src/lib/ply/p/
wileymud-1.187b/src/lib/ply/q/
wileymud-1.187b/src/lib/ply/r/
wileymud-1.187b/src/lib/ply/s/
wileymud-1.187b/src/lib/ply/t/
wileymud-1.187b/src/lib/ply/u/
wileymud-1.187b/src/lib/ply/v/
wileymud-1.187b/src/lib/ply/w/
wileymud-1.187b/src/lib/ply/x/
wileymud-1.187b/src/lib/ply/y/
wileymud-1.187b/src/lib/ply/z/
wileymud-1.187b/src/obj/
wileymud-1.187b/src/utils/
wileymud-1.187b/src/utils/mobmaker/
/*
 * file: act.social.c , Implementation of commands.       Part of DIKUMUD
 * Usage : Social commands.
 * Copyright (C) 1990, 1991 - see 'license.doc' for complete information.
 */

#include <stdio.h>
#include <stdlib.h>
/* #include <unistd.h> */
#include <sys/types.h>
#include <signal.h>
#include <string.h>

#include "global.h"
#include "bug.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "spells.h"
#include "multiclass.h"
#define _ACT_SOCIAL_C
#include "act_social.h"

struct social_messg                    *soc_mess_list = 0;
struct pose_type                        pose_messages[MAX_MESSAGES];
static int                              list_top = -1;

char                                   *fread_action(FILE * fl)
{
    char                                    buf[MAX_STRING_LENGTH] = "\0\0\0\0\0\0\0";
    char                                   *rslt = NULL;

    if (DEBUG > 2)
	log_info("called %s with %08zx", __PRETTY_FUNCTION__, (size_t) fl);

    for (;;) {
	fgets(buf, MAX_STRING_LENGTH, fl);
	if (feof(fl)) {
	    log_fatal("Fread_action - unexpected EOF.");
	    proper_exit(MUD_HALT);
	}
	if (*buf == '#')
	    return (0);
	else {
	    *(buf + strlen(buf) - 1) = '\0';
	    CREATE(rslt, char, strlen               (buf) + 1);

	    strcpy(rslt, buf);
	    return (rslt);
	}
    }
}

void boot_social_messages(void)
{
    FILE                                   *fl = NULL;
    int                                     tmp = 0;
    int                                     hide = 0;
    int                                     min_pos = 0;

    if (DEBUG > 1)
	log_info("called %s with no arguments", __PRETTY_FUNCTION__);

    if (!(fl = fopen(SOCMESS_FILE, "r"))) {
	log_fatal("boot_social_messages");
	proper_exit(MUD_HALT);
    }
    for (;;) {
	fscanf(fl, " %d ", &tmp);
	if (tmp < 0)
	    break;
	fscanf(fl, " %d ", &hide);
	fscanf(fl, " %d \n", &min_pos);

	/*
	 * alloc a new cell 
	 */
	if (!soc_mess_list) {
	    CREATE(soc_mess_list, struct social_messg, ((list_top = 0), 1));
	} else {
	    RECREATE(soc_mess_list, struct social_messg, (++list_top + 1));
	}

	/*
	 * read the stuff 
	 */
	soc_mess_list[list_top].act_nr = tmp;
	soc_mess_list[list_top].hide = hide;
	soc_mess_list[list_top].min_victim_position = min_pos;

	soc_mess_list[list_top].char_no_arg = fread_action(fl);
	soc_mess_list[list_top].others_no_arg = fread_action(fl);

	soc_mess_list[list_top].char_found = fread_action(fl);

	/*
	 * if no char_found, the rest is to be ignored 
	 */
	if (!soc_mess_list[list_top].char_found)
	    continue;

	soc_mess_list[list_top].others_found = fread_action(fl);
	soc_mess_list[list_top].vict_found = fread_action(fl);

	soc_mess_list[list_top].not_found = fread_action(fl);

	soc_mess_list[list_top].char_auto = fread_action(fl);

	soc_mess_list[list_top].others_auto = fread_action(fl);
    }
    FCLOSE(fl);
}

int find_action(int cmd)
{
    int                                     bot = 0;
    int                                     top = 0;
    int                                     mid = 0;

    if (DEBUG > 2)
	log_info("called %s with %d", __PRETTY_FUNCTION__, cmd);

    top = list_top;

    if (top < 0)
	return (-1);

    for (;;) {
	mid = (bot + top) / 2;

	if (soc_mess_list[mid].act_nr == cmd)
	    return (mid);
	if (bot == top)
	    return (-1);

	if (soc_mess_list[mid].act_nr > cmd)
	    top = --mid;
	else
	    bot = ++mid;
    }
}

void do_action(struct char_data *ch, const char *argument, int cmd)
{
    int                                     act_nr = 0;
    char                                    buf[MAX_INPUT_LENGTH] = "\0\0\0\0\0\0\0";
    struct social_messg                    *action = NULL;
    struct char_data                       *vict = NULL;

    if (DEBUG)
	log_info("called %s with %s, %s, %d", __PRETTY_FUNCTION__, SAFE_NAME(ch),
		 VNULL(argument), cmd);

    if ((act_nr = find_action(cmd)) < 0) {
	cprintf(ch, "That action is not supported.\r\n");
	return;
    }
    action = &soc_mess_list[act_nr];

    if (action->char_found)
	only_argument(argument, buf);
    else
	*buf = '\0';

    if (!*buf) {
	cprintf(ch, "%s\r\n", action->char_no_arg);
	act("%s", action->hide, ch, 0, 0, TO_ROOM, action->others_no_arg);
	return;
    }
    if (!(vict = get_char_room_vis(ch, buf))) {
	cprintf(ch, "%s\r\n", action->not_found);
    } else if (vict == ch) {
	cprintf(ch, "%s\r\n", action->char_auto);
	act("%s", action->hide, ch, 0, 0, TO_ROOM, action->others_auto);
    } else {
	if (GET_POS(vict) < action->min_victim_position) {
	    act("$N is not in a proper position for that.", FALSE, ch, 0, vict, TO_CHAR);
	} else {
	    act("%s", 0, ch, 0, vict, TO_CHAR, action->char_found);
	    act("%s", action->hide, ch, 0, vict, TO_NOTVICT, action->others_found);
	    act("%s", action->hide, ch, 0, vict, TO_VICT, action->vict_found);
	}
    }
}

void do_insult(struct char_data *ch, const char *argument, int cmd)
{
    static char                             arg[MAX_STRING_LENGTH] = "\0\0\0\0\0\0\0";
    struct char_data                       *victim = NULL;

    if (DEBUG)
	log_info("called %s with %s, %s, %d", __PRETTY_FUNCTION__, SAFE_NAME(ch),
		 VNULL(argument), cmd);

    only_argument(argument, arg);

    if (*arg) {
	if (!(victim = get_char_room_vis(ch, arg))) {
	    cprintf(ch, "Can't hear you!\r\n");
	} else {
	    if (victim != ch) {
		cprintf(ch, "You insult %s.\r\n", GET_NAME(victim));

		switch (random() % 3) {
		    case 0:{
			    if (GET_SEX(ch) == SEX_MALE) {
				if (GET_SEX(victim) == SEX_MALE)
				    act("$n accuses you of fighting like a woman!", FALSE,
					ch, 0, victim, TO_VICT);
				else
				    act("$n says that women can't fight.", FALSE, ch, 0, victim,
					TO_VICT);
			    } else {			       /* Ch == Woman */
				if (GET_SEX(victim) == SEX_MALE)
				    act("$n accuses you of having the smallest.... (brain?)",
					FALSE, ch, 0, victim, TO_VICT);
				else
				    act("$n tells you that you'd loose a beautycontest against a troll.", FALSE, ch, 0, victim, TO_VICT);
			    }
			}
			break;
		    case 1:{
			    act("$n calls your mother a bitch!", FALSE, ch, 0, victim, TO_VICT);
			}
			break;
		    default:{
			    act("$n tells you to get lost!", FALSE, ch, 0, victim, TO_VICT);
			}
			break;
		}					       /* end switch */

		act("$n insults $N.", TRUE, ch, 0, victim, TO_NOTVICT);
	    } else {					       /* ch == victim */
		cprintf(ch, "You feel insulted.\r\n");
	    }
	}
    } else
	cprintf(ch, "Sure you don't want to insult everybody.\r\n");
}

void boot_pose_messages(void)
{
    FILE                                   *fl = NULL;
    int                                     counter = 0;
    int                                     class = 0;

    if (DEBUG > 1)
	log_info("called %s with no arguments", __PRETTY_FUNCTION__);

    return;

    if (!(fl = fopen(POSEMESS_FILE, "r"))) {
	log_fatal("boot_pose_messages");
	proper_exit(MUD_HALT);
    }
    for (counter = 0;; counter++) {
	fscanf(fl, " %d ", &pose_messages[counter].level);
	if (pose_messages[counter].level < 0)
	    break;
	for (class = 0; class < 4; class++) {
	    pose_messages[counter].poser_msg[class] = fread_action(fl);
	    pose_messages[counter].room_msg[class] = fread_action(fl);
	}
    }

    FCLOSE(fl);
}

void do_pose(struct char_data *ch, const char *argument, int cmd)
{
    /*
     * int to_pose = 0; 
     */
    int                                     counter = 0;

    if (DEBUG)
	log_info("called %s with %s, %s, %d", __PRETTY_FUNCTION__, SAFE_NAME(ch),
		 VNULL(argument), cmd);

    cprintf(ch, "Sorry Buggy command.\r\n");
    return;

    if ((GetMaxLevel(ch) < pose_messages[0].level) || IS_NPC(ch)) {
	cprintf(ch, "You can't do that.\r\n");
	return;
    }
    for (counter = 0; (pose_messages[counter].level < GetMaxLevel(ch)) &&
	 (pose_messages[counter].level > 0); counter++);
    counter--;

    /*
     * to_pose = number(0, counter); 
     */
/*
 * **  find highest level, use that.
 */

}