--- 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)); }