/* $Id: olc_rpcode.c,v 1.666 2004/09/20 10:50:30 shrike Exp $ */
/************************************************************************************
* Copyright 2004 Astrum Metaphora consortium *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
************************************************************************************/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "olc.h"
#define EDIT_RPCODE(ch, rpcode) (rpcode = (MPCODE*) ch->desc->pEdit)
extern MPCODE *get_prog_index(int vnum, int type);
/* Mobprog editor */
DECLARE_OLC_FUN(rped_create );
DECLARE_OLC_FUN(rped_edit );
DECLARE_OLC_FUN(rped_touch );
DECLARE_OLC_FUN(rped_show );
DECLARE_OLC_FUN(rped_list );
DECLARE_OLC_FUN(rped_code );
olc_cmd_t olc_cmds_rpcode[] =
{
/* { command function }, */
{ "create", rped_create, 5 },
{ "edit", rped_edit, 0 },
{ "touch", rped_touch, 0 },
{ "show", rped_show, 0 },
{ "list", rped_list, 0 },
{ "code", rped_code, 5 },
{ "commands", show_commands, 0 },
{ NULL }
};
OLC_FUN(rped_create)
{
MPCODE *rpcode;
int value;
AREA_DATA *pArea;
char arg[MAX_STRING_LENGTH];
one_argument(argument, arg, sizeof(arg));
value = atoi(arg);
if (!value)
{
do_help(ch, "'OLC CREATE'");
return FALSE;
}
pArea = area_vnum_lookup(value);
if (!pArea)
{
char_puts("RPEd: That vnum is not assigned an area.\n", ch);
return FALSE;
}
if (!IS_BUILDER(ch, pArea))
{
char_puts("RPEd: Insufficient security.\n", ch);
return FALSE;
}
if (rpcode_lookup(value))
{
char_puts("RPEd: vnum already exists.\n", ch);
return FALSE;
}
rpcode = rpcode_new();
rpcode->vnum = value;
rpcode_add(rpcode);
ch->desc->pEdit = (void *)rpcode;
OLCED(ch) = olced_lookup(ED_RPCODE);
touch_area(pArea);
char_puts("RPEd: rpcode created.\n", ch);
return FALSE;
}
OLC_FUN(rped_edit)
{
MPCODE *rpcode;
AREA_DATA *pArea;
int value;
char arg[MAX_INPUT_LENGTH];
one_argument(argument, arg, sizeof(arg));
if (arg[0] == '\0') {
do_help(ch, "'OLC EDIT'");
return FALSE;
}
value = atoi(arg);
rpcode = rpcode_lookup(value);
if (!rpcode)
{
char_puts("RPEd: Vnum does not exist.\n", ch);
return FALSE;
}
pArea = area_vnum_lookup(rpcode->vnum);
if (!IS_BUILDER(ch, pArea))
{
char_puts("RPEd: Insufficient security.\n", ch);
return FALSE;
}
ch->desc->pEdit = (void*) rpcode;
OLCED(ch) = olced_lookup(ED_RPCODE);
return FALSE;
}
OLC_FUN(rped_touch)
{
MPCODE *rpcode;
EDIT_RPCODE(ch, rpcode);
return touch_vnum(rpcode->vnum);
}
OLC_FUN(rped_show)
{
MPCODE *rpcode;
char arg[MAX_INPUT_LENGTH];
one_argument(argument, arg, sizeof(arg));
if (arg[0] == '\0')
{
if (IS_EDIT(ch, ED_RPCODE))
EDIT_RPCODE(ch, rpcode);
else
{
do_help(ch, "'OLC ASHOW'");
return FALSE;
}
}
else
{
int value = atoi(arg);
rpcode = rpcode_lookup(value);
if (!rpcode)
{
char_puts("RPEd: Vnum does not exist.\n", ch);
return FALSE;
}
}
char_printf(ch, "Vnum: [%d]\n" "Code:\n%s\n", rpcode->vnum, rpcode->code);
return FALSE;
}
OLC_FUN(rped_list)
{
int count = 1;
MPCODE *rpcode;
BUFFER *buffer;
bool fAll = !str_cmp(argument, "all");
char blah;
AREA_DATA *ad;
buffer = buf_new(-1);
for (rpcode = rpcode_list; rpcode !=NULL; rpcode = rpcode->next)
if (fAll || ENTRE(ch->in_room->area->min_vnum, rpcode->vnum, ch->in_room->area->max_vnum))
{
ad = area_vnum_lookup(rpcode->vnum);
if (ad == NULL)
blah = '?';
else
if (IS_BUILDER(ch, ad))
blah = '*';
else
blah = ' ';
buf_printf(buffer, "[%6d] (%c) %5d\n", count, blah, rpcode->vnum);
count++;
}
if (count == 1) {
if (fAll)
buf_add(buffer, "No roomprogs found.\n");
else
buf_add(buffer, "No roomprogs found in this area.\n");
}
page_to_char(buf_string(buffer), ch);
buf_free(buffer);
return FALSE;
}
OLC_FUN(rped_code)
{
MPCODE *rpcode;
EDIT_RPCODE(ch, rpcode);
return olced_str_text(ch, argument, cmd, &rpcode->code);
}