/***************************************************************************
* File: olc_act.c *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
* *
* This code was freely distributed with the The Isles 1.1 source code, *
* and has been used here for OLC - OLC would not be what it is without *
* all the previous coders who released their source code. *
* *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "utils.h"
#include "olc.h"
#include "tables.h"
#include "recycle.h"
#include "lookup.h"
/*
* Area Editor Functions.
*/
AEDIT(aedit_show)
{
AREA_DATA *pArea;
char buf[MAX_STRING_LENGTH];
EDIT_AREA(ch, pArea);
sprintf(buf, "Name: [%5ld] %s\n\r", pArea->vnum, pArea->name);
send_to_char(buf, ch);
#if 0 /* ROM OLC */
sprintf(buf, "Recall: [%5d] %s\n\r", pArea->recall,
get_room_index(pArea->recall)
? get_room_index(pArea->recall)->name : "none");
send_to_char(buf, ch);
#endif /* ROM */
sprintf(buf, "File: %s\n\r", pArea->file_name);
send_to_char(buf, ch);
sprintf(buf, "Vnums: [%ld-%ld]\n\r", pArea->min_vnum,
pArea->max_vnum);
send_to_char(buf, ch);
sprintf(buf, "Age: [%d]\n\r", pArea->age);
send_to_char(buf, ch);
sprintf(buf, "Players: [%d]\n\r", pArea->nplayer);
send_to_char(buf, ch);
sprintf(buf, "Security: [%d]\n\r", pArea->security);
send_to_char(buf, ch);
sprintf(buf, "Builders: [%s]\n\r", pArea->builders);
send_to_char(buf, ch);
sprintf(buf, "Credits : [%s]\n\r", pArea->credits);
send_to_char(buf, ch);
sprintf(buf, "Flags: [%s]\n\r",
flag_string(area_flags, pArea->area_flags));
send_to_char(buf, ch);
return FALSE;
}
AEDIT(aedit_reset)
{
AREA_DATA *pArea;
EDIT_AREA(ch, pArea);
reset_area(pArea);
send_to_char("Area reset.\n\r", ch);
return FALSE;
}
AEDIT(aedit_create)
{
AREA_DATA *pArea;
pArea = new_area();
area_last->next = pArea;
area_last = pArea; /* Thanks, Walker. */
ch->desc->pEdit = (void *) pArea;
SET_BIT(pArea->area_flags, AREA_ADDED);
send_to_char("Area Created.\n\r", ch);
return FALSE;
}
AEDIT(aedit_name)
{
AREA_DATA *pArea;
EDIT_AREA(ch, pArea);
if (argument[0] == '\0') {
send_to_char("Syntax: name [$name]\n\r", ch);
return FALSE;
}
free_string(pArea->name);
pArea->name = str_dup(argument);
send_to_char("Name set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_credits)
{
AREA_DATA *pArea;
EDIT_AREA(ch, pArea);
if (argument[0] == '\0') {
send_to_char("Syntax: credits [$credits]\n\r", ch);
return FALSE;
}
free_string(pArea->credits);
pArea->credits = str_dup(argument);
send_to_char("Credits set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_file)
{
AREA_DATA *pArea;
char file[MAX_STRING_LENGTH];
int length;
EDIT_AREA(ch, pArea);
one_argument(argument, file); /* Forces Lowercase */
if (argument[0] == '\0') {
send_to_char("Syntax: filename [$file]\n\r", ch);
return FALSE;
}
/*
* Simple Syntax Check.
*/
length = strlen(argument);
if (length > 8) {
send_to_char("No more than eight characters allowed.\n\r", ch);
return FALSE;
}
free_string(pArea->file_name);
strcat(file, ".are");
pArea->file_name = str_dup(file);
send_to_char("Filename set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_age)
{
AREA_DATA *pArea;
char age[MAX_STRING_LENGTH];
EDIT_AREA(ch, pArea);
one_argument(argument, age);
if (!is_number(age) || age[0] == '\0') {
send_to_char("Syntax: age [#xage]\n\r", ch);
return FALSE;
}
pArea->age = atoi(age);
send_to_char("Age set.\n\r", ch);
return TRUE;
}
#if 0 /* ROM OLC */
AEDIT(aedit_recall)
{
AREA_DATA *pArea;
char room[MAX_STRING_LENGTH];
int value;
EDIT_AREA(ch, pArea);
one_argument(argument, room);
if (!is_number(argument) || argument[0] == '\0') {
send_to_char("Syntax: recall [#xrvnum]\n\r", ch);
return FALSE;
}
value = atoi(room);
if (!get_room_index(value)) {
send_to_char("AEdit: Room vnum does not exist.\n\r", ch);
return FALSE;
}
pArea->recall = value;
send_to_char("Recall set.\n\r", ch);
return TRUE;
}
#endif /* ROM OLC */
AEDIT(aedit_security)
{
AREA_DATA *pArea;
char sec[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
int value;
EDIT_AREA(ch, pArea);
one_argument(argument, sec);
if (ch->pcdata->security < MAX_SECURITY) {
send_to_char
("You cannot set security without a security of 3.\n\r", ch);
return FALSE;
}
if (!is_number(sec) || sec[0] == '\0') {
send_to_char("Syntax: security [#xlevel]\n\r", ch);
return FALSE;
}
value = atoi(sec);
if (value > ch->pcdata->security || value < 0) {
if (ch->pcdata->security != 0) {
sprintf(buf, "Security is 0-%d.\n\r", ch->pcdata->security);
send_to_char(buf, ch);
} else
send_to_char("You can't set security.\n\r", ch);
return FALSE;
}
pArea->security = value;
send_to_char("Security set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_builder)
{
AREA_DATA *pArea;
char name[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
EDIT_AREA(ch, pArea);
one_argument(argument, name);
if (ch->pcdata->security < MAX_SECURITY) {
send_to_char("You must have a security of 3 to use this.\n\r", ch);
return FALSE;
}
if (name[0] == '\0') {
send_to_char("Syntax: builder [$name] -toggles builder\n\r", ch);
send_to_char("Syntax: builder All -allows everyone\n\r", ch);
return FALSE;
}
name[0] = UPPER(name[0]);
if (!str_infix(name, pArea->builders)) {
pArea->builders = string_replace(pArea->builders, name, "\0");
pArea->builders = string_unpad(pArea->builders);
if (pArea->builders[0] == '\0') {
free_string(pArea->builders);
pArea->builders = str_dup("None");
}
send_to_char("Builder removed.\n\r", ch);
return TRUE;
} else {
buf[0] = '\0';
if (!str_infix("None", pArea->builders)) {
pArea->builders =
string_replace(pArea->builders, "None", "\0");
pArea->builders = string_unpad(pArea->builders);
}
if (pArea->builders[0] != '\0') {
strcat(buf, pArea->builders);
strcat(buf, " ");
}
strcat(buf, name);
free_string(pArea->builders);
pArea->builders = string_proper(str_dup(buf));
send_to_char("Builder added.\n\r", ch);
send_to_char(pArea->builders, ch);
send_to_char("\n\r", ch);
return TRUE;
}
return FALSE;
}
AEDIT(aedit_vnum)
{
AREA_DATA *pArea;
char lower[MAX_STRING_LENGTH];
char upper[MAX_STRING_LENGTH];
int ilower;
int iupper;
EDIT_AREA(ch, pArea);
if (!IS_NPC(ch) && ch->pcdata->security < MAX_SECURITY) {
send_to_char("You must have a security of 3 to change vnums.\n\r",
ch);
return FALSE;
}
argument = one_argument(argument, lower);
one_argument(argument, upper);
if (!is_number(lower) || lower[0] == '\0'
|| !is_number(upper) || upper[0] == '\0') {
send_to_char("Syntax: vnum [#xlower] [#xupper]\n\r", ch);
return FALSE;
}
if ((ilower = atoi(lower)) > (iupper = atoi(upper))) {
send_to_char("AEdit: Upper must be larger then lower.\n\r", ch);
return FALSE;
}
if (!check_range(atoi(lower), atoi(upper))) {
send_to_char("AEdit: Range must include only this area.\n\r", ch);
return FALSE;
}
if (atoi(lower) <= 0 || atoi(upper) <= 0
|| atoi(lower) >= 30000 || atoi(upper) >= 30000) {
send_to_char("AEdit: Nice try!\n\r", ch);
return FALSE;
}
if (get_vnum_area(ilower)
&& get_vnum_area(ilower) != pArea) {
send_to_char("AEdit: Lower vnum already assigned.\n\r", ch);
return FALSE;
}
pArea->min_vnum = ilower;
send_to_char("Lower vnum set.\n\r", ch);
if (get_vnum_area(iupper)
&& get_vnum_area(iupper) != pArea) {
send_to_char("AEdit: Upper vnum already assigned.\n\r", ch);
return TRUE; /* The lower value has been set. */
}
pArea->max_vnum = iupper;
send_to_char("Upper vnum set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_lvnum)
{
AREA_DATA *pArea;
char lower[MAX_STRING_LENGTH];
int ilower;
int iupper;
EDIT_AREA(ch, pArea);
one_argument(argument, lower);
if (!is_number(lower) || lower[0] == '\0') {
send_to_char("Syntax: min_vnum [#xlower]\n\r", ch);
return FALSE;
}
if ((ilower = atoi(lower)) > (iupper = pArea->max_vnum)) {
send_to_char("AEdit: Value must be less than the max_vnum.\n\r",
ch);
return FALSE;
}
if (!check_range(ilower, iupper)) {
send_to_char("AEdit: Range must include only this area.\n\r", ch);
return FALSE;
}
if (get_vnum_area(ilower)
&& get_vnum_area(ilower) != pArea) {
send_to_char("AEdit: Lower vnum already assigned.\n\r", ch);
return FALSE;
}
pArea->min_vnum = ilower;
send_to_char("Lower vnum set.\n\r", ch);
return TRUE;
}
AEDIT(aedit_uvnum)
{
AREA_DATA *pArea;
char upper[MAX_STRING_LENGTH];
int ilower;
int iupper;
EDIT_AREA(ch, pArea);
one_argument(argument, upper);
if (!is_number(upper) || upper[0] == '\0') {
send_to_char("Syntax: max_vnum [#xupper]\n\r", ch);
return FALSE;
}
if ((ilower = pArea->min_vnum) > (iupper = atoi(upper))) {
send_to_char("AEdit: Upper must be larger then lower.\n\r", ch);
return FALSE;
}
if (!check_range(ilower, iupper)) {
send_to_char("AEdit: Range must include only this area.\n\r", ch);
return FALSE;
}
if (get_vnum_area(iupper)
&& get_vnum_area(iupper) != pArea) {
send_to_char("AEdit: Upper vnum already assigned.\n\r", ch);
return FALSE;
}
pArea->max_vnum = iupper;
send_to_char("Upper vnum set.\n\r", ch);
return TRUE;
}