Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 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 mods.eventmodSubclass;
- /**************************************************************************************************************
- * *
- * @author horato, Nik *
- * Made for L2world.org *
- * *
- **************************************************************************************************************/
- import java.util.List;
- import java.util.concurrent.ScheduledFuture;
- import java.util.concurrent.TimeUnit;
- import javolution.util.FastList;
- import com.l2jserver.gameserver.Announcements;
- import com.l2jserver.gameserver.ThreadPoolManager;
- import com.l2jserver.gameserver.datatables.DoorTable;
- import com.l2jserver.gameserver.instancemanager.QuestManager;
- import com.l2jserver.gameserver.model.actor.L2Character;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.L2Summon;
- import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.quest.Event;
- import com.l2jserver.gameserver.model.quest.Quest;
- import com.l2jserver.gameserver.model.quest.QuestState;
- import com.l2jserver.gameserver.network.serverpackets.ExCubeGameChangePoints;
- import com.l2jserver.gameserver.network.serverpackets.ExCubeGameEnd;
- public class eventmodSubclass extends Event
- {
- // Is event active?
- private static boolean _isActive = false;
- // Start npc ID
- private static final int _npc_id = 31212;
- // Initialize players list
- private List<L2PcInstance> _players;
- // Npc
- private L2Npc _npc;
- // Event Task
- ScheduledFuture<?> _eventTask = null;
- // Teams; Team1 is red, Team2 is blue
- List<L2PcInstance> _team1 = new FastList<L2PcInstance>();
- List<L2PcInstance> _team2 = new FastList<L2PcInstance>();
- // Teams score
- private static int _team1_score = 0;
- private static int _team2_score = 0;
- public static void main(String[] args)
- {
- new eventmodSubclass(-1, "eventmodSubclass", "mods");
- }
- public eventmodSubclass(int questId, String name, String descr)
- {
- super(questId, name, descr);
- addStartNpc(_npc_id);
- addFirstTalkId(_npc_id);
- addTalkId(_npc_id);
- // Initialize players list
- _players = new FastList<L2PcInstance>();
- }
- @Override
- public boolean eventStart()
- {
- // Don't start event if its active
- if (_isActive)
- return false;
- // Set active
- _isActive = true;
- // Spawn event manager
- _npc = addSpawn(_npc_id,82798,148650,-3464,0,false,0);
- // Announce event start
- Announcements.getInstance().announceToAll("Subclass event started");
- Announcements.getInstance().announceToAll("Visit event manager in Giran castle town for register");
- _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
- {
- public void run()
- {
- Announcements.getInstance().announceToAll("5 minutes left");
- try
- {
- Thread.sleep(60000); //1 min
- Announcements.getInstance().announceToAll("4 minutes left");
- //Thread.sleep(60000); //1 min
- Announcements.getInstance().announceToAll("3 minutes left");
- //Thread.sleep(60000); //1 min
- Announcements.getInstance().announceToAll("2 minutes left");
- //Thread.sleep(60000); //1 min
- Announcements.getInstance().announceToAll("1 minutes left");
- //Thread.sleep(60000); //1 min
- StartEvent();
- }
- catch (InterruptedException e)
- {
- Announcements.getInstance().announceToAll("Event error");
- eventStop();
- }
- }
- },1);
- return true;
- }
- @Override
- public boolean eventStop()
- {
- // Don't stop inactive event
- if(!_isActive)
- return false;
- // Set inactive
- _isActive = false;
- // Thread stop
- if(!_eventTask.isDone())
- _eventTask.cancel(true);
- // Announce winner, remove team marker, give reward and teleport back
- for (L2PcInstance player : _players)
- {
- if(_team1_score > _team2_score)
- {
- Announcements.getInstance().announceToAll("Red team won");
- player.sendPacket(new ExCubeGameEnd(true));
- if(_team1.contains(player))
- player.addItem("eventmodSubclass", 6673, 10, _npc, true);
- }else if(_team1_score < _team2_score){
- Announcements.getInstance().announceToAll("Blue team won");
- player.sendPacket(new ExCubeGameEnd(false));
- if(_team2.contains(player))
- player.addItem("eventmodSubclass", 6673, 10, _npc, true);
- }else if(_team1_score == _team2_score){
- Announcements.getInstance().announceToAll("Both teams had same score, no winner this time");
- }
- if(player.isDead())
- player.doRevive();
- player.removeNotifyQuestOfDeath(player.getQuestState(getName()));
- player.setTeam(0);
- player.teleToLocation(83478, 148628, -3405);
- }
- // Open doors in coliseum
- openDoors(24190001);
- openDoors(24190002);
- openDoors(24190003);
- openDoors(24190004);
- // Clear teams
- _team1.clear();
- _team2.clear();
- // Clear player list
- _players.clear();
- Announcements.getInstance().announceToAll("Subclass event finished");
- return true;
- }
- @Override
- public boolean eventBypass(L2PcInstance activeChar, String bypass)
- {
- return false;
- }
- @Override
- public String onFirstTalk(L2Npc npc, L2PcInstance player)
- {
- QuestState st = player.getQuestState(getName());
- if (st == null)
- {
- Quest q = QuestManager.getInstance().getQuest(getName());
- st = q.newQuestState(player);
- }
- if (npc.getNpcId() == _npc_id)
- {
- return _npc_id+".htm";
- }
- return npc.getNpcId()+".htm";
- }
- @Override
- public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
- {
- // Registering
- if (event.startsWith("signup"))
- { //level check
- if(player.getLevel() == 40)
- { // Subclass check
- if(player.isSubClassActive())
- {
- if (_players.contains(player))
- {
- return _npc_id+"-onlist.htm";
- }
- _players.add(player);
- return _npc_id+"-signed.htm";
- }
- }
- }
- // Unregistering
- if (event.startsWith("signdown"))
- {
- if (!_players.contains(player))
- {
- return _npc_id+"-notreg.htm";
- }
- _players.remove(player);
- return _npc_id+"-unsigned.htm";
- }
- return "";
- }
- private void StartEvent()
- {
- // Check for empty reg list
- if (_players.size() < 2)
- {
- Announcements.getInstance().announceToAll("Not enough players to start event");
- eventStop();
- return;
- }
- Announcements.getInstance().announceToAll("Subclass event started");
- // Remove registration NPC
- if(_npc != null)
- _npc.deleteMe();
- // Close doors in coliseum
- closeDoors(24190001);
- closeDoors(24190002);
- closeDoors(24190003);
- closeDoors(24190004);
- // Make teams
- for (L2PcInstance player : _players)
- {
- if (player != null)
- {
- if(player.getLevel() == 40 && player.isSubClassActive())
- {
- player.addNotifyQuestOfDeath(player.getQuestState(getName()));
- if(_team1.size() > _team2.size())
- {
- player.setTeam(1);
- _team2.add(player);
- }else{
- player.setTeam(2);
- _team1.add(player);
- }
- }else{
- player.sendMessage("You have been kicked from event because your level is not 40 or you dont have subclass active");
- _players.remove(player);
- }
- }
- }
- // Teleport players, remove buffs, remove summons, ressurect and full heal
- for (L2PcInstance player : _team1)
- {
- player.stopAllEffectsExceptThoseThatLastThroughDeath();
- L2Summon summon = player.getPet();
- if (summon != null)
- summon.unSummon(player);
- if(player.isDead())
- player.doRevive();
- player.setCurrentCp(player.getMaxCp());
- player.setCurrentMp(player.getMaxMp());
- player.setCurrentHp(player.getMaxHp());
- player.teleToLocation(150437,47397,-3413);
- }
- for (L2PcInstance player : _team2)
- {
- player.stopAllEffectsExceptThoseThatLastThroughDeath();
- L2Summon summon = player.getPet();
- if (summon != null)
- summon.unSummon(player);
- if(player.isDead())
- player.doRevive();
- player.setCurrentCp(player.getMaxCp());
- player.setCurrentMp(player.getMaxMp());
- player.setCurrentHp(player.getMaxHp());
- player.teleToLocation(148513,46122,-3408);
- }
- _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
- {
- public void run()
- {
- eventStop();
- }
- },20*60*1000);
- }
- @Override
- public String onDeath(final L2Character killer, final L2Character victim, QuestState qs)
- {
- if(_team1.contains(killer))
- {
- _team1_score++;
- ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
- {
- public void run()
- {
- victim.doRevive();
- victim.teleToLocation(148513,46122,-3408);
- }
- },2*1000);
- }else if(_team2.contains(killer)){
- _team2_score++;
- ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
- {
- public void run()
- {
- victim.doRevive();
- victim.teleToLocation(150437,47397,-3413);
- }
- },2*1000);
- }else{
- ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
- {
- public void run()
- {
- victim.doRevive();
- if(_team1.contains(killer))
- {
- victim.teleToLocation(148513,46122,-3408);
- }else
- {
- victim.teleToLocation(150437,47397,-3413);
- }
- }
- },2*1000);
- }
- for (L2PcInstance player : _players)
- {
- player.sendPacket(new ExCubeGameChangePoints((int)_eventTask.getDelay(TimeUnit.SECONDS), _team2_score, _team1_score));
- }
- return super.onDeath(killer, victim, qs);
- }
- private static void openDoors(int doorId)
- {
- L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
- if (doorInstance != null)
- {
- doorInstance.openMe();
- }
- }
- private static void closeDoors(int doorId)
- {
- L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
- if (doorInstance != null)
- {
- doorInstance.closeMe();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement