/* $Id: olc_social.c,v 1.666 2004/09/20 10:50:31 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 <string.h> #include "merc.h" #include "olc.h" #include "db/socials.h" #define EDIT_SOC(ch, soc) (soc = (social_t*) ch->desc->pEdit) DECLARE_OLC_FUN(soced_create ); DECLARE_OLC_FUN(soced_edit ); DECLARE_OLC_FUN(soced_show ); DECLARE_OLC_FUN(soced_list ); DECLARE_OLC_FUN(soced_name ); DECLARE_OLC_FUN(soced_min_pos ); DECLARE_OLC_FUN(soced_found_char ); DECLARE_OLC_FUN(soced_found_vict ); DECLARE_OLC_FUN(soced_found_notvict ); DECLARE_OLC_FUN(soced_noarg_char ); DECLARE_OLC_FUN(soced_noarg_room ); DECLARE_OLC_FUN(soced_self_char ); DECLARE_OLC_FUN(soced_self_room ); DECLARE_OLC_FUN(soced_notfound_char ); DECLARE_OLC_FUN(soced_all_char ); DECLARE_OLC_FUN(soced_all_room ); DECLARE_OLC_FUN(soced_all_self ); DECLARE_OLC_FUN(soced_level ); DECLARE_OLC_FUN(soced_age ); DECLARE_OLC_FUN(soced_alias ); DECLARE_OLC_FUN(soced_description ); static DECLARE_VALIDATE_FUN(validate_name); olc_cmd_t olc_cmds_soc[] = { { "create", soced_create, 0 }, { "edit", soced_edit, 0 }, { "touch", olced_dummy, 0 }, { "show", soced_show, 0 }, { "list", soced_list, 0 }, { "name", soced_name, 0, validate_name }, { "alias", soced_alias, 0 }, { "description", soced_description, 0 }, { "min_pos", soced_min_pos, 0, position_table}, { "found_char", soced_found_char, 0 }, { "found_vict", soced_found_vict, 0 }, { "found_notvict", soced_found_notvict,0 }, { "noarg_char", soced_noarg_char, 0 }, { "noarg_room", soced_noarg_room, 0 }, { "all_char", soced_all_char, 0 }, { "all_room", soced_all_room, 0 }, { "all_self", soced_all_self, 0 }, { "self_char", soced_self_char, 0 }, { "self_room", soced_self_room, 0 }, { "notfound_char", soced_notfound_char,0 }, { "age", soced_age, 0 }, { "level", soced_level, 0 }, { "commands", show_commands, 0 }, { NULL} }; OLC_FUN(soced_create) { social_t *soc; char arg[MAX_STRING_LENGTH]; if (!char_security(ch, "SECURITY_SOCIALS")) { char_puts("SocEd: Insufficient security for creating socials\n", ch); return FALSE; } one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'OLC CREATE'"); return FALSE; } if ((soc = social_lookup(arg, str_cmp))) { char_printf(ch, "SocEd: %s: already exists.\n", soc->name); return FALSE; } soc = social_new(); soc->name = str_dup(arg); ch->desc->pEdit = (void *) soc; OLCED(ch) = olced_lookup(ED_SOC); char_puts("Social created.\n",ch); return FALSE; } OLC_FUN(soced_edit) { social_t *soc; char arg[MAX_STRING_LENGTH]; if (!char_security(ch, "SECURITY_SOCIALS")) { char_puts("SocEd: Insufficient security.\n", ch); return FALSE; } one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'OLC EDIT'"); return FALSE; } if ((soc = social_lookup(arg, str_cmp)) == NULL) { char_printf(ch, "SocEd: %s: No such social.\n", arg); return FALSE; } ch->desc->pEdit = soc; OLCED(ch) = olced_lookup(ED_SOC); return FALSE; } #define SOC_SHOW(format, s) \ if (!IS_NULLSTR(s)) \ buf_printf(output, format, s); OLC_FUN(soced_show) { char arg[MAX_STRING_LENGTH]; BUFFER *output; social_t *soc; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { if (IS_EDIT(ch, ED_SOC)) EDIT_SOC(ch, soc); else { do_help(ch, "'OLC ASHOW'"); return FALSE; } } else { if ((soc = social_lookup(arg, str_prefix)) == NULL) { char_printf(ch, "SocEd: %s: No such social.\n", arg); return FALSE; } } output = buf_new(-1); buf_printf(output,"name: [%s]\n",soc->name); buf_printf(output,"alias: [%s]\n",soc->alias); buf_printf(output,"description: [%s]\n",soc->description); buf_printf(output,"min_pos: [%s]\n",flag_string(position_table, soc->min_pos)); SOC_SHOW("found_char: [%s]\n", soc->found_char); SOC_SHOW("found_vict: [%s]\n", soc->found_vict); SOC_SHOW("found_notvict: [%s]\n", soc->found_notvict); SOC_SHOW("noarg_char: [%s]\n", soc->noarg_char); SOC_SHOW("noarg_room: [%s]\n", soc->noarg_room); SOC_SHOW("self_char: [%s]\n", soc->self_char); SOC_SHOW("self_room: [%s]\n", soc->self_room); SOC_SHOW("all_char: [%s]\n", soc->all_char); SOC_SHOW("all_room: [%s]\n", soc->all_room); SOC_SHOW("all_self: [%s]\n", soc->all_self); buf_printf(output,"age: [%d]\n", soc->age); buf_printf(output,"level: [%d]\n", soc->level); page_to_char(buf_string(output), ch); buf_free(output); return FALSE; } OLC_FUN(soced_list) { int i; int col = 0; char arg[MAX_STRING_LENGTH]; one_argument(argument, arg, sizeof(arg)); for (i = 0; i < socials.nused; i++) { social_t *soc = (social_t*) VARR_GET(&socials, i); if (arg[0] && str_prefix(arg, soc->name)) continue; char_printf(ch, "%-12s", soc->name); if (++col % 6 == 0) char_puts("\n", ch); } if (col % 6) char_puts("\n", ch); return FALSE; } OLC_FUN(soced_name) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->name); } OLC_FUN(soced_min_pos) { social_t *soc; EDIT_SOC(ch, soc); return olced_flag32(ch, argument, cmd, &soc->min_pos); } OLC_FUN(soced_found_char) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->found_char); } OLC_FUN(soced_found_vict) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->found_vict); } OLC_FUN(soced_found_notvict) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->found_notvict); } OLC_FUN(soced_noarg_char) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->noarg_char); } OLC_FUN(soced_noarg_room) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->noarg_room); } OLC_FUN(soced_self_char) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->self_char); } OLC_FUN(soced_self_room) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->self_room); } OLC_FUN(soced_all_char) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->all_char); } OLC_FUN(soced_all_self) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->all_self); } OLC_FUN(soced_all_room) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->all_room); } OLC_FUN(soced_notfound_char) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->notfound_char); } OLC_FUN(soced_level) { social_t *soc; EDIT_SOC(ch, soc); return olced_number(ch, argument, cmd, &soc->level); } OLC_FUN(soced_age) { social_t *soc; EDIT_SOC(ch, soc); return olced_number(ch, argument, cmd, &soc->age); } OLC_FUN(soced_alias) { social_t *soc; EDIT_SOC(ch, soc); return olced_name(ch, argument, cmd, &soc->alias); } static VALIDATE_FUN(validate_name) { const char *name = (const char*) arg; social_t *soc, *soc2; EDIT_SOC(ch, soc); if (strpbrk(name, " \t")) { char_printf(ch, "SocEd: %s: illegal character in social name.\n", arg); return FALSE; } if ((soc2 = social_lookup(name, str_cmp)) && soc2 != soc) { char_printf(ch, "SocEd: %s: duplicate social name.\n", arg); return FALSE; } return TRUE; } OLC_FUN(soced_description) { social_t *soc; EDIT_SOC(ch, soc); return olced_str(ch, argument, cmd, &soc->description); }