Prevent client SP value overflow.
This commit is contained in:
@@ -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
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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.
|
||||||
|
@@ -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"));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user