Перейти к содержанию
Авторизация  
Jeffuu

Уникальный Ивент - Zombie Attack

Рекомендуемые сообщения

Представляю Вашему вниманию уникальный ивент.

 

Описание ивента:

 

Регистрация на ивент происходит через сообщение в игре.

 

По окончанию регистрации все зарегистрированные игроки телепортируются в Колизей делясь на две команды, одна команда трансформируется в Зомби(количество хп увеличивается, физ. атака и скорость уменьшаются).

 

Ивент состоит с 3 раундов, Команда которая победит дважды побеждает, если после 2 раундов - ничья, то запускается 3 раунд где все трансформируются в Зомби.

 

Зомби имеют скилл заражения, с вероятностью в 40% они могут заразить игрока другой команды. Игрок которого заразил Зомби превращается в 1 стадию заражения. Его можно вылечить только 1 раз за раунд специальным скиллом от напарника (id классов которым будет добавлен скилл указывается через конфиг). Находясь возле зараженного игрока в течении 7 секунд можно заразится. Время через которое будет заражен игрок выводится в в виде скрин сообщения.

Если не вылечить зараженного игрока в течении 3 мин. он превращается в 2 стадию заражения, через 3 мин. в 3 стадию.

Превратившись в 3 стадию он играет за команду Зомби.

 

После 2 побед одной из команд выдается награда.

 

 

 

Конф файл:

-Время через какое запускать ивент после старта

-Время раунда ивента

-Aвтозапуск в определенное время

-Снимать баффы при телепортации?

-Мин .количество участников для каждой команды

-Макс. количество участников для каждой команды

-Id профы которой будет добавлен скилл "Лечение зараженного"

-Награда

-Регистрацию в 2 и более окон

 

 

Цена ивента - 3500 рублей

iсq - 661512590

skype - jeffuu0

Изменено пользователем Jeffuu
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что то не сильно впечатляет Ивент еще и за такую цену...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

идею доработать и будет норм , если для ит вообще шик )

В ит нету трансформации

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

даже знаю откуда вырезан эвент , т.к сборка эта есть у меня. Хроники ХФ если я не ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

даже знаю откуда вырезан эвент , т.к сборка эта есть у меня. Хроники ХФ если я не ошибаюсь.

Что? Сам писал этот ивент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бобры - зомби

автор, не вы снимали данную картину? хД

 

P.S. не "ивент", а "эвент". Ну в крайнем случае пишите "event".

P.S.S. за что 3,5к ?)

Изменено пользователем Respect

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея интересная, но можно немного доработать, + поставил автору.

Могу написать подобное под ИТ.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видел уже где то этот эвент только там еще были возможности убивать зомби особенными скиллами и так далее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цена снижена до 2к рублей.

Изменено пользователем Jeffuu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Команда зомби и стандартных игроков - вяло как то всё это сделано без изюминки личное мнение )

сыровато немножко если идею доделать - а так удачи в продаже )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 5667)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -302,6 +313,96 @@
*/
public final class L2PcInstance extends L2Playable
{
+
+ public boolean _zombie = false;
+ public void setZombie(boolean t)
+ {
+ _zombie = t;
+ }
+
+ public boolean isZombie()
+ {
+ return _zombie;
+ }
@@ -394,8 +494,19 @@
@Override
public void doAttack(L2Character target)
{
+ Zombie z = new Zombie();
super.doAttack(target);
-
+ if (isZombie())
+ {
+
+ L2PcInstance targeto = target.getActingPlayer();
+ z.infect(targeto);
+
+ if (Zombie._notinfected.size() == 0)
+ {
+ z.end();
+ }
+ }
// cancel the recent fake-death protection instantly if the player attacks or casts spells
getPlayer().setRecentFakeDeath(false);
}
@@ -5389,6 +5576,15 @@
@Override
public synchronized void untransform()
{
+ if (isZombie())
+ {
+ sendMessage("Fuck you noob cheater");
+ return;
+ }
if (_transformation != null)
{
if (!fireTransformListeners(_transformation, false))
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/entity/Zombie.java
===================================================================
--- java/com/l2jserver/gameserver/model/entity/Zombie.java (revision 0)
+++ java/com/l2jserver/gameserver/model/entity/Zombie.java (revision 0)
@@ -0,0 +1,298 @@
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import javolution.util.FastList;
+
+import com.l2jserver.gameserver.Announcements;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.DoorTable;
+import com.l2jserver.gameserver.datatables.NpcTable;
+import com.l2jserver.gameserver.datatables.SpawnTable;
+import com.l2jserver.gameserver.instancemanager.TransformationManager;
+import com.l2jserver.gameserver.model.L2Spawn;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
+import com.l2jserver.util.Rnd;
+
+/**
+ * @author Marwan
+ */
+public class Zombie
+{
+ public L2PcInstance zombie = null;
+ public static L2Spawn _npcSpawn;
+ public static FastList<L2PcInstance> all = new FastList<L2PcInstance>();
+ public static FastList<L2PcInstance> _infected = new FastList<L2PcInstance>();
+ public static FastList<L2PcInstance> _notinfected = new FastList<L2PcInstance>();
+ public int rounds = 3;
+
+ public static enum State
+ {
+ INACTIVE,
+ ACTIVE
+ }
+
+ public State state = State.INACTIVE;
+
+ public class Start implements Runnable
+ {
+ @Override
+ public void run()
+ {
+ if (state == State.INACTIVE)
+ {
+ startEvent();
+ }
+ }
+ }
+
+ public void startEvent()
+ {
+ state = State.ACTIVE;
+ all.addAll(_notinfected);
+ all.addAll(_infected);
+ Announcements.getInstance().announceToAll("Zombie event registrations will end in 10 minute(s).");
+ Announcements.getInstance().announceToAll("Registration npc in giran.");
+ spawnEventNpc();
+ waitSecs(10);
+ Announcements.getInstance().announceToAll("Zombie event registrations will end in 5 minute(s).");
+ waitSecs(10);
+ Announcements.getInstance().announceToAll("Zombie event registrations will end in 1 minute(s).");
+ waitSecs(10);
+
+ if (_notinfected.size() >= 2)
+ {
+ closeDoor(24190002);
+ closeDoor(24190003);
+ closeDoor(24190001);
+ closeDoor(24190004);
+ pickZombie();
+ for (L2PcInstance players : _notinfected)
+ {
+ players.sendMessage("Zombie is " + zombie.getName());
+ players.teleToLocation(150108, 46736, -3407);
+ }
+ zombie.sendMessage("Infect others by hitting them");
+ zombie.teleToLocation(148498, 46752, -3413);
+ for (int i = 2; i <= rounds; i++)
+ {
+ i++;
+ waitSecs(110);
+ nextRound(i);
+ }
+ end();
+ }
+ else
+ {
+ Announcements.getInstance().announceToAll("Zombie event has been cancelled due to lack of participants");
+ state = State.INACTIVE;
+ }
+
+ }
+
+ public void nextRound(int round)
+ {
+ for (L2PcInstance pl : _notinfected)
+ {
+
+ pl.teleToLocation(147771, 46712, -3411);
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Round " + round + " will start in 30 seconds.", 8000);
+ pl.sendPacket(message1);
+ }
+ for (L2PcInstance pl : _infected)
+ {
+ pl.teleToLocation(151248, 46721, -3406);
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Round " + round + " will start in 30 seconds.", 8000);
+ pl.sendPacket(message1);
+ }
+ waitSecs(30);
+ for (L2PcInstance pl : _notinfected)
+ {
+
+ pl.teleToLocation(148515, 46660, -3413);
+ }
+ for (L2PcInstance pl : _infected)
+ {
+ pl.teleToLocation(150400, 46764, -3413);
+ }
+ }
+
+ private static void spawnEventNpc()
+ {
+ L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(70012);
+
+ try
+ {
+ _npcSpawn = new L2Spawn(tmpl);
+ _npcSpawn.setLocx(83450);
+ _npcSpawn.setLocy(148608);
+ _npcSpawn.setLocz(3405);
+ _npcSpawn.setAmount(1);
+ _npcSpawn.setHeading(1);
+ SpawnTable.getInstance().addNewSpawn(_npcSpawn, false);
+
+ _npcSpawn.init();
+ _npcSpawn.getLastSpawn().setTitle("Zombie");
+ _npcSpawn.getLastSpawn().setName("Zombie Event");
+ }
+ catch (Exception e)
+ {
+ }
+ }
+
+ public void pickZombie()
+ {
+ zombie = _notinfected.get(Rnd.get(0, _notinfected.size() - 1));
+ infect(zombie);
+ }
+
+ public void infect(L2PcInstance z)
+ {
+ _infected.add(z);
+ _notinfected.remove(z);
+ z.getAppearance().setTitleColor(255, 0, 0);
+ z.setZombie(true);
+ TransformationManager.getInstance().transformPlayer(303, z);
+ }
+
+ public void uninfectall()
+ {
+ for (L2PcInstance uninfect : _infected)
+ {
+ uninfect.untransform();
+ uninfect.setZombie(false);
+ }
+ }
+
+ public void end()
+ {
+ openDoor(24190002);
+ openDoor(24190003);
+ openDoor(24190001);
+ openDoor(24190004);
+ uninfectall();
+ rewardWinner();
+ state = State.INACTIVE;
+ for (L2PcInstance p : all)
+ {
+ p.teleToLocation(83450, 148608, -3405);
+ }
+ if (_notinfected.size() >= 1)
+ {
+ Announcements.getInstance().announceToAll("Zombie event has end");
+ Announcements.getInstance().announceToAll("Players won");
+ _notinfected.removeAll(_notinfected);
+ }
+ else
+ {
+
+ Announcements.getInstance().announceToAll("Zombie event has end");
+ Announcements.getInstance().announceToAll("Zombies won");
+ _infected.removeAll(_infected);
+ }
+
+ }
+
+ public void register(L2PcInstance p)
+ {
+ _notinfected.add(p);
+ p.sendMessage("You have succesfully registered");
+ }
+
+ public void unregister(L2PcInstance p)
+ {
+ _notinfected.remove(p);
+ p.sendMessage("You have succesfully unregistered");
+ }
+
+ public void rewardWinner()
+ {
+ if (_notinfected.size() == 0)
+ {
+ for (L2PcInstance n : _infected)
+ {
+ n.addItem("zombie", 57, 10000, n, false);
+ }
+ }
+ else
+ {
+ for (L2PcInstance n : _notinfected)
+ {
+ n.addItem("zombie", 57, 10000, n, false);
+ }
+ }
+ }
+
+ public void waitSecs(int i)
+ {
+ try
+ {
+ Thread.sleep(i * 1000);
+ }
+ catch (InterruptedException ie)
+ {
+ ie.printStackTrace();
+ }
+ }
+
+ public void wait(int i)
+ {
+ try
+ {
+ Thread.sleep(i * 60000);
+ }
+ catch (InterruptedException ie)
+ {
+ ie.printStackTrace();
+ }
+ }
+
+ private static void closeDoor(int i)
+ {
+
+ L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(i);
+
+ if (doorInstance != null)
+ {
+ doorInstance.closeMe();
+ }
+
+ }
+
+ private static void openDoor(int i)
+ {
+ L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(i);
+
+ if (doorInstance != null)
+ {
+ doorInstance.openMe();
+ }
+ }
+
+ public Zombie()
+ {
+ ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new Start(), 60000, 6000);
+
+ }
+
+ public static Zombie getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ private static class SingletonHolder
+ {
+ protected static final Zombie _instance = new Zombie();
+ }
+}
Index: java/com/l2jserver/gameserver/instancemanager/ZombieNpc.java
===================================================================
--- java/com/l2jserver/gameserver/instancemanager/ZombieNpc.java (revision 0)
+++ java/com/l2jserver/gameserver/instancemanager/ZombieNpc.java (revision 0)
@@ -0,0 +1,131 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.instancemanager;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.Zombie;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+
+/**
+ * Zombie Npc
+ * @author Marwan
+ */
+public final class ZombieNpc extends Quest
+{
+
+ private final int NpcId = 70012;
+
+ private ZombieNpc(int questId, String name, String descr)
+ {
+
+ super(questId, name, descr);
+ addStartNpc(NpcId);
+ addTalkId(NpcId);
+ }
+
+ @Override
+ public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+ {
+ QuestState st = player.getQuestState("ZombieNpc");
+ if (st == null)
+ {
+ return "";
+ }
+ else if (event.equalsIgnoreCase("show"))
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<html><title>TvT Event</title>");
+ sb.append("<body>");
+ // sb.append("<br><font color=\"0066FF\">Current Event: 1vs1 </font>");
+ sb.append("<br><br><font color=\"00ff4d\">Hello " + player.getName() + ".<br> Here you can register for Zombie Event <br><br></font>");
+ sb.append("<hr>");
+ sb.append("<br><br><br><br>");
+ sb.append("<center><img src=\"L2UI.SquareWhite\" width=300 height=1>");
+ sb.append("<table bgcolor=333333 width=100>");
+ sb.append("<tr>");
+ sb.append("<td width=100 ALIGN=\"LEFT\"><button value=\"Register\" action=\"bypass -h Quest ZombieNpc register\" width=100 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"></td>");
+ sb.append("<td width=100 ALIGN=\"RIGHT\"><button value=\"Unregister\" action=\"bypass -h Quest ZombieNpc unregister\" width=100 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+ sb.append("<br><tr><td width=150 ALIGN=\"CENTER\"><button value=\"Registered Players\" action=\"bypass -h Quest ZombieNpc players\" width=150 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"></td></tr>");
+
+ sb.append("</tr>");
+ sb.append("</table>");
+ sb.append("<br><br></center>");
+ return sb.toString();
+ }
+
+ else if (event.equalsIgnoreCase("register"))
+ {
+
+ StringBuilder sb = new StringBuilder();
+ if (Zombie._notinfected.contains(player))
+ {
+ sb.append("<html><title>Zombie Event</title><body>");
+ sb.append("You are already registered</body></html>");
+ }
+ else
+ {
+ sb.append("<html><title>Zombie Event</title><body>");
+ sb.append("Registration succesful</body></html>");
+ Zombie z = new Zombie();
+ z.register(player);
+
+ }
+ return sb.toString();
+
+ }
+ else if (event.equalsIgnoreCase("unregister"))
+ {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<html><title>Zombie Event</title>");
+ sb.append("<body>You have succesfully unregistered</body></html>");
+ Zombie z = new Zombie();
+ z.unregister(player);
+ return sb.toString();
+ }
+ else if (event.equalsIgnoreCase("players"))
+ {
+ StringBuilder sb = new StringBuilder();
+ String noobs = null;
+ sb.append("<html><title>Zombie Event</title><body><center>");
+ sb.append("<br><br><table width=300><tr><td>Name</td><td width=80>Level</td></tr><br></font>");
+ for (L2PcInstance pls : Zombie._notinfected)
+ {
+ noobs += "<tr><td><font color=\"009900\">" + pls.getName() + "</td><td>" + pls.getLevel() + "</font></td></tr>";
+ }
+ sb.append("<table>" + noobs + "</table></body></html>");
+ return sb.toString();
+
+ }
+
+ return event;
+ }
+
+ @SuppressWarnings("synthetic-access")
+ public static ZombieNpc getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ private static class SingletonHolder
+ {
+ @SuppressWarnings("synthetic-access")
+ private static final ZombieNpc _instance = new ZombieNpc(-1, "ZombieNpc", "instances");
+ }
+
+}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...