--- deliantra/server/common/readable.C 2007/05/28 21:21:40 1.25 +++ deliantra/server/common/readable.C 2007/07/10 06:07:32 1.32 @@ -1,23 +1,22 @@ /* - * This file is part of Crossfire TRT, the Multiplayer Online Role Playing Game. + * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. * * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * - * Crossfire TRT is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. + * Crossfire TRT is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along - * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . * * The authors can be reached via e-mail to */ @@ -437,68 +436,68 @@ * subtype paramater in arch files! */ static readable_message_type readable_message_types[] = { - /*subtype 0 */ {0, 0}, + /*subtype 0 */ {0, 0, "info"}, /* book messages subtypes */ - /*subtype 1 */ {MSG_TYPE_BOOK, MSG_TYPE_BOOK_CLASP_1}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_CLASP_2}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_ELEGANT_1}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_ELEGANT_2}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_QUARTO_1}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_QUARTO_2}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_EVOKER}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_PRAYER}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_PYRO}, - /*subtype 10 */ {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_SORCERER}, - {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_SUMMONER}, + /*subtype 1 */ {MSG_TYPE_BOOK, MSG_TYPE_BOOK_CLASP_1, "readable-book-clasp-1"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_CLASP_2, "readable-book-clasp-2"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_ELEGANT_1, "readable-book-elegant-1"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_ELEGANT_2, "readable-book-elegant-2"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_QUARTO_1, "readable-book-quarto-1"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_QUARTO_2, "readable-book-quarto-2"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_EVOKER, "readable-book-spell-evocation"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_PRAYER, "readable-book-spell-praying"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_PYRO, "readable-book-spell-pyromancy"}, + /*subtype 10 */ {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_SORCERER, "readable-book-spell-sorcery"}, + {MSG_TYPE_BOOK, MSG_TYPE_BOOK_SPELL_SUMMONER, "readable-book-spell-summoning"}, /* card messages subtypes */ - {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_1}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_2}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_3}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_1}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_2}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_3}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_1}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_2}, - /*subtype 20 */ {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_3}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_1}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_2}, - {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_3}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_1, "readable-card-simple-1"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_2, "readable-card-simple-2"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_SIMPLE_3, "readable-card-simple-3"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_1, "readable-card-elegant-1"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_2, "readable-card-elegant-2"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_ELEGANT_3, "readable-card-elegant-3"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_1, "readable-card-strange-1"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_2, "readable-card-strange-2"}, + /*subtype 20 */ {MSG_TYPE_CARD, MSG_TYPE_CARD_STRANGE_3, "readable-card-strange-3"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_1, "readable-card-money-1"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_2, "readable-card-money-2"}, + {MSG_TYPE_CARD, MSG_TYPE_CARD_MONEY_3, "readable-card-money-3"}, /* Paper messages subtypes */ - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_1}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_3}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_OLD_1}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_OLD_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_NEW_1}, - /*subtype 30 */ {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_NEW_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_ENVELOPE_1}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_ENVELOPE_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_OLD_1}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_OLD_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_NEW_1}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_NEW_2}, - {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_MAGIC}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_1, "readable-paper-note-1"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_2, "readable-paper-note-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_NOTE_3, "readable-paper-note-3"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_OLD_1, "readable-paper-letter-old-1"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_OLD_2, "readable-paper-letter-old-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_NEW_1, "readable-paper-letter-new-1"}, + /*subtype 30 */ {MSG_TYPE_PAPER, MSG_TYPE_PAPER_LETTER_NEW_2, "readable-paper-letter-new-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_ENVELOPE_1, "readable-paper-envelope-1"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_ENVELOPE_2, "readable-paper-envelope-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_OLD_1, "readable-paper-scroll-old-1"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_OLD_2, "readable-paper-scroll-old-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_NEW_1, "readable-paper-scroll-new-1"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_NEW_2, "readable-paper-scroll-new-2"}, + {MSG_TYPE_PAPER, MSG_TYPE_PAPER_SCROLL_MAGIC, "readable-paper-scroll-magic"}, /* road signs messages subtypes */ - {MSG_TYPE_SIGN, MSG_TYPE_SIGN_BASIC}, - {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_LEFT}, - /*subtype 40 */ {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_RIGHT}, - {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_BOTH}, + {MSG_TYPE_SIGN, MSG_TYPE_SIGN_BASIC, "readable-sign-basic"}, + {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_LEFT, "readable-sign-dir-left"}, + /*subtype 40 */ {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_RIGHT, "readable-sign-dir-right"}, + {MSG_TYPE_SIGN, MSG_TYPE_SIGN_DIR_BOTH, "readable-sign-dir-both"}, /* stones and monument messages */ - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_1}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_2}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_3}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_1}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_2}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_3}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_1}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_2}, - /*subtype 50 */ {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_3}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_1}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_2}, - {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_3} + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_1, "readable-monument-stone-1"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_2, "readable-monument-stone-2"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STONE_3, "readable-monument-stone-3"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_1, "readable-monument-statue-1"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_2, "readable-monument-statue-2"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_STATUE_3, "readable-monument-statue-3"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_1, "readable-monument-gravestone-1"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_2, "readable-monument-gravestone-2"}, + /*subtype 50 */ {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_GRAVESTONE_3, "readable-monument-gravestone-3"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_1, "readable-monument-wall-1"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_2, "readable-monument-wall-2"}, + {MSG_TYPE_MONUMENT, MSG_TYPE_MONUMENT_WALL_3, "readable-monument-wall-3"} }; int last_readable_subtype = sizeof (readable_message_types) / sizeof (readable_message_type); @@ -750,14 +749,13 @@ did_init_mon_info = 1; - - for (at = first_archetype; at != NULL; at = at->next) + for_all_archetypes (at) { - if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE))) + if (QUERY_FLAG (at, FLAG_MONSTER) && (!QUERY_FLAG (at, FLAG_CHANGING) || QUERY_FLAG (at, FLAG_UNAGGRESSIVE))) { objectlink *mon = new objectlink; - mon->ob = &at->clone; + mon->ob = at; mon->next = first_mon_info; first_mon_info = mon; nrofmon++; @@ -971,7 +969,7 @@ t->authour = book->title; t->size = strlen (book->msg); t->msg_index = strtoint (book->msg); - t->archname = book->arch->name; + t->archname = book->arch->archname; t->level = book->level; t->next = tl->first_book; @@ -1444,16 +1442,16 @@ else sprintf (retbuf, "%sbelonging to the path of %s:\n", retbuf, spellpathnames[path]); - for (at = first_archetype; at != NULL; at = at->next) + for_all_archetypes (at) { /* Determine if this is an appropriate spell. Must * be of matching path, must be of appropriate type (prayer * or not), and must be within the valid level range. */ - if (at->clone.type == SPELL && at->clone.path_attuned & pnum && - ((at->clone.stats.grace && prayers) || (at->clone.stats.sp && !prayers)) && (at->clone.level < (level * 8))) + if (at->type == SPELL && at->path_attuned & pnum && + ((at->stats.grace && prayers) || (at->stats.sp && !prayers)) && (at->level < (level * 8))) { - assign (tmpbuf, at->clone.name); + assign (tmpbuf, at->object::name); if (book_overflow (retbuf, tmpbuf, booksize)) break; @@ -1537,7 +1535,7 @@ sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill"); if ((at = archetype::find (op_name)) != (archetype *) NULL) - op_name = at->clone.name; + op_name = at->object::name; else LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name); @@ -1557,12 +1555,12 @@ { sprintf (retbuf, "%sThe %s", retbuf, op_name); sprintf (title, "%s: %s", formula_book_name[RANDOM () % (sizeof (formula_book_name) / sizeof (char *))], op_name); - if (at->clone.title) + if (at->title) { strcat (retbuf, " "); - strcat (retbuf, at->clone.title); + strcat (retbuf, at->title); strcat (title, " "); - strcat (title, at->clone.title); + strcat (title, at->title); } } /* Lets name the book something meaningful ! */ @@ -1578,7 +1576,7 @@ at = archetype::find (formula->cauldron); sprintf (retbuf + strlen (retbuf), - " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place"); + " may be made at %s using the following ingredients:\n", at ? query_name (at) : "an unknown place"); for (next = formula->ingred; next != NULL; next = next->next) { @@ -1595,6 +1593,21 @@ } } +#define DESCRIBE_PATH(retbuf, variable, name) \ + if(variable) { \ + int i,j=0; \ + strcat(retbuf,"(" name ": "); \ + for(i=0; i 0) { sprintf (buf, " "); @@ -1846,8 +1858,7 @@ * and add_authour(). * 4) you may want separate authour/book name arrays in read.h */ - - msg_type = msg_type > 0 ? msg_type : (RANDOM () % 6); + msg_type = msg_type > 0 ? msg_type : (RANDOM () % 8); switch (msg_type) { case 1: /* monster attrib */ @@ -1986,6 +1997,7 @@ uint8 subtype = readable->subtype; if (subtype > last_readable_subtype) - return &(readable_message_types[0]); - return &(readable_message_types[subtype]); + return &readable_message_types[0]; + + return &readable_message_types[subtype]; }