--- deliantra/server/common/compat.C 2009/11/04 00:02:47 1.1 +++ deliantra/server/common/compat.C 2010/04/29 17:43:26 1.12 @@ -1,9 +1,9 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007,2008,2009 Marc Alexander Lehmann / Robin Redeker / the Deliantra team - * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team - * Copyright (©) 1992,2007 Frank Tore Johansen + * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2002 Mark Wedel & Crossfire Development Team + * Copyright (©) 1992 Frank Tore Johansen * * Deliantra is free software: you can redistribute it and/or modify it under * the terms of the Affero GNU General Public License as published by the @@ -36,7 +36,6 @@ #include "define.h" #include "path.h" - /* buf_overflow() - we don't want to exceed the buffer size of * buf1 by adding on buf2! Returns true if overflow will occur. */ @@ -59,26 +58,6 @@ ///////////////////////////////////////////////////////////////////////////// -static const char *const fatalmsgs[80] = { - "Failed to allocate memory", - "Failed repeatedly to load maps", - "Hashtable for archetypes is too small", - "Too many errors" -}; - -/* - * fatal() is meant to be called whenever a fatal signal is intercepted. - * It will call the emergency_save and the clean_tmp_files functions. - */ -void -fatal (int err) -{ - LOG (llevError, "Fatal: %s\n", fatalmsgs [err]); - cleanup (fatalmsgs[err], 1); -} - -///////////////////////////////////////////////////////////////////////////// - /* * The random functions here take luck into account when rolling random * dice or numbers. This function has less of an impact the larger the @@ -95,7 +74,7 @@ * not the recipient (ie, the poor slob getting hit). [garbled 20010916] */ int -random_roll (int r_min, int r_max, const object *op, int goodbad) +random_roll (int r_min, int r_max, const object *op, bool prefer_high) { r_max = max (r_min, r_max); @@ -119,34 +98,35 @@ * for exp loss calculations for players changing religions. */ sint64 -random_roll64 (sint64 r_min, sint64 r_max, const object *op, int goodbad) +random_roll64 (sint64 r_min, sint64 r_max, const object *op, bool prefer_high) { - sint64 omin = r_min; sint64 range = max (0, r_max - r_min + 1); int base = range > 2 ? 20 : 50; /* d2 and d3 are corner cases */ /* - * Make a call to get two 32 bit unsigned random numbers, and just to + * Make a call to get two 32 bit unsigned random numbers, and just do * a little bitshifting. */ sint64 ran = (sint64) rndm.next () ^ ((sint64) rndm.next () << 31); - if (op->type != PLAYER) - return ((ran % range) + r_min); - - int luck = op->stats.luck; - - if (rndm (base) < min (10, abs (luck))) + if (op->stats.luck) { - /* we have a winner */ - ((luck > 0) ? (luck = 1) : (luck = -1)); - range -= luck; - if (range < 1) - return (omin); /*check again */ + int luck = op->stats.luck; + + if (rndm (base) < min (10, abs (luck))) + { + /* we have a winner */ + luck = luck > 0 ? 1 : -1; + + range -= luck; + if (range < 1) + return r_min; /*check again */ - ((goodbad) ? (r_min += luck) : (range)); + if (prefer_high) + r_min += luck; - return (max (omin, min (r_max, (ran % range) + r_min))); + return clamp (ran % range + r_min, r_min, r_max); + } } return ran % range + r_min; @@ -160,18 +140,18 @@ * The args are num D size (ie 4d6) [garbled 20010916] */ int -die_roll (int num, int size, const object *op, int goodbad) +die_roll (int num, int size, const object *op, bool prefer_high) { - int min, luck, total, i, gotlucky; + int min_roll, luck, total, i, gotlucky; int diff = size; - min = 1; + min_roll = 1; luck = total = gotlucky = 0; int base = diff > 2 ? 20 : 50; /* d2 and d3 are corner cases */ if (size < 2 || diff < 1) { - LOG (llevError, "Calling die_roll with num=%d size=%d\n", num, size); + LOG (llevError | logBacktrace, "Calling die_roll with num=%d size=%d\n", num, size); return num; /* avoids a float exception */ } @@ -180,7 +160,7 @@ for (i = 0; i < num; i++) { - if (rndm (base) < MIN (10, abs (luck)) && !gotlucky) + if (rndm (base) < min (10, abs (luck)) && !gotlucky) { /* we have a winner */ gotlucky++; @@ -188,8 +168,8 @@ diff -= luck; if (diff < 1) return (num); /*check again */ - ((goodbad) ? (min += luck) : (diff)); - total += MAX (1, MIN (size, rndm (diff) + min)); + ((prefer_high) ? (min_roll += luck) : (diff)); + total += max (1, min (size, rndm (diff) + min_roll)); } else total += rndm (size) + 1; @@ -235,7 +215,7 @@ return path; } -void +static void path_normalize (char *path) { char *p; /* points to the beginning of the path not yet processed; this is @@ -316,107 +296,12 @@ return (path); } -char * -strcasestr_local (const char *s, const char *find) -{ - char c, sc; - size_t len; - - if ((c = *find++) != 0) - { - c = tolower (c); - len = strlen (find); - do - { - do - { - if ((sc = *s++) == 0) - return NULL; - } - while (tolower (sc) != c); - } - while (strncasecmp (s, find, len) != 0); - s--; - } - return (char *) s; -} - -/** - * open_and_uncompress() first searches for the original filename. If it exist, - * then it opens it and returns the file-pointer. - */ -FILE * -open_and_uncompress (const char *name, int flag, int *compressed) -{ - *compressed = 0; - return fopen (name, "r"); -} - -/* - * See open_and_uncompress(). - */ - -void -close_and_delete (FILE * fp, int compressed) -{ - fclose (fp); -} - -/* - * Strip out the media tags from a String. - * Warning the input string will contain the result string - */ -void -strip_media_tag (char *message) -{ - int in_tag = 0; - char *dest; - char *src; - - src = dest = message; - while (*src != '\0') - { - if (*src == '[') - { - in_tag = 1; - } - else if (in_tag && (*src == ']')) - in_tag = 0; - else if (!in_tag) - { - *dest = *src; - dest++; - } - src++; - } - *dest = '\0'; -} - -const char * -strrstr (const char *haystack, const char *needle) -{ - const char *lastneedle; - - lastneedle = NULL; - while ((haystack = strstr (haystack, needle)) != NULL) - { - lastneedle = haystack; - haystack++; - } - return lastneedle; - -} - #define EOL_SIZE (sizeof("\n")-1) void strip_endline (char *buf) { - if (strlen (buf) < sizeof ("\n")) - { - return; - } - if (!strcmp (buf + strlen (buf) - EOL_SIZE, "\n")) - buf[strlen (buf) - EOL_SIZE] = '\0'; + if (*buf && buf [strlen (buf) - 1] == '\n') + buf [strlen (buf) - 1] = '\0'; } /**