Event Last Hero

#41
Если я говорю что архив битый значит он битый, не впервой. Я ж вот и говорю если у тебя "всё нормально с архивом" и он открываеться удачно, выложи содержимое .py файла под спойлер, иначе это можно расценивать как пустой трёп и рекламу стороннего проэкта. Как работать с архивами меня учить не надо, я осведомлён.
 
#43
#44
DONE к тебе обращаюсь подскажи пожайлуста а вот чтобы приз нормальный довался людям а ни ХИРО СТАТУС как исправить?
 

eforia

Advanced Members
#46
там где выдача геройства добавляешь выдачу итема и все...дописать это 5 секунд
 
#47
Народ а зону какую нужно делать, без респауна ?

Тоесть игроки, которых убили, должны лежать, или должны респавнится в какой-то точке ?

Просто если будет респаун, то как я понимаю, никто не выйграет ивент... Объясните суть, не могу понять.

По поводу итемов, исправил. Выдаются итемы. Кому надо пишите.
 
#48
Народ а зону какую нужно делать, без респауна ?

Тоесть игроки, которых убили, должны лежать, или должны респавнится в какой-то точке ?

Просто если будет респаун, то как я понимаю, никто не выйграет ивент... Объясните суть, не могу понять.

По поводу итемов, исправил. Выдаются итемы. Кому надо пишите.
мне надо выложи пожайлуста
 
#49
Архив не битый
Прикрепленный файл lasthero_by_zet.rar ( 5.3 килобайт ) Кол-во скачиваний: 11


Ув. Radar, Вы меня не правильно поняли, претензий у меня к пользователю DONE нет, а вот к December'у и его битому архиву есть.
Вот пост December'а где его битый архив:
http://la2base.ru/forum/index.php?s=&s...st&p=389864
скорее всего у тебя вирус на компе, у него и у меня нормальные архивы! я проверял!
 
#50
есть у кого Fixed версия?)
Там осталось только удалить все данные после евента и проверить на null
 

Union

Рестор ака
#53
кто сможет переделать под базу =))
Под ему вроди катит ток импорты поменяйте =)


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Раскрывающийся текст</div></div><div class="sp-body"><div class="sp-content">package events.lastHero;

import java.util.ArrayList;

import l2f.extensions.listeners.L2ZoneEnterLeaveListener;
import l2f.extensions.scripts.Functions;
import l2f.extensions.scripts.ScriptFile;
import l2f.gameserver.Announcements;
import l2f.gameserver.instancemanager.ZoneManager;
import l2f.gameserver.model.L2Character;
import l2f.gameserver.model.L2Object;
import l2f.gameserver.model.L2Playable;
import l2f.gameserver.model.L2Player;
import l2f.gameserver.model.L2Skill;
import l2f.gameserver.model.L2World;
import l2f.gameserver.model.L2Zone;
import l2f.gameserver.model.L2Zone.ZoneType;
import l2f.gameserver.model.instances.L2NpcInstance;
import l2f.gameserver.serverpackets.Revive;
import l2f.gameserver.serverpackets.SocialAction;
import l2f.gameserver.tables.SkillTable;
import l2f.util.CharPosition;
import l2f.util.Rnd;

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 = 5;

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

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 void start()
{
if(!((L2Player) self).getPlayerAccess().IsEventGm)
return;

_time_to_start = 5;
_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 + " мин.");
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);
}

public static void prepare()
{
cleanPlayers();
cleanLive();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 5000);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 10000);
executeTask("events.lastHero.LastHero", "saveBackCoords", new Object[0], 15000);
executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 20000);
executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 25000);
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!!! <<<");
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);
}

public static void end()
{
players_list = L2World.getAllPlayers();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 5000);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 10000);
executeTask("events.lastHero.LastHero", "teleportPlayersToSavedCoords", new Object[0], 15000);
}

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)
{
CharPosition pos = Rnd.coordsRandomize(149505, 46719, -3417, 0, 0, 500);
player.teleToLocation(pos.x, pos.y, pos.z);
}
}
}

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;
CharPosition pos = new CharPosition(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]), 0);
player.teleToLocation(pos.x, pos.y, pos.z);
player.setVar("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((short) 4515);
if(player.getPet() != null)
player.getPet().stopEffect((short) 4515);
}
}
}

public static void ressurectPlayers()
{
synchronized (players_list)
{
for(L2Player player : players_list)
if(player != null)
{
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
player.setCurrentCp(player.getMaxCp());
player.restoreExp();
player.broadcastPacket(new SocialAction(player.getObjectId(), 15));
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;
}

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)
((L2Player) killer).addAdena(((L2Player) self).getLevel() * 5000);
}
}

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;
Integer heading = playable.getHeading();
if(heading <= 16384)
playable.teleToLocation(playable.getX() - 50, playable.getY() - 50, playable.getZ());
else if(heading > 16384 && heading <= 32768)
playable.teleToLocation(playable.getX() + 50, playable.getY() - 50, playable.getZ());
else if(heading > 32768 && heading <= 49152)
playable.teleToLocation(playable.getX() + 50, playable.getY() + 50, playable.getZ());
else if(heading > 49152)
playable.teleToLocation(playable.getX() - 50, playable.getY() + 50, playable.getZ());
}
}
}
}
<div class="clear"></div></div></div></div>
 

xameleon

Advanced Members
#54


1. Добавлена возможность задавать время эвента. Благодаря этому, эвент не зависает...
2. В кач-ве приза выдаются не вещи, а статус героя (до релогина, потом пропадает).
3. Переделка под сборки от la2base.
4. Фикс неторых проблемм с телепортом и мелких недоточётов...


Основан на старых сорцах от этого эвента...
Переделано мной...

Скачать:

<!--private_data=0-->

P.S Не забываем тыкать спасибку...
уважаемый done, обьясните мне пожалуйста, нахрена нужна эта проверка?
Код:
		 if len(Deadplayers)>0: # если количество мертвых игроков больше 0
n = 0 # n присваиваем 0
for nm in lastPlayers : # запрашиваем данные
i=L2World.getInstance().getPlayer(nm) # о игроках в списке и присваиваем i
n = n + 1 # присваиваем n = 1
п.с. если сделал подписи неправильно прошу поправить

кто сможет переделать под базу =))
Под ему вроди катит ток импорты поменяйте =)


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Раскрывающийся текст</div></div><div class="sp-body"><div class="sp-content">package events.lastHero;

import java.util.ArrayList;

import l2f.extensions.listeners.L2ZoneEnterLeaveListener;
import l2f.extensions.scripts.Functions;
import l2f.extensions.scripts.ScriptFile;
import l2f.gameserver.Announcements;
import l2f.gameserver.instancemanager.ZoneManager;
import l2f.gameserver.model.L2Character;
import l2f.gameserver.model.L2Object;
import l2f.gameserver.model.L2Playable;
import l2f.gameserver.model.L2Player;
import l2f.gameserver.model.L2Skill;
import l2f.gameserver.model.L2World;
import l2f.gameserver.model.L2Zone;
import l2f.gameserver.model.L2Zone.ZoneType;
import l2f.gameserver.model.instances.L2NpcInstance;
import l2f.gameserver.serverpackets.Revive;
import l2f.gameserver.serverpackets.SocialAction;
import l2f.gameserver.tables.SkillTable;
import l2f.util.CharPosition;
import l2f.util.Rnd;

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 = 5;

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

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 void start()
{
if(!((L2Player) self).getPlayerAccess().IsEventGm)
return;

_time_to_start = 5;
_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 + " мин.");
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);
}

public static void prepare()
{
cleanPlayers();
cleanLive();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 5000);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 10000);
executeTask("events.lastHero.LastHero", "saveBackCoords", new Object[0], 15000);
executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 20000);
executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 25000);
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!!! <<<");
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);
}

public static void end()
{
players_list = L2World.getAllPlayers();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 5000);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 10000);
executeTask("events.lastHero.LastHero", "teleportPlayersToSavedCoords", new Object[0], 15000);
}

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)
{
CharPosition pos = Rnd.coordsRandomize(149505, 46719, -3417, 0, 0, 500);
player.teleToLocation(pos.x, pos.y, pos.z);
}
}
}

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;
CharPosition pos = new CharPosition(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]), 0);
player.teleToLocation(pos.x, pos.y, pos.z);
player.setVar("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((short) 4515);
if(player.getPet() != null)
player.getPet().stopEffect((short) 4515);
}
}
}

public static void ressurectPlayers()
{
synchronized (players_list)
{
for(L2Player player : players_list)
if(player != null)
{
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
player.setCurrentCp(player.getMaxCp());
player.restoreExp();
player.broadcastPacket(new SocialAction(player.getObjectId(), 15));
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;
}

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)
((L2Player) killer).addAdena(((L2Player) self).getLevel() * 5000);
}
}

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;
Integer heading = playable.getHeading();
if(heading <= 16384)
playable.teleToLocation(playable.getX() - 50, playable.getY() - 50, playable.getZ());
else if(heading > 16384 && heading <= 32768)
playable.teleToLocation(playable.getX() + 50, playable.getY() - 50, playable.getZ());
else if(heading > 32768 && heading <= 49152)
playable.teleToLocation(playable.getX() + 50, playable.getY() + 50, playable.getZ());
else if(heading > 49152)
playable.teleToLocation(playable.getX() - 50, playable.getY() + 50, playable.getZ());
}
}
}
}
<div class="clear"></div></div></div></div>
при таком синтаксисе наврятли кто то возмется, надо было в тегах код выкладывать
 

tiesto

АдмиралЪ О_о
#55
Его кто нибудь может переделать под EmuRT Парт2 ??!
Импорты не катят у меня.. наверняка руки кривоваты.
Заплачу за оптимизацию под сборку.
 
#58
DONE,
А возможно сделать так,чтобы эвент запускался каждый день в 17:00 независимо от рестартов?
 

Вверх