ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/readable.C
(Generate patch)

Comparing deliantra/server/common/readable.C (file contents):
Revision 1.7 by root, Wed Sep 13 23:39:27 2006 UTC vs.
Revision 1.15 by pippijn, Wed Jan 3 00:08:17 2007 UTC

16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 20
21 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
22*/ 22*/
23 23
24 24
25/* This file contains code relevant to the BOOKS hack -- designed 25/* This file contains code relevant to the BOOKS hack -- designed
26 * to allow randomly occuring messages in non-magical texts. 26 * to allow randomly occuring messages in non-magical texts.
657 if (did_init_msgfile) 657 if (did_init_msgfile)
658 return; 658 return;
659 did_init_msgfile = 1; 659 did_init_msgfile = 1;
660 660
661 sprintf (fname, "%s/messages", settings.datadir); 661 sprintf (fname, "%s/messages", settings.datadir);
662 LOG (llevDebug, "Reading messages from %s...", fname); 662 LOG (llevDebug, "Reading messages from %s...\n", fname);
663 663
664 if ((fp = open_and_uncompress (fname, 0, &comp)) != NULL) 664 if ((fp = open_and_uncompress (fname, 0, &comp)) != NULL)
665 { 665 {
666 linked_char *tmp = NULL; 666 linked_char *tmp = NULL;
667 667
677 if (!strncmp (cp, "ENDMSG", 6)) 677 if (!strncmp (cp, "ENDMSG", 6))
678 { 678 {
679 if (strlen (msgbuf) > BOOK_BUF) 679 if (strlen (msgbuf) > BOOK_BUF)
680 { 680 {
681 LOG (llevDebug, "Warning: this string exceeded max book buf size:"); 681 LOG (llevDebug, "Warning: this string exceeded max book buf size:");
682 LOG (llevDebug, " %s", msgbuf); 682 LOG (llevDebug, " %s\n", msgbuf);
683 } 683 }
684 tmp->name = msgbuf; 684 tmp->name = msgbuf;
685 tmp->next = first_msg; 685 tmp->next = first_msg;
686 first_msg = tmp; 686 first_msg = tmp;
687 nrofmsg++; 687 nrofmsg++;
702 } 702 }
703 close_and_delete (fp, comp); 703 close_and_delete (fp, comp);
704 } 704 }
705 705
706#ifdef BOOK_MSG_DEBUG 706#ifdef BOOK_MSG_DEBUG
707 LOG (llevDebug, "\ninit_info_listfile() got %d messages.\n", nrofmsg); 707 LOG (llevDebug, "init_info_listfile() got %d messages.\n", nrofmsg);
708#endif 708#endif
709 LOG (llevDebug, "done.\n"); 709 LOG (llevDebug, "done.\n");
710} 710}
711 711
712 712
788 book->next = bl->first_book; 788 book->next = bl->first_book;
789 bl->first_book = book; 789 bl->first_book = book;
790 bl->number++; 790 bl->number++;
791 } 791 }
792 } 792 }
793 LOG (llevDebug, " book archives(used/avail): "); 793 LOG (llevDebug, "book archives(used/avail): \n");
794 for (bl = booklist, i = 0; bl != NULL && i < sizeof (max_titles) / sizeof (*max_titles); bl = bl->next, i++) 794 for (bl = booklist, i = 0; bl != NULL && i < sizeof (max_titles) / sizeof (*max_titles); bl = bl->next, i++)
795 { 795 {
796 LOG (llevDebug, "(%d/%d)", bl->number, max_titles[i]); 796 LOG (llevDebug, " (%d/%d)\n", bl->number, max_titles[i]);
797 } 797 }
798 LOG (llevDebug, "\n");
799 close_and_delete (fp, comp); 798 close_and_delete (fp, comp);
800 } 799 }
801 800
802#ifdef BOOK_MSG_DEBUG 801#ifdef BOOK_MSG_DEBUG
803 LOG (llevDebug, "\n init_book_archive() got %d titles.\n", nroftitle); 802 LOG (llevDebug, "init_book_archive() got %d titles.\n", nroftitle);
804#endif 803#endif
805 LOG (llevDebug, " done.\n"); 804 LOG (llevDebug, " done.\n");
806} 805}
807 806
808/* init_mon_info() - creates the linked list of pointers to 807/* init_mon_info() - creates the linked list of pointers to
815 archetype *at; 814 archetype *at;
816 static int did_init_mon_info = 0; 815 static int did_init_mon_info = 0;
817 816
818 if (did_init_mon_info) 817 if (did_init_mon_info)
819 return; 818 return;
819
820 did_init_mon_info = 1; 820 did_init_mon_info = 1;
821 821
822 822
823 for (at = first_archetype; at != NULL; at = at->next) 823 for (at = first_archetype; at != NULL; at = at->next)
824 { 824 {
825 if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE))) 825 if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE)))
826 { 826 {
827 objectlink *mon = (objectlink *) malloc (sizeof (objectlink)); 827 objectlink *mon = new objectlink;
828 828
829 mon->ob = &at->clone; 829 mon->ob = &at->clone;
830 mon->id = nrofmon;
831 mon->next = first_mon_info; 830 mon->next = first_mon_info;
832 first_mon_info = mon; 831 first_mon_info = mon;
833 nrofmon++; 832 nrofmon++;
834 } 833 }
835 } 834 }
835
836 LOG (llevDebug, "init_mon_info() got %d monsters\n", nrofmon); 836 LOG (llevDebug, "init_mon_info() got %d monsters\n", nrofmon);
837} 837}
838 838
839 839
840/* init_readable() - initialize linked lists utilized by 840/* init_readable() - initialize linked lists utilized by
849{ 849{
850 static int did_this; 850 static int did_this;
851 851
852 if (did_this) 852 if (did_this)
853 return; 853 return;
854
854 did_this = 1; 855 did_this = 1;
855 856
856 LOG (llevDebug, "Initializing reading data..."); 857 LOG (llevDebug, "Initialising reading data...\n");
857 init_msgfile (); 858 init_msgfile ();
858 init_book_archive (); 859 init_book_archive ();
859 init_mon_info (); 860 init_mon_info ();
860 LOG (llevDebug, " Done\n"); 861 LOG (llevDebug, " Done\n");
861 862
1097 1098
1098 /* alter book properties */ 1099 /* alter book properties */
1099 if ((tmpbook = get_archetype (t->archname)) != NULL) 1100 if ((tmpbook = get_archetype (t->archname)) != NULL)
1100 { 1101 {
1101 tmpbook->msg = book->msg; 1102 tmpbook->msg = book->msg;
1102 copy_object (tmpbook, book); 1103 tmpbook->copy_to (book);
1103 free_object (tmpbook); 1104 tmpbook->destroy ();
1104 } 1105 }
1105 1106
1106 book->title = t->authour; 1107 book->title = t->authour;
1107 book->name = t->name; 1108 book->name = t->name;
1108 book->level = t->level; 1109 book->level = t->level;
1465 * level is kinda high */ 1466 * level is kinda high */
1466 if (art->item->msg && (RANDOM () % 4 + 1) < level && !((strlen (art->item->msg) + strlen (buf)) > BOOK_BUF)) 1467 if (art->item->msg && (RANDOM () % 4 + 1) < level && !((strlen (art->item->msg) + strlen (buf)) > BOOK_BUF))
1467 strcat (buf, art->item->msg); 1468 strcat (buf, art->item->msg);
1468 1469
1469 /* properties of the artifact */ 1470 /* properties of the artifact */
1470 tmp = get_object (); 1471 tmp = object::create ();
1471 add_abilities (tmp, art->item); 1472 add_abilities (tmp, art->item);
1472 tmp->type = type; 1473 tmp->type = type;
1473 SET_FLAG (tmp, FLAG_IDENTIFIED); 1474 SET_FLAG (tmp, FLAG_IDENTIFIED);
1474 if ((ch = describe_item (tmp, NULL)) != NULL && strlen (ch) > 1) 1475 if ((ch = describe_item (tmp, NULL)) != NULL && strlen (ch) > 1)
1475 sprintf (buf, "%s Properties of this artifact include: \n %s \n", buf, ch); 1476 sprintf (buf, "%s Properties of this artifact include: \n %s \n", buf, ch);
1476 free_object (tmp); 1477 tmp->destroy ();
1477 /* add the buf if it will fit */ 1478 /* add the buf if it will fit */
1478 if (!book_overflow (retbuf, buf, booksize)) 1479 if (!book_overflow (retbuf, buf, booksize))
1479 strcat (retbuf, buf); 1480 strcat (retbuf, buf);
1480 else 1481 else
1481 break; 1482 break;
1611 archetype *at; 1612 archetype *at;
1612 1613
1613 /* preamble */ 1614 /* preamble */
1614 sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill"); 1615 sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill");
1615 1616
1616 if ((at = find_archetype (op_name)) != (archetype *) NULL) 1617 if ((at = archetype::find (op_name)) != (archetype *) NULL)
1617 op_name = at->clone.name; 1618 op_name = at->clone.name;
1618 else 1619 else
1619 LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name); 1620 LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name);
1620 1621
1621 /* item name */ 1622 /* item name */
1650 if (formula->ingred != NULL) 1651 if (formula->ingred != NULL)
1651 { 1652 {
1652 linked_char *next; 1653 linked_char *next;
1653 archetype *at; 1654 archetype *at;
1654 1655
1655 at = find_archetype (formula->cauldron); 1656 at = archetype::find (formula->cauldron);
1656 1657
1657 sprintf (retbuf + strlen (retbuf), 1658 sprintf (retbuf + strlen (retbuf),
1658 " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place"); 1659 " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place");
1659 1660
1660 for (next = formula->ingred; next != NULL; next = next->next) 1661 for (next = formula->ingred; next != NULL; next = next->next)
1978 strcpy (msgbuf, msgfile_msg (level, book_buf_size)); 1979 strcpy (msgbuf, msgfile_msg (level, book_buf_size));
1979 break; 1980 break;
1980 } 1981 }
1981 1982
1982 strcat (msgbuf, "\n"); /* safety -- we get ugly map saves/crashes w/o this */ 1983 strcat (msgbuf, "\n"); /* safety -- we get ugly map saves/crashes w/o this */
1984
1983 if (strlen (msgbuf) > 1) 1985 if (strlen (msgbuf) > 1)
1984 { 1986 {
1985 book->msg = msgbuf; 1987 book->msg = msgbuf;
1986 /* lets give the "book" a new name, which may be a compound word */ 1988 /* lets give the "book" a new name, which may be a compound word */
1987 change_book (book, msg_type); 1989 change_book (book, msg_type);
2016 delete title1; 2018 delete title1;
2017 } 2019 }
2018 2020
2019 delete tlist; 2021 delete tlist;
2020 } 2022 }
2023
2021 for (lmsg = first_msg; lmsg; lmsg = nextmsg) 2024 for (lmsg = first_msg; lmsg; lmsg = nextmsg)
2022 { 2025 {
2023 nextmsg = lmsg->next; 2026 nextmsg = lmsg->next;
2024 delete lmsg; 2027 delete lmsg;
2025 } 2028 }
2029
2026 for (monlink = first_mon_info; monlink; monlink = nextmon) 2030 for (monlink = first_mon_info; monlink; monlink = nextmon)
2027 { 2031 {
2028 nextmon = monlink->next; 2032 nextmon = monlink->next;
2029 free (monlink); 2033 delete monlink;
2030 } 2034 }
2031} 2035}
2032 2036
2033 2037
2034/***************************************************************************** 2038/*****************************************************************************

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines