/**************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefiting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************
* ROM 2.4 is copyright 1993-1998 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@hypercube.org) *
* Gabrielle Taylor (gtaylor@hypercube.org) *
* Brian Moore (zump@rom.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************
* 1stMUD ROM Derivative (c) 2001-2002 by Ryan Jennings *
* http://1stmud.dlmud.com/ <r-jenn@shaw.ca> *
***************************************************************************/
/* Online Social Editting Module,
* (c) 1996,97 Erwin S. Andreasen <erwin@andreasen.org>
* See the file "License" for important licensing information
*/
/* This version contains minor modifications to support ROM 2.4b4. */
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "db.h"
#include "olc.h"
int maxSocial;
struct social_type *social_table; /* and social table */
#define SEDIT( fun ) bool fun( CHAR_DATA *ch, const char *argument )
/* Find a social based on name */
int social_lookup (const char *name)
{
int i;
for (i = 0; i < maxSocial; i++)
if (!str_cmp (name, social_table[i].name))
return i;
return -1;
}
/*
* Social editting command
*/
SOCIAL_DATA *get_social_data (const char *name)
{
int i;
for (i = 0; i < maxSocial; i++)
if (!str_cmp (name, social_table[i].name))
return &social_table[i];
return NULL;
}
SEDIT (sedit_show)
{
SOCIAL_DATA *pSocial;
char buf[MSL];
if (IS_NULLSTR (argument))
EDIT_SOCIAL (ch, pSocial);
else
pSocial = get_social_data (argument);
if (pSocial == NULL)
{
chprintln (ch, "That social does not exist.");
return FALSE;
}
sprintf (buf, "[ %s: %s ]", olc_ed_name (ch), olc_ed_vnum (ch));
stringf (buf, 0, ALIGN_CENTER, "-", buf);
chprintf (ch, "%s\n\r", buf);
chprintf (ch, "Name : %s\n\r"
"(cnoarg): %s\n\r" "(onoarg): %s\n\r"
"(cfound): %s\n\r" "(ofound): %s\n\r"
"(vfound): %s\n\r" "(cself) : %s\n\r"
"(oself) : %s\n\r",
IS_STRSET (pSocial->name),
IS_STRSET (pSocial->char_no_arg),
IS_STRSET (pSocial->others_no_arg),
IS_STRSET (pSocial->char_found),
IS_STRSET (pSocial->others_found),
IS_STRSET (pSocial->vict_found),
IS_STRSET (pSocial->char_auto),
IS_STRSET (pSocial->others_auto));
chprintln (ch, draw_line (NULL, 0));
return TRUE;
}
SEDIT (sedit_delete)
{
int i, j;
SOCIAL_DATA *pSocial;
struct social_type *new_table;
new_table =
(struct social_type *) calloc (sizeof (*new_table), maxSocial);
if (!new_table)
{
chprintln (ch, "Memory allocation failed. Brace for impact...");
return FALSE;
}
if (IS_NULLSTR (argument))
EDIT_SOCIAL (ch, pSocial);
else
pSocial = get_social_data (argument);
if (pSocial == NULL)
{
chprintln (ch, "No such social exists.");
return FALSE;
}
for (i = 0, j = 0; i < maxSocial + 1; i++)
{
if (&social_table[i] != pSocial)
{
new_table[j] = social_table[i];
j++;
}
}
free (social_table);
social_table = new_table;
maxSocial--;
edit_done (ch);
chprintln (ch, "Social deleted.");
return TRUE;
}
SEDIT (sedit_create)
{
int iSocial;
SOCIAL_DATA *pSocial;
char arg[MAX_INPUT_LENGTH];
struct social_type *new_table;
argument = one_argument (argument, arg);
if (IS_NULLSTR (arg))
{
chprintln (ch, "Syntax: sedit create [social]");
return FALSE;
}
if ((iSocial = social_lookup (arg)) != -1)
{
chprintln (ch, "A social with that name already exists.");
return FALSE;
}
maxSocial++;
new_table =
(struct social_type *) realloc (social_table,
sizeof (struct
social_type) * (maxSocial +
1));
if (!new_table)
{
chprintln (ch, "Memory allocation failed. Brace for impact...");
return FALSE;
}
social_table = new_table;
replace_string (social_table[maxSocial - 1].name, arg);
replace_string (social_table[maxSocial - 1].char_no_arg, "");
replace_string (social_table[maxSocial - 1].others_no_arg, "");
replace_string (social_table[maxSocial - 1].char_found, "");
replace_string (social_table[maxSocial - 1].others_found, "");
replace_string (social_table[maxSocial - 1].vict_found, "");
replace_string (social_table[maxSocial - 1].char_auto, "");
replace_string (social_table[maxSocial - 1].others_auto, "");
replace_string (social_table[maxSocial].name, "");
pSocial = get_social_data (arg);
edit_start (ch, pSocial, ED_SOCIAL);
chprintln (ch, "Social created.");
return TRUE;
}
void sedit (CHAR_DATA * ch, char *argument)
{
if (ch->pcdata->security < 5)
{
chprintln (ch, "SEdit: Insufficient security to modify socials.");
edit_done (ch);
}
if (!str_cmp (argument, "done"))
{
edit_done (ch);
return;
}
if (emptystring (argument))
{
sedit_show (ch, "");
return;
}
if (!process_olc_command (ch, argument, social_olc_comm_table))
interpret (ch, argument);
return;
}
CH_CMD (do_sedit)
{
SOCIAL_DATA *pSocial;
char arg1[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (ch->pcdata->security < 5)
{
chprintln (ch, "Insuficient security to edit socials.");
return;
}
if (!str_cmp (arg1, "show"))
{
if (IS_NULLSTR (argument))
{
chprintln (ch, "Syntax: sedit show [social]");
return;
}
sedit_show (ch, "");
return;
}
if (!str_cmp (arg1, "create"))
{
if (IS_NULLSTR (argument))
{
chprintln (ch, "Syntax: sedit create [social]");
return;
}
if (sedit_create (ch, argument))
{
ch->desc->editor = ED_SOCIAL;
act ("$n has entered the social editor.", ch, NULL, NULL,
TO_ROOM);
}
return;
}
if (!str_cmp (arg1, "delete"))
{
if (IS_NULLSTR (argument))
{
chprintln (ch, "Syntax: sedit delete [social]");
return;
}
if (sedit_delete (ch, argument))
{
return;
}
}
if ((pSocial = get_social_data (arg1)) != NULL)
{
edit_start (ch, pSocial, ED_SOCIAL);
return;
}
if (pSocial == NULL && !IS_NULLSTR (arg1))
{
chprintln (ch, "That social does not exist.");
return;
}
chprintln (ch, "SEdit: There is no default social to edit.");
return;
}