/* $Id: olc_help.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. * * * ************************************************************************************/ /************************************************************************************ * ANATOLIA 2.1 is copyright 1996-1997 Serdar BULUT, Ibrahim CANPUNAR * * ANATOLIA has been brought to you by ANATOLIA consortium * * Serdar BULUT {Chronos} bulut@rorqual.cc.metu.edu.tr * * Ibrahim Canpunar {Asena} canpunar@rorqual.cc.metu.edu.tr * * Murat BICER {KIO} mbicer@rorqual.cc.metu.edu.tr * * D.Baris ACAR {Powerman} dbacar@rorqual.cc.metu.edu.tr * * By using this code, you have agreed to follow the terms of the * * ANATOLIA license, in the file Anatolia/anatolia.licence * ***********************************************************************************/ /************************************************************************************ * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments 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 * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ************************************************************************************/ /************************************************************************************ * ROM 2.4 is copyright 1993-1995 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@pacinfo.com) * * Gabrielle Taylor (gtaylor@pacinfo.com) * * Brian Moore (rom@rom.efn.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * *************************************************************************************/ /************************************************************************************ * Copyright (c) 1998 fjoe <fjoe@iclub.nsu.ru> * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * 1. Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * * notice, this list of conditions and the following disclaimer in the * * documentation and/or other materials provided with the distribution. * * * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * * SUCH DAMAGE. * ************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "merc.h" #include "olc.h" #define EDIT_HELP(ch, help) (help = (HELP_DATA*) ch->desc->pEdit) DECLARE_OLC_FUN(helped_create ); DECLARE_OLC_FUN(helped_edit ); DECLARE_OLC_FUN(helped_touch ); DECLARE_OLC_FUN(helped_show ); DECLARE_OLC_FUN(helped_list ); DECLARE_OLC_FUN(helped_del ); DECLARE_OLC_FUN(helped_level ); DECLARE_OLC_FUN(helped_keyword ); DECLARE_OLC_FUN(helped_text ); olc_cmd_t olc_cmds_help[] = { { "create", helped_create, 0 }, { "edit", helped_edit, 0 }, { "touch", helped_touch, 0 }, { "show", helped_show, 0 }, { "list", helped_list, 0 }, { "delete_hl", show_commands, 0 }, { "delete_hlp", helped_del, 0 }, { "level", helped_level, 0 }, { "keywords", helped_keyword, 0 }, { "text", helped_text, 0 }, { "commands", show_commands, 0 }, { NULL } }; OLC_FUN(helped_create) { HELP_DATA *pHelp; AREA_DATA *pArea; if (ch->pcdata->security < SECURITY_HELPS) { char_puts("HelpEd: Insufficient security.\n", ch); return FALSE; } if (argument[0] == '\0') { do_help(ch, "'OLC CREATE'"); return FALSE; } if ((pHelp = help_lookup(1, argument)) != NULL) { char_printf(ch, "HelpEd: Help already exists in area %s (%s).\n", pHelp->area->name, pHelp->area->file_name); return FALSE; } if (IS_EDIT(ch, ED_HELP)) pArea = ((HELP_DATA*) ch->desc->pEdit)->area; else if (IS_EDIT(ch, ED_AREA)) pArea = ((AREA_DATA*) ch->desc->pEdit); else { char_puts("You must be editing an area or another help to create helps.\n", ch); return FALSE; } pHelp = help_new(); pHelp->level = 0; pHelp->keyword = str_dup(argument); pHelp->text = NULL; help_add(pArea, pHelp); ch->desc->pEdit = (void *)pHelp; OLCED(ch) = olced_lookup(ED_HELP); touch_area(pArea); char_puts("Help created.\n",ch); return FALSE; } OLC_FUN(helped_edit) { int num; char keyword[MAX_STRING_LENGTH]; HELP_DATA *pHelp; if (ch->pcdata->security < SECURITY_HELPS) { char_puts("HelpEd: Insufficient security.\n", ch); return FALSE; } num = number_argument(argument, keyword, sizeof(keyword)); if (keyword[0] == '\0') { do_help(ch, "'OLC EDIT'"); return FALSE; } if ((pHelp = help_lookup(num, keyword)) == NULL) { char_printf(ch, "HelpEd: %s: Help not found.\n", keyword); return FALSE; } ch->desc->pEdit = (void *)pHelp; OLCED(ch) = olced_lookup(ED_HELP); return FALSE; } OLC_FUN(helped_touch) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); return touch_area(pHelp->area); } OLC_FUN(helped_show) { BUFFER *output; HELP_DATA *pHelp; if (argument[0] == '\0') { if (IS_EDIT(ch, ED_HELP)) EDIT_HELP(ch, pHelp); else { do_help(ch, "'OLC ASHOW'"); return FALSE; } } else { int num; char keyword[MAX_INPUT_LENGTH]; num = number_argument(argument, keyword, sizeof(keyword)); if (keyword[0] == '\0') { do_help(ch, OLCED(ch) ? "'OLC EDIT'" : "'OLC ASHOW'"); return FALSE; } if ((pHelp = help_lookup(num, keyword)) == NULL) { char_printf(ch, "HelpEd: %s: Help not found.\n", keyword); return FALSE; } } output = buf_new(-1); buf_printf(output, "Level: [%d]\n" "Keywords: [%s]\n", pHelp->level, pHelp->keyword); mlstr_dump(output, "Text: ", pHelp->text); page_to_char(buf_string(output), ch); buf_free(output); return FALSE; } extern HELP_DATA *help_first; OLC_FUN(helped_list) { BUFFER *output; AREA_DATA *pArea = NULL; HELP_DATA *pHelp; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { if ((pArea = get_edited_area(ch)) == NULL) { do_help(ch, "'OLC ALIST'"); return FALSE; } } output = buf_new(-1); if (pArea) { buf_printf(output, "Available help topics in area '%s' [%d]:\n", pArea->name, pArea->vnum); for (pHelp = pArea->help_first; pHelp; pHelp = pHelp->next_in_area) buf_printf(output, " o %s\n", pHelp->keyword); } else { buf_printf(output, "Available help topics on keyword '%s':\n", arg); for (pHelp = help_first; pHelp; pHelp = pHelp->next) if (is_name(arg, pHelp->keyword)) buf_printf(output, " o %s\n", pHelp->keyword); } page_to_char(buf_string(output), ch); buf_free(output); return FALSE; } OLC_FUN(helped_level) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); return olced_number(ch, argument, cmd, &pHelp->level); } OLC_FUN(helped_keyword) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); return olced_str(ch, argument, cmd, &pHelp->keyword); } OLC_FUN(helped_text) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); return olced_mlstr_text(ch, argument, cmd, &pHelp->text); } OLC_FUN(helped_del) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); if (olced_busy(ch, ED_HELP, pHelp, NULL)) return FALSE; touch_area(pHelp->area); help_free(pHelp); char_puts("HelpEd: Help deleted.\n", ch); edit_done(ch->desc); return FALSE; }