Jump to content
  • 0

Olympiad issue with re-register after defaulted.


GameBlonD

Question

Hello ,

 

I have a problem regarding olympiad

The problem is that if player 1 logout before moved into olympiad arena player 1 and player 2 can't register - unregister from olympiad matchs.

They get message already registered but they never moved into olympiad after this error.

 

Code:

 

	protected boolean checkDefaulted()
{
	_game._playerOne = L2World.getInstance().getPlayer(_game._playerOneName);
	_game._players.set(0, _game._playerOne);
	_game._playerTwo = L2World.getInstance().getPlayer(_game._playerTwoName);
	_game._players.set(1, _game._playerTwo);

	for (int i = 0; i < 2; i++)
	{
		boolean defaulted = false;
		L2PcInstance player = _game._players.get(i);
		if (player != null)
			player.getOlympiadManagement().setOlympiadGameId(_game._stadiumID);
		L2PcInstance otherPlayer = _game._players.get(i ^ 1);
		SystemMessage sm = null;

		if (player == null)
		{
			defaulted = true;
		}
		else if (player.isDead())
		{
			sm = new SystemMessage(SystemMessageId.C1_CANNOT_PARTICIPATE_OLYMPIAD_WHILE_DEAD);
			sm.addPcName(player);
			defaulted = true;
		}
		else if (player.isSubClassActive())
		{
			sm = new SystemMessage(SystemMessageId.C1_CANNOT_PARTICIPATE_IN_OLYMPIAD_WHILE_CHANGED_TO_SUB_CLASS);
			sm.addPcName(player);
			defaulted = true;
		}
		else if (player.isCursedWeaponEquipped())
		{
			sm = new SystemMessage(SystemMessageId.C1_CANNOT_JOIN_OLYMPIAD_POSSESSING_S2);
			sm.addPcName(player);
			sm.addItemName(player.getCursedWeaponEquippedId());
			defaulted = true;
		}
		else if (player.getInventoryLimit() * 0.8 <= player.getInventory().getSize())
		{
			sm = new SystemMessage(SystemMessageId.C1_CANNOT_PARTICIPATE_IN_OLYMPIAD_INVENTORY_SLOT_EXCEEDS_80_PERCENT);
			sm.addPcName(player);
			defaulted = true;
		}

		if (defaulted)
		{
			if (player != null)
				player.sendPacket(sm);
			if (otherPlayer != null)
				otherPlayer.sendPacket(SystemMessageId.THE_GAME_CANCELLED_DUE_TO_OPPONENT);
			if (i == 0)
				_game._playerOneDefaulted = true;
			else
				_game._playerTwoDefaulted = true;
		}
	}
	return _game._playerOneDefaulted || _game._playerTwoDefaulted;
}

public void run()
{
	_started = true;
	if (_game != null)
	{
		if (_game._playerOne == null || _game._playerTwo == null)
		{
			return;
		}

		if (teleportCountdown())
			runGame();

		_game._competitionStarted = false;
		_terminated = true;
		_game.validateWinner();
		_game.PlayersStatusBack();
		_game.cleanEffects();

		if (_game._gamestarted)
		{
			_game._gamestarted = false;
			OlympiadManager.STADIUMS[_game._stadiumID].closeDoors();
			try
			{
				_game.portPlayersBack();
			}
			catch (final Exception e)
			{
				_log.log(Level.SEVERE, "Problem occured while porting "
				        + "players back from oly", e);
			}
		}

		if (OlympiadManager.STADIUMS[_game._stadiumID].getSpectators() != null)
		{
			for (L2PcInstance spec : OlympiadManager.STADIUMS[_game._stadiumID].getSpectators())
			{
				if (spec != null)
					spec.sendPacket(new ExOlympiadMatchEnd());
			}
		}

		if (_game._spawnOne != null)
		{
			_game._spawnOne.getLastSpawn().deleteMe();
			_game._spawnOne = null;
		}
		if (_game._spawnTwo != null)
		{
			_game._spawnTwo.getLastSpawn().deleteMe();
			_game._spawnTwo = null;
		}

		_game.clearPlayers();
		OlympiadManager.getInstance().removeOlympiadGame(_game);
		_game = null;
	}
}

 

I tried to add _game.clearPlayers(); after _game._playerTwoDefaulted = true;

This fixed the problem with register but player that make force logout before game start don't loose any points.

 

Thanks for your time.

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Guest
This topic is now closed to further replies.


×
×
  • Create New...