Removed subclassLock from modifySubClass method.

This commit is contained in:
MobiusDevelopment
2022-01-04 23:52:50 +00:00
parent 7fce72b56d
commit d976ea9556
23 changed files with 1283 additions and 1645 deletions

View File

@@ -10161,69 +10161,56 @@ public class Player extends Playable
*/
public boolean modifySubClass(int classIndex, int newClassId)
{
if (_subclassLock)
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement deleteHennas = con.prepareStatement(DELETE_CHAR_HENNAS);
PreparedStatement deleteShortcuts = con.prepareStatement(DELETE_CHAR_SHORTCUTS);
PreparedStatement deleteSkillReuse = con.prepareStatement(DELETE_SKILL_SAVE);
PreparedStatement deleteSkills = con.prepareStatement(DELETE_CHAR_SKILLS);
PreparedStatement deleteSubclass = con.prepareStatement(DELETE_CHAR_SUBCLASS))
{
// Remove all henna info stored for this sub-class.
deleteHennas.setInt(1, getObjectId());
deleteHennas.setInt(2, classIndex);
deleteHennas.execute();
// Remove all shortcuts info stored for this sub-class.
deleteShortcuts.setInt(1, getObjectId());
deleteShortcuts.setInt(2, classIndex);
deleteShortcuts.execute();
// Remove all effects info stored for this sub-class.
deleteSkillReuse.setInt(1, getObjectId());
deleteSkillReuse.setInt(2, classIndex);
deleteSkillReuse.execute();
// Remove all skill info stored for this sub-class.
deleteSkills.setInt(1, getObjectId());
deleteSkills.setInt(2, classIndex);
deleteSkills.execute();
// Remove all basic info stored about this sub-class.
deleteSubclass.setInt(1, getObjectId());
deleteSubclass.setInt(2, classIndex);
deleteSubclass.execute();
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Could not modify sub class for " + getName() + " to class index " + classIndex + ": " + e.getMessage(), e);
// This must be done in order to maintain data consistency.
getSubClasses().remove(classIndex);
return false;
}
_subclassLock = true;
try
// Notify to scripts before class is removed.
if (!getSubClasses().isEmpty()) // also null check
{
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement deleteHennas = con.prepareStatement(DELETE_CHAR_HENNAS);
PreparedStatement deleteShortcuts = con.prepareStatement(DELETE_CHAR_SHORTCUTS);
PreparedStatement deleteSkillReuse = con.prepareStatement(DELETE_SKILL_SAVE);
PreparedStatement deleteSkills = con.prepareStatement(DELETE_CHAR_SKILLS);
PreparedStatement deleteSubclass = con.prepareStatement(DELETE_CHAR_SUBCLASS))
{
// Remove all henna info stored for this sub-class.
deleteHennas.setInt(1, getObjectId());
deleteHennas.setInt(2, classIndex);
deleteHennas.execute();
// Remove all shortcuts info stored for this sub-class.
deleteShortcuts.setInt(1, getObjectId());
deleteShortcuts.setInt(2, classIndex);
deleteShortcuts.execute();
// Remove all effects info stored for this sub-class.
deleteSkillReuse.setInt(1, getObjectId());
deleteSkillReuse.setInt(2, classIndex);
deleteSkillReuse.execute();
// Remove all skill info stored for this sub-class.
deleteSkills.setInt(1, getObjectId());
deleteSkills.setInt(2, classIndex);
deleteSkills.execute();
// Remove all basic info stored about this sub-class.
deleteSubclass.setInt(1, getObjectId());
deleteSubclass.setInt(2, classIndex);
deleteSubclass.execute();
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Could not modify sub class for " + getName() + " to class index " + classIndex + ": " + e.getMessage(), e);
// This must be done in order to maintain data consistency.
getSubClasses().remove(classIndex);
return false;
}
// Notify to scripts before class is removed.
if (!getSubClasses().isEmpty()) // also null check
{
final int classId = getSubClasses().get(classIndex).getClassId();
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this);
}
getSubClasses().remove(classIndex);
}
finally
{
_subclassLock = false;
final int classId = getSubClasses().get(classIndex).getClassId();
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this);
}
getSubClasses().remove(classIndex);
return addSubClass(newClassId, classIndex);
}