Свернуть ↑
private void prepareToLogout()
{
if(_isLogout.getAndSet(true))
return;
setNetConnection(null);
setIsOnline(false);
getListeners().onExit();
if(isFlying() && !checkLandingState())
_stablePoint = TeleportUtils.getRestartLocation(this, RestartType.TO_VILLAGE);
if(isCastingNow())
abortCast(true, true);
Party party = getParty();
if(party != null)
{
if(isFestivalParticipant())
party.broadcastMessageToPartyMembers(getName() + " has been removed from the upcoming festival."); //TODO [G1ta0] custom message
leaveParty();
}
CursedWeaponsManager.getInstance().doLogout(this);
if(isInObserverMode()) {
if(getOlympiadObserveGame() == null)
leaveObserverMode();
else
leaveOlympiadObserverMode(true);
_observerMode.set(OBSERVER_NONE);
}
if(isInOlympiadMode() || getOlympiadGame() != null)
Olympiad.logoutPlayer(this);
stopFishing();
if(_stablePoint != null)
teleToLocation(_stablePoint);
Summon pet = getPet();
if(pet != null)
{
pet.saveEffects();
pet.unSummon();
}
_friendList.notifyFriends(false);
if(isProcessingRequest())
getRequest().cancel();
stopAllTimers();
if(isInBoat())
getBoat().removePlayer(this);
SubUnit unit = getSubUnit();
UnitMember member = unit == null ? null : unit.getUnitMember(getObjectId());
if(member != null)
{
int sponsor = member.getSponsor();
int apprentice = getApprentice();
PledgeShowMemberListUpdate memberUpdate = new PledgeShowMemberListUpdate(this);
for(Player clanMember : _clan.getOnlineMembers(getObjectId()))
{
clanMember.sendPacket(memberUpdate);
if(clanMember.getObjectId() == sponsor)
clanMember.sendPacket(new SystemMessage(SystemMessage.S1_YOUR_CLAN_ACADEMYS_ APPRENTICE_HAS_LOGGED_OUT).addString(_name));
else if(clanMember.getObjectId() == apprentice)
clanMember.sendPacket(new SystemMessage(SystemMessage.S1_YOUR_CLAN_ACADEMYS_ SPONSOR_HAS_LOGGED_OUT).addString(_name));
}
member.setPlayerInstance(this, true);
}
FlagItemAttachment attachment = getActiveWeaponFlagAttachment();
if(attachment != null)
attachment.onLogout(this);
if(CursedWeaponsManager.getInstance().getCursedWea pon(getCursedWeaponEquippedId()) != null)
CursedWeaponsManager.getInstance().getCursedWeapon (getCursedWeaponEquippedId()).setPlayer(null);
MatchingRoom room = getMatchingRoom();
if(room != null)
{
if(room.getLeader() == this)
room.disband();
else
room.removeMember(this, false);
}
setMatchingRoom(null);
MatchingRoomManager.getInstance().removeFromWaitin gList(this);
destroyAllTraps();
if(_decoy != null)
{
_decoy.unSummon();
_decoy = null;
}
stopPvPFlag();
Reflection ref = getReflection();
if(ref != ReflectionManager.DEFAULT)
{
if(ref.getReturnLoc() != null)
_stablePoint = ref.getReturnLoc();
ref.removeObject(this);
}
try
{
getInventory().store();
getRefund().clear();
}
catch(Throwable t)
{
_log.error("", t);
}
try
{
store(false);
}
catch(Throwable t)
{
_log.error("", t);
}
}