--- deliantra/server/common/exp.C 2012/01/03 11:25:30 1.39
+++ deliantra/server/common/exp.C 2024/06/10 17:06:31 1.45
@@ -1,24 +1,25 @@
/*
* This file is part of Deliantra, the Roguelike Realtime MMORPG.
- *
- * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
+ *
+ * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team
+ * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 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
* 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.
- *
+ *
* You should have received a copy of the Affero GNU General Public License
* and the GNU General Public License along with this program. If not, see
* .
- *
+ *
* The authors can be reached via e-mail to
*/
@@ -157,7 +158,7 @@
* file.
*/
void
-reload_exp_table ()
+_reload_exp_table ()
{
int lastlevel = 0;
sint64 lastexp = -1;
@@ -179,6 +180,7 @@
thawer.get (settings.max_level);
sint64 newlevels [MAXNUMLEVELS];
+ newlevels [0] = 0;
while (thawer.next_line ())
{
@@ -196,9 +198,9 @@
lastlevel++;
- if (lastlevel > settings.max_level)
+ if (lastlevel > settings.max_level || lastlevel >= MAXNUMLEVELS - 1)
{
- LOG (llevError, "Too many levels specified in table (%d > %d)\n", lastlevel, settings.max_level);
+ LOG (llevError, "Too many levels specified in table (%d > %d (settings.max_level) or >= %d (MAXNUMLEVELS - 1))\n", lastlevel, settings.max_level, MAXNUMLEVELS - 1);
exit (1);
}
@@ -212,6 +214,10 @@
return;
}
+ // copy the last exp value one level higher, so we can take the difference to the "next" level
+ // eve4n for players at max. level
+ newlevels [lastlevel + 1] = newlevels [lastlevel];
+
memcpy (levels, newlevels, sizeof (levels));
}