Prevent client SP value overflow.

This commit is contained in:
MobiusDev
2018-04-11 07:55:02 +00:00
parent 769df7057a
commit 0da0ddbb8a
5 changed files with 14 additions and 13 deletions

View File

@@ -346,9 +346,9 @@ MinAbnormalStateSuccessRate = 10
MaxAbnormalStateSuccessRate = 90 MaxAbnormalStateSuccessRate = 90
# Maximum amount of SP a character can posses. # Maximum amount of SP a character can posses.
# Current retail limit is 50 billion, use -1 to set it to unlimited. # Current retail limit is max integer number, use -1 to set it to unlimited.
# Default: 50000000000 # Default: 2147483647
MaxSp = 50000000000 MaxSp = 2000000000
# Maximum number of allowed subclasses for every player. # Maximum number of allowed subclasses for every player.
# Default: 3 # Default: 3

View File

@@ -18,6 +18,7 @@ package handlers.admincommandhandlers;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.data.xml.impl.ClassListData; import com.l2jmobius.gameserver.data.xml.impl.ClassListData;
import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Object;
@@ -133,7 +134,7 @@ public class AdminExpSp implements IAdminCommandHandler
try try
{ {
expval = Long.parseLong(exp); expval = Long.parseLong(exp);
spval = Long.parseLong(sp); spval = Math.min(Long.parseLong(sp), Config.MAX_SP);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -172,11 +173,11 @@ public class AdminExpSp implements IAdminCommandHandler
final String exp = st.nextToken(); final String exp = st.nextToken();
final String sp = st.nextToken(); final String sp = st.nextToken();
long expval = 0; long expval = 0;
int spval = 0; long spval = 0;
try try
{ {
expval = Long.parseLong(exp); expval = Long.parseLong(exp);
spval = Integer.parseInt(sp); spval = Long.parseLong(sp);
} }
catch (Exception e) catch (Exception e)
{ {

View File

@@ -29,7 +29,7 @@ public class CharSelectInfoPackage
private String _name; private String _name;
private int _objectId = 0; private int _objectId = 0;
private long _exp = 0; private long _exp = 0;
private int _sp = 0; private long _sp = 0;
private int _clanId = 0; private int _clanId = 0;
private int _race = 0; private int _race = 0;
private int _classId = 0; private int _classId = 0;
@@ -302,12 +302,12 @@ public class CharSelectInfoPackage
_sex = sex; _sex = sex;
} }
public int getSp() public long getSp()
{ {
return _sp; return _sp;
} }
public void setSp(int sp) public void setSp(long sp)
{ {
_sp = sp; _sp = sp;
} }

View File

@@ -6715,7 +6715,7 @@ public final class L2PcInstance extends L2Playable
player.getStat().setExp(rset.getLong("exp")); player.getStat().setExp(rset.getLong("exp"));
player.setExpBeforeDeath(rset.getLong("expBeforeDeath")); player.setExpBeforeDeath(rset.getLong("expBeforeDeath"));
player.getStat().setLevel(rset.getByte("level")); player.getStat().setLevel(rset.getByte("level"));
player.getStat().setSp(rset.getInt("sp")); player.getStat().setSp(rset.getLong("sp"));
player.setWantsPeace(rset.getInt("wantspeace")); player.setWantsPeace(rset.getInt("wantspeace"));
@@ -7031,7 +7031,7 @@ public final class L2PcInstance extends L2Playable
subClass.setClassId(rs.getInt("class_id")); subClass.setClassId(rs.getInt("class_id"));
subClass.setLevel(rs.getByte("level")); subClass.setLevel(rs.getByte("level"));
subClass.setExp(rs.getLong("exp")); subClass.setExp(rs.getLong("exp"));
subClass.setSp(rs.getInt("sp")); subClass.setSp(rs.getLong("sp"));
subClass.setClassIndex(rs.getInt("class_index")); subClass.setClassIndex(rs.getInt("class_index"));
// Enforce the correct indexing of _subClasses against their class indexes. // Enforce the correct indexing of _subClasses against their class indexes.

View File

@@ -117,7 +117,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeF(charInfoPackage.getCurrentHp()); packet.writeF(charInfoPackage.getCurrentHp());
packet.writeF(charInfoPackage.getCurrentMp()); packet.writeF(charInfoPackage.getCurrentMp());
packet.writeD(charInfoPackage.getSp()); packet.writeD((int) charInfoPackage.getSp());
packet.writeQ(charInfoPackage.getExp()); packet.writeQ(charInfoPackage.getExp());
packet.writeF((float) (charInfoPackage.getExp() - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel())) / (ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel() + 1) - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel()))); // High packet.writeF((float) (charInfoPackage.getExp() - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel())) / (ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel() + 1) - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel()))); // High
// Five // Five
@@ -259,7 +259,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
charInfopackage.setSex(chardata.getInt("sex")); charInfopackage.setSex(chardata.getInt("sex"));
charInfopackage.setExp(chardata.getLong("exp")); charInfopackage.setExp(chardata.getLong("exp"));
charInfopackage.setSp(chardata.getInt("sp")); charInfopackage.setSp(chardata.getLong("sp"));
charInfopackage.setVitalityPoints(chardata.getInt("vitality_points")); charInfopackage.setVitalityPoints(chardata.getInt("vitality_points"));
charInfopackage.setClanId(chardata.getInt("clanid")); charInfopackage.setClanId(chardata.getInt("clanid"));