Показать сообщение отдельно
Непрочитано 25.03.2009, 22:51   #6
Пользователь

По умолчанию Ответ: Last Hero для l2emu

Так сча раскажу
Вот исходник почти переделан под Ему
Тока два класса не совпадают их вобше нету в яму Эвент сам из рояль сборки
Код:
package events.lastHero;

import net.l2emuproject.Config;
import l2r.extensions.listeners.L2ZoneEnterLeaveListener;
import l2r.extensions.scripts.Functions;
import l2r.extensions.scripts.ScriptFile;
import net.l2emuproject.Announcements;
import net.l2emuproject.instancemanager.ZoneManager;
import net.l2emuproject.model.*;
import net.l2emuproject.gameserver.model.Zone.L2Zone;
import net.l2emuproject.model.actor.instances.L2NpcInstance;
import net.l2emuproject.network.serverpackets.Revive;
import net.l2emuproject.datatables.SkillTable;
import l2r.util.Files;
import net.l2emuproject.gameserver.model.Location;
import net.l2emuproject.tools.random.Rnd;
import net.l2emuproject.util.Util;

import java.util.ArrayList;
import java.util.concurrent.ScheduledFuture;

public class LastHero extends Functions implements ScriptFile
{
	public static L2Object self;
	public static L2NpcInstance npc;

	private static ArrayList<L2Player> players_list = new ArrayList<L2Player>();
	private static ArrayList<L2Player> live_list = new ArrayList<L2Player>();

	private static Integer _status = 0;
	private static Integer _time_to_start = Config.EVENT_LastHeroTime;

	@SuppressWarnings("unchecked")
	private static ScheduledFuture _endTask;

	private static L2Zone _zone = ZoneManager.getInstance().getZoneByIndex(ZoneType.battle_zone, 4, true);
	ZoneListener _zoneListener = new ZoneListener();

	private static Integer item_id_ = Config.EVENT_LastHeroItemID;
	private static Integer item_count_ = Config.EVENT_LastHeroItemCOUNT;
	private static Boolean rate_ = Config.EVENT_LastHeroRate;

	public void onLoad()
	{
		_zone.getListenerEngine().addMethodInvokedListener(_zoneListener);
		System.out.println("Loaded Event: Last Hero");
	}

	public void onReload()
	{
		_zone.getListenerEngine().removeMethodInvokedListener(_zoneListener);
	}

	public void onShutdown()
	{
		onReload();
	}

	public static String DialogAppend_31225(Integer val)
	{
		if(val == 0)
		{
			L2Player player = (L2Player) self;
			return Files.read("data/scripts/events/lastHero/31225.html", player);
		}
		return "";
	}

	public static void start()
	{
		if(!((L2Player) self).getPlayerAccess().IsEventGm)
			return;

		_status = 0;

		players_list = new ArrayList<L2Player>();
		live_list = new ArrayList<L2Player>();

		Announcements.getInstance().announceToAll("Запущен эвент 'Last Hero'. Все зарегистрированные участники будут телепортированы в Coliseum через 5 минут.");
		Announcements.getInstance().announceToAll("Игроки, отказавшиеся от участия в эвенте смогут наблюдать за битвой через обзорные кристаллы.");
		executeTask("events.lastHero.LastHero", "question", new Object[0], 10000);
		executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000);
	}

	public static void question()
	{
		for(L2Player player : L2World.getAllPlayers())
			player.scriptRequest("Вы хотите принять участие в эвенте?", "events.lastHero.LastHero:addPlayer", new Object[0]);
	}

	public static void announce()
	{
		Announcements a = Announcements.getInstance();
		if(players_list.size() < 2)
		{
			a.announceToAll("Эвент отменен, слишком мало участников.");
			return;
		}

		if(_time_to_start > 1)
		{
			_time_to_start--;
			a.announceToAll("Начало эвента через " + _time_to_start + " мин.");
			a.announceToAll("Пропустившие момент регистрации, могут зарегистрироваться у Arena Manager в MDT.");
			executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000);
		}
		else
		{
			a.announceToAll("Телепортация игроков...");
			executeTask("events.lastHero.LastHero", "prepare", new Object[0], 5000);
		}
	}

	public void addPlayer()
	{
		players_list.add((L2Player) self);
		live_list.add((L2Player) self);

		if(((L2Player) self).getParty() != null)
			((L2Player) self).getParty().removePartyMember((L2Player) self);

	}

	public static void prepare()
	{
		cleanPlayers();
		cleanLive();
		executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000);
		executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000);
		executeTask("events.lastHero.LastHero", "saveBackCoords", new Object[0], 3000);
		executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 4000);
		executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 5000);
		executeTask("events.lastHero.LastHero", "go", new Object[0], 120000);

		Announcements a = Announcements.getInstance();
		a.announceToAll("Правила эвента 'Last Hero':");
		a.announceToAll("Эвент длится 5 минут.");
		a.announceToAll("Цель - убить как можно больше игроков.");
		a.announceToAll("За каждого убитого вам дают 5к * уровень убитого аден.");
		a.announceToAll("Старт через 2 минуты, по команде 'FIGHT!!!'.");
	}

	public static void go()
	{
		_status = 1;
		upParalyzePlayers();
		checkLive();
		Announcements.getInstance().announceToAll(">>> FIGHT!!! <<<");
		_endTask = executeTask("events.lastHero.LastHero", "endBattle", new Object[0], 300000);
	}

	public static void endBattle()
	{
		_status = 0;
		Announcements a = Announcements.getInstance();
		a.announceToAll("Эвент 'Last Hero' окончен.");
		a.announceToAll("Через 1 минуту все участники будут вылечены и телепортированы обратно.");
		executeTask("events.lastHero.LastHero", "end", new Object[0], 60000);
		_endTask.cancel(false);
		_endTask = null;
	}

	public static void end()
	{
		executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000);
		executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000);
		executeTask("events.lastHero.LastHero", "teleportPlayersToSavedCoords", new Object[0], 3000);
	}

	public static void saveBackCoords()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
					player.setVar("LastHero_backCoords", player.getX() + " " + player.getY() + " " + player.getZ());
		}
	}

	public static void teleportPlayersToColiseum()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
				{
					Location pos = Rnd.coordsRandomize(149505, 46719, -3417, 0, 0, 500);
					player.teleToLocation(pos);
				}
		}
	}

	public static void teleportPlayersToSavedCoords()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
				{
					String var = player.getVar("LastHero_backCoords");
					if(var == null || var.equals(""))
						continue;
					String[] coords = var.split(" ");
					if(coords.length != 3)
						continue;
					Location pos = new Location(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]));
					player.teleToLocation(pos);
					player.unsetVar("LastHero_backCoords");
				}
		}
	}

	public static void paralyzePlayers()
	{
		L2Skill revengeSkill = SkillTable.getInstance().getInfo(4515, 1);
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
				{
					revengeSkill.getEffects(player, player, false);
					if(player.getPet() != null)
						revengeSkill.getEffects(player, player.getPet(), false);
				}
		}
	}

	public static void upParalyzePlayers()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
				{
					player.stopEffect(4515);
					if(player.getPet() != null)
						player.getPet().stopEffect(4515);

					if(player.getParty() != null)
						player.getParty().removePartyMember(player);
				}
		}
	}

	public static void ressurectPlayers()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null && player.isDead())
				{
					player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
					player.setCurrentCp(player.getMaxCp());
					player.restoreExp();
					player.broadcastPacket(new Revive(player));
					player.doRevive();
				}
		}
	}

	public static void healPlayers()
	{
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
				{
					player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
					player.setCurrentCp(player.getMaxCp());
				}
		}
	}

	public static void cleanPlayers()
	{
		ArrayList<L2Player> temp = new ArrayList<L2Player>();
		synchronized (players_list)
		{
			for(L2Player player : players_list)
				if(player != null)
					temp.add(player);
		}
		players_list = temp;
	}

	public static void cleanLive()
	{
		ArrayList<L2Player> temp = new ArrayList<L2Player>();
		synchronized (live_list)
		{
			for(L2Player player : live_list)
				if(player != null)
					temp.add(player);
		}
		live_list = temp;
	}

	public static void checkLive()
	{
		ArrayList<L2Player> temp = new ArrayList<L2Player>();
		synchronized (live_list)
		{
			for(L2Player player : live_list)
				if(player != null && player.isInZone(ZoneType.battle_zone) && !player.isDead())
				{
					temp.add(player);
					player.setTeam(2);
				}
				else if(player != null)
				{
					player.setTeam(0);
					player.sendMessage("Вы проиграли! Дождитесь окончания эвента для обратной телепортации.");
				}
		}
		live_list = temp;
		if(live_list.size() <= 1)
			endBattle();
	}

	public static void removeAura()
	{
		synchronized (live_list)
		{
			for(L2Player player : live_list)
				if(player != null)
					player.setTeam(0);
		}
	}

	public static void onDie(L2Object self, L2Character killer)
	{
		if(_status > 0 && self != null && self.isPlayer && live_list.contains(self))
		{
			live_list.remove(self);
			((L2Player) self).setTeam(0);
			((L2Player) self).sendMessage("Вы проиграли! Дождитесь окончания эвента для обратной телепортации.");
			checkLive();
			if(killer != null && killer.isPlayer)
			{
				if(rate_) ((L2Player) killer).getInventory().addItem(item_id_, ((L2Player) self).getLevel() * item_count_, 0, "last_hero");
				else ((L2Player) killer).getInventory().addItem(item_id_, item_count_, 0, "last_hero");
			}
		}
	}

	public static void OnPlayerExit(@SuppressWarnings("unused")
	L2Player player)
	{
		if(_status > 0 && self != null && self.isPlayer && live_list.contains(self))
		{
			live_list.remove(self);
			((L2Player) self).setTeam(0);
			checkLive();
		}
	}

	private class ZoneListener extends L2ZoneEnterLeaveListener
	{
		@Override
		public void objectEntered(L2Zone zone, L2Object object)
		{
			if(_status > 0 && object != null && object.getPlayer() != null && !live_list.contains(object.getPlayer()))
				((L2Character) object).teleToLocation(147451, 46728, -3410);
		}

		@Override
		public void objectLeaved(L2Zone zone, L2Object object)
		{
			L2Player player = object.getPlayer();
			if(_status > 0 && player != null && live_list.contains(player))
			{
				L2Playable playable = (L2Playable) object;
				double angle = Util.convertHeadingToDegree(playable.getHeading()); // угол в градусах
				double radian = Math.toRadians(angle - 90); // угол в радианах
				playable.teleToLocation((int) (playable.getX() + 50 * Math.sin(radian)), (int) (playable.getY() - 50 * Math.cos(radian)), playable.getZ());
			}
		}
	}
}
import net.l2emuproject.Config;
import l2r.extensions.listeners.L2ZoneEnterLeaveListener;
import l2r.extensions.scripts.Functions;
import l2r.extensions.scripts.ScriptFile;

import net.l2emuproject.Announcements;
import net.l2emuproject.instancemanager.ZoneManager;
import net.l2emuproject.model.*;
import net.l2emuproject.gameserver.model.Zone.L2Zone;
import net.l2emuproject.model.actor.instances.L2NpcInstan ce;
import net.l2emuproject.network.serverpackets.Revive;
import net.l2emuproject.datatables.SkillTable;

import l2r.util.Files;
import net.l2emuproject.gameserver.model.Location;
import net.l2emuproject.tools.random.Rnd;
import net.l2emuproject.util.Util;

import java.util.ArrayList;
import java.util.concurrent.ScheduledFuture;

Так вот классы То что синем и начинается import net.l2emuproject Это совпадает с Ему Но точьно не уверен
То что красным токова нету в ему или не удолось найти сответствие начинается import l2r.
То что желтым то ХЗ мб и есть а может и нет не уолось оже нати
Помогите нати сответствие
Сори за большое Собшение
ВОт мож каму пригодится
Это исходнки мож каму пригодятся
http://dump.ru/file/2272505
Tram вне форума Ответить с цитированием