Jump to content

r2r2

Members
  • Posts

    20
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by r2r2

  1. Well, I can not say its better or not, because both pack are base on Rebelion/Fandc files and Both have same Mods, except Mythras have some changes but nothing special.

     

    Also if someone wants to open a server using Mythras files, go ahead, its nothing wrong with these sources but I guarantee you will fail like "Mythras Team". (Twice).

     

    Cheers

     

    Thank you for your explanations Akar0  ;)

  2. How do you remove the AVA Lineage 2 logo please when launching the game please?

     

     

     

    And client crash when create new character:

     

    General protection fault!
     
    History: FDepthOfField::GetFocus <- UDOFEffect::PostRender <- FPlayerSceneNode::Render <- ViewportLock1 <- Precaching <- UGameEngine::Draw <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- MainLoop
     
    Why please?
  3. Here is the code FightClubArena.java:

    package events.FightClub;
    
    import l2r.commons.threading.RunnableImpl;
    import l2r.commons.util.Rnd;
    import l2r.gameserver.Config;
    import l2r.gameserver.ThreadPoolManager;
    import l2r.gameserver.data.xml.holder.InstantZoneHolder;
    import l2r.gameserver.listener.actor.OnDeathListener;
    import l2r.gameserver.listener.actor.player.OnPlayerExitListener;
    import l2r.gameserver.model.Creature;
    import l2r.gameserver.model.Player;
    import l2r.gameserver.model.actor.listener.CharListenerList;
    import l2r.gameserver.model.base.TeamType;
    import l2r.gameserver.model.entity.Reflection;
    import l2r.gameserver.model.instances.DoorInstance;
    
    import l2r.gameserver.templates.InstantZone;
    
    import l2r.gameserver.utils.ItemFunctions;
    
    import java.util.concurrent.ScheduledFuture;
    
    public class FightClubArena extends FightClubManager implements OnDeathListener, OnPlayerExitListener
    {
    	protected static final String CLASS_NAME = "events.FightClub.FightClubManager";
    
    	private ScheduledFuture<?> _endTask;
    	public static ScheduledFuture<?> _startTask;
    
    	private boolean _isEnded = false;
    	private Player _player1;
    	private Player _player2;
    	private static int _itemId;
    	private static int _itemCount;
    	private static Reflection _reflection;
    	private InstantZone _instantZone = InstantZoneHolder.getInstance().getInstantZone(Rnd.get(609, 612));
    
    	public FightClubArena(Player player1, Player player2, int itemId, int itemCount, Reflection reflection)
    	{
    		//Подключаем листенеры персонажа
    		CharListenerList.addGlobal(this);
    
    		//Инициализируем переменные класса
    		_player1 = player1;
    		_player2 = player2;
    		_itemId = itemId;
    		_itemCount = itemCount;
    		_reflection = reflection;
    
    		_reflection.init(_instantZone);
    
    		//Инициализируем сражение
    		initBattle();
    	}
    
    	/**
    	 * Вызывается при выходе игрока
    	 */
    	@Override
    	public void onPlayerExit(Player player)
    	{
    		if((player.getStoredId() == _player1.getStoredId() || player.getStoredId() == _player2.getStoredId()) && !_isEnded)
    		{
    			stopEndTask();
    			setLoose((Player) player);
    		}
    	}
    
    	/**
    	 * Вызывается при смерти игрока
    	 */
    	@Override
    	public void onDeath(Creature actor, Creature killer)
    	{
    		if((actor.getStoredId() == _player1.getStoredId() || actor.getStoredId() == _player2.getStoredId()) && !_isEnded)
    		{
    			stopEndTask();
    			setLoose((Player) actor);
    		}
    	}
    
    	private void stopEndTask()
    	{
    		_endTask.cancel(false);
    		_endTask = ThreadPoolManager.getInstance().schedule(new EndTask(), 3000);
    	}
    
    	/**
    	 * Запускает таймеры боя
    	 */
    	private void initBattle()
    	{
    		final Object[] args = { _player1, _player2, _reflection };
    		_startTask = ThreadPoolManager.getInstance().scheduleAtFixedDelay(new StartTask(_player1, _player2), Config.ARENA_TELEPORT_DELAY * 1000, 1000);
    		_endTask = ThreadPoolManager.getInstance().schedule(new EndTask(), ((Config.ARENA_TELEPORT_DELAY + Config.FIGHT_TIME)) * 1000);
    		sayToPlayers("scripts.events.fightclub.TeleportThrough", Config.ARENA_TELEPORT_DELAY, false, _player1, _player2);
    		executeTask(CLASS_NAME, "resurrectPlayers", args, Config.ARENA_TELEPORT_DELAY * 1000 - 600);
    		executeTask(CLASS_NAME, "healPlayers", args, Config.ARENA_TELEPORT_DELAY * 1000 - 500);
    		executeTask(CLASS_NAME, "teleportPlayersToColliseum", args, Config.ARENA_TELEPORT_DELAY * 1000);
    	}
    
    	/**
    	 * Удаляет ауру у игроков
    	 */
    	private void removeAura()
    	{
    		_player1.setTeam(TeamType.NONE);
    		_player2.setTeam(TeamType.NONE);
    	}
    
    	/**
    	 * Выдаёт награду
    	 */
    	private void giveReward(Player player)
    	{
    		final String name = ItemFunctions.createItem(_itemId).getTemplate().getName();
    		sayToPlayer(player, "scripts.events.fightclub.YouWin", false, _itemCount * 2, name);
    		addItem(player, _itemId, _itemCount * 2);
    	}
    
    	private static String getItemName()
    	{
    		final String name = ItemFunctions.createItem(_itemId).getTemplate().getName();
    		return name;
    	}
    
    	private static int getItemCount()
    	{
    		return _itemCount;
    	}
    	
    	/**
    	 * Выводит скорбящее сообщение проигравшему ;)
    	 * @param player
    	 */
    	private void setLoose(Player player)
    	{
    		if(player.getStoredId() == _player1.getStoredId())
    			giveReward(_player2);
    		else if(player.getStoredId() == _player2.getStoredId())
    			giveReward(_player1);
    		_player1.unsetVar("FightClubRate");
    		_player2.unsetVar("FightClubRate");
    		_isEnded = true;
    		sayToPlayer(player, "scripts.events.fightclub.YouLoose", false, new Object[0]);
    	}
    
    	/**
    	 * Метод, вызываемый при ничьей. Рассчитывает победителя или объявлет ничью.
    	 */
    	private void draw()
    	{
    		if(!Config.ALLOW_DRAW && _player1.getCurrentCp() != _player1.getMaxCp() || _player2.getCurrentCp() != _player2.getMaxCp() || _player1.getCurrentHp() != _player1.getMaxHp() || _player2.getCurrentHp() != _player2.getMaxHp())
    		{
    			if(_player1.getCurrentHp() != _player1.getMaxHp() || _player2.getCurrentHp() != _player2.getMaxHp())
    			{
    				if(_player1.getMaxHp() / _player1.getCurrentHp() > _player2.getMaxHp() / _player2.getCurrentHp())
    				{
    					giveReward(_player1);
    					setLoose(_player2);
    					return;
    				}
    				else
    				{
    					giveReward(_player2);
    					setLoose(_player1);
    					return;
    				}
    			}
    			else
    			{
    				if(_player1.getMaxCp() / _player1.getCurrentCp() > _player2.getMaxCp() / _player2.getCurrentCp())
    				{
    					giveReward(_player1);
    					setLoose(_player2);
    					return;
    				}
    				else
    				{
    					giveReward(_player2);
    					setLoose(_player1);
    					return;
    				}
    			}
    
    		}
    		sayToPlayers("scripts.events.fightclub.Draw", true, _player1, _player2);
    		addItem(_player1, _itemId, _itemCount);
    		addItem(_player2, _itemId, _itemCount);
    	}
    
    	/**
    	 * Возващает ссылку на первого игрока
    	 * @return - ссылка на игрока
    	 */
    	protected Player getPlayer1()
    	{
    		return _player1;
    	}
    
    	/**
    	 * Возващает ссылку на второго игрока
    	 * @return - ссылка на игрока
    	 */
    	protected Player getPlayer2()
    	{
    		return _player2;
    	}
    
    	/**
    	 * Возвращает отражение
    	 * @return - reflection
    	 */
    	protected Reflection getReflection()
    	{
    		return _reflection;
    	}
    
    	/**
    	 * Вызывает метод суперкласса, удаляющий рефлекшен
    	 * @param arena - ссылка на арену
    	 */
    	private void delete(long delay)
    	{
    		final FightClubArena[] arg = { this };
    		executeTask(CLASS_NAME, "deleteArena", arg, delay);
    	}
    
    	protected static class StartTask extends RunnableImpl
    	{
    
    		private Player _player1;
    		private Player _player2;
    		private int _second;
    
    		public StartTask(Player player1, Player player2)
    		{
    			_player1 = player1;
    			_player2 = player2;
    			_second = Config.TIME_TO_PREPARATION;
    		}
    
    		@Override
    		public void runImpl() throws Exception
    		{
    			addBuffers();
    			switch(_second)
    			{
    				case 60:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 30:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 20:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 10:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 5:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 3:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 2:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 1:
    					sayToPlayers("scripts.events.fightclub.TimeToStart", _second, false, _player1, _player2);
    					break;
    				case 0:
    					openDoors();
    					deleteBuffers();
    					startBattle(_player1, _player2);
    					_startTask.cancel(true);
    					_startTask = null;
    					if(Config.FIGHT_CLUB_ANNOUNCE_START_TO_SCREEN)
    						sayStartToAllPlayers("scripts.events.fightclub.AnnounceStartBatle", _player1, _player2, getItemName(), getItemCount(), false);
    			}
    			_second -= 1;
    		}
    	}
    
    	private static String getBufferSpawnGroup(int instancedZoneId)
    	{
    		String bufferGroup = null;
    		switch(instancedZoneId)
    		{
    			case 147:
    				bufferGroup = "olympiad_147_buffers";
    				break;
    			case 148:
    				bufferGroup = "olympiad_148_buffers";
    				break;
    			case 149:
    				bufferGroup = "olympiad_149_buffers";
    				break;
    			case 150:
    				bufferGroup = "olympiad_150_buffers";
    				break;
    		}
    		return bufferGroup;
    	}
    
    	private static void addBuffers()
    	{
    		if(getBufferSpawnGroup(_reflection.getInstancedZoneId()) != null)
    			_reflection.spawnByGroup(getBufferSpawnGroup(_reflection.getInstancedZoneId()));
    	}
    
    	private static void deleteBuffers()
    	{
    		_reflection.despawnByGroup(getBufferSpawnGroup(_reflection.getInstancedZoneId()));
    	}
    	
    	private class EndTask extends RunnableImpl
    	{
    		private final Object[] args = { _player1, _player2, new Object[0] };
    
    		@Override
    		public void runImpl() throws Exception
    		{
    			removeAura();
    			if(!_isEnded)
    			{
    				draw();
    				_isEnded = true;
    				stopEndTask();
    			}
    			sayToPlayers("scripts.events.fightclub.TeleportBack", Config.TIME_TELEPORT_BACK, false, _player1, _player2);
    			executeTask(CLASS_NAME, "resurrectPlayers", args, Config.TIME_TELEPORT_BACK * 1000 - 300);
    			executeTask(CLASS_NAME, "healPlayers", args, Config.TIME_TELEPORT_BACK * 1000 - 200);
    			executeTask(CLASS_NAME, "teleportPlayersBack", args, Config.TIME_TELEPORT_BACK * 1000);
    			delete((Config.TIME_TELEPORT_BACK + 10) * 1000);
    		}
    
    	}
    
    	public static void openDoors()
    	{
    		for(DoorInstance door : _reflection.getDoors())
    			door.openMe();
    	}
    
    	public FightClubArena()
    	{}
    
    	@Override
    	public void onLoad()
    	{}
    
    	@Override
    	public void onReload()
    	{}
    
    	@Override
    	public void onShutdown()
    	{}
    }
    

    Thanks.

×
×
  • Create New...