Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P L2jFrozen_GameServer
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (working copy)
- @@ -27,6 +27,8 @@
- import com.l2jfrozen.Config;
- import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.event.LMS;
- import com.l2jfrozen.gameserver.handler.IVoicedCommandHandler;
- import com.l2jfrozen.gameserver.handler.VoicedCommandHandler;
- import com.l2jfrozen.gameserver.managers.PetitionManager;
- @@ -64,6 +66,8 @@
- public final static int PARTYROOM_ALL = 16; //(Red)
- public final static int PARTYROOM_COMMANDER = 15; //(Yellow)
- public final static int HERO_VOICE = 17; //%
- +
- + private boolean _isInLMS;
- private final static String[] CHAT_NAMES =
- {
- @@ -277,6 +281,18 @@
- }
- CreatureSay cs = new CreatureSay(activeChar.getObjectId(), _type, activeChar.getName(), _text);
- +
- + if(EventManager.getInstance().isRegistered(activeChar))
- + EventManager.getInstance().getCurrentEvent().onSay(_type, activeChar, _text);
- +
- + _isInLMS = EventManager.getInstance().isRegistered(activeChar) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
- +
- + if(_isInLMS)
- + {
- + activeChar.sendMessage("You cannot talk while in LMS");
- + return;
- + }
- +
- switch(_type)
- {
- case TELL:
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (working copy)
- @@ -24,6 +24,7 @@
- import com.l2jfrozen.gameserver.GameServer;
- import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
- import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.model.Inventory;
- import com.l2jfrozen.gameserver.model.L2Party;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- @@ -111,6 +112,13 @@
- sendPacket(RestartResponse.valueOf(false));
- return;
- }
- +
- + if(EventManager.getInstance().isRegistered(player) && !EventManager.getInstance().getBoolean("restartAllowed"))
- + {
- + player.sendMessage("You cannot restart while you are a participant in an event.");
- + sendPacket(new ActionFailed());
- + return;
- + }
- // Prevent player from restarting if they are a festival participant
- // and it is in progress, otherwise notify party members that the player
- Index: head-src/com/l2jfrozen/gameserver/event/CTF.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/CTF.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/CTF.java (revision 0)
- @@ -0,0 +1,401 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.model.Inventory;
- +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
- +import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
- +import com.l2jfrozen.gameserver.network.serverpackets.ItemList;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;
- +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
- +
- +public class CTF extends Event
- +{
- + private class Core implements Runnable
- + {
- +
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + spawnFlagsAndHolders();
- + setStatus(EventState.FIGHT);
- + debug("The event started with " + players.size() + " players");
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + debug("The fight started");
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + unspawnFlagsAndHolders();
- + debug("The flags unspawned");
- + if (playerWithRedFlag != null)
- + unequipFlag(playerWithRedFlag);
- + if (playerWithBlueFlag != null)
- + unequipFlag(playerWithBlueFlag);
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + debug("The event ended. Winner: " + winnerTeam);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Flags taken!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, TELEPORT, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private L2Spawn redFlagNpc;
- + private L2Spawn blueFlagNpc;
- + private L2Spawn redHolderNpc;
- + private L2Spawn blueHolderNpc;
- + private int redFlagStatus;
- + private int blueFlagStatus;
- + private L2PcInstance playerWithRedFlag;
- + private L2PcInstance playerWithBlueFlag;
- +
- + public CTF()
- + {
- + super();
- + eventId = 10;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + winnerTeam = 0;
- + playerWithRedFlag = null;
- + playerWithBlueFlag = null;
- + blueFlagStatus = 0;
- + redFlagStatus = 0;
- +
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winnerTeam = players.head().getNext().getValue()[0];
- +
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + private void equipFlag(L2PcInstance player, int flag)
- + {
- + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
- + if (wpn != null)
- + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_RHAND);
- +
- + wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
- + if (wpn != null)
- + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_LHAND);
- +
- + player.getInventory().equipItem(ItemTable.getInstance().createItem("", 6718, 1, player, null));
- + player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
- + switch (flag)
- + {
- + case 1:
- + playerWithBlueFlag = player;
- + announce(getPlayerList(), player.getName() + " took the Blue flag!");
- + unspawnNPC(blueFlagNpc);
- + break;
- + case 2:
- + playerWithRedFlag = player;
- + announce(getPlayerList(), player.getName() + " took the Red flag!");
- + unspawnNPC(redFlagNpc);
- + break;
- + default:
- + break;
- + }
- + player.broadcastUserInfo();
- + CreatureSay cs = new CreatureSay(player.getObjectId(), 15, ":", "You got it! Run back! ::"); // 8D
- + player.sendPacket(cs);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + if (playerWithRedFlag == victim)
- + {
- + announce(getPlayerList(), victim.getName() + " dropped the Red flag!");
- + redFlagStatus = 2;
- + unequipFlag(victim);
- + redFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("redFlagId"));
- + }
- + if (playerWithBlueFlag == victim)
- + {
- + announce(getPlayerList(), victim.getName() + " dropped the Blue flag!");
- + blueFlagStatus = 2;
- + unequipFlag(victim);
- + blueFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("blueFlagId"));
- + }
- +
- + addToResurrector(victim);
- + }
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + super.onLogout(player);
- +
- + if (playerWithRedFlag == player)
- + {
- + announce(getPlayerList(), player.getName() + " dropped the Red flag!");
- + redFlagStatus = 2;
- + unequipFlag(player);
- + redFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("redFlagId"));
- + }
- + if (playerWithBlueFlag == player)
- + {
- + announce(getPlayerList(), player.getName() + " dropped the Blue flag!");
- + blueFlagStatus = 2;
- + unequipFlag(player);
- + blueFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("blueFlagId"));
- + }
- +
- + }
- +
- + @Override
- + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
- + {
- + if (!(npc.getNpcId() == getInt("blueFlagId") || npc.getNpcId() == getInt("blueFlagHolderId") || npc.getNpcId() == getInt("redFlagId") || npc.getNpcId() == getInt("redFlagHolderId")))
- + return false;
- +
- + //Blue holder
- + if (npc.getNpcId() == getInt("blueFlagHolderId"))
- + if (player == playerWithRedFlag && blueFlagStatus == 0)
- + {
- + announce(getPlayerList(), "The Blue team scored!");
- + teams.get(getTeam(player)).increaseScore();
- + increasePlayersScore(player);
- + player.addItem("Event", 6392, 4, player, true);
- + returnFlag(2);
- + }
- +
- + //Red holder
- + if (npc.getNpcId() == getInt("redFlagHolderId"))
- + if (player == playerWithBlueFlag && redFlagStatus == 0)
- + {
- + announce(getPlayerList(), "The Red team scored!");
- + teams.get(getTeam(player)).increaseScore();
- + increasePlayersScore(player);
- + player.addItem("Event", 6392, 4, player, true);
- + returnFlag(1);
- + }
- +
- + //Blue flag
- + if (npc.getNpcId() == getInt("blueFlagId"))
- + {
- + if (blueFlagStatus == 2)
- + {
- + //blue player
- + if (getTeam(player) == 1)
- + returnFlag(1);
- +
- + //red player
- + if (getTeam(player) == 2)
- + equipFlag(player, 1);
- + }
- + if (blueFlagStatus == 0)
- + if (getTeam(player) == 2)
- + {
- + equipFlag(player, 1);
- + unspawnNPC(blueFlagNpc);
- + blueFlagStatus = 1;
- + }
- +
- + }
- +
- + //Red flag
- + if (npc.getNpcId() == getInt("redFlagId"))
- + {
- + if (redFlagStatus == 2)
- + {
- + //red player
- + if (getTeam(player) == 2)
- + returnFlag(2);
- +
- + //blue player
- + if (getTeam(player) == 1)
- + equipFlag(player, 2);
- + }
- + if (redFlagStatus == 0)
- + if (getTeam(player) == 1)
- + {
- + equipFlag(player, 2);
- + unspawnNPC(redFlagNpc);
- + redFlagStatus = 1;
- + }
- + }
- + return true;
- + }
- +
- + @Override
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + if (playerWithRedFlag == player || playerWithBlueFlag == player)
- + return false;
- +
- + if (item.getItemType() == L2EtcItemType.POTION)
- + return false;
- +
- + return true;
- + }
- +
- + private void returnFlag(int flag)
- + {
- + int[] pos;
- + switch (flag)
- + {
- + case 1:
- + if (playerWithBlueFlag != null)
- + unequipFlag(playerWithBlueFlag);
- + if (blueFlagStatus == 2)
- + unspawnNPC(blueFlagNpc);
- +
- + pos = getPosition("BlueFlag", 1);
- + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
- + blueFlagStatus = 0;
- + announce(getPlayerList(), "The Blue flag returned!");
- + break;
- +
- + case 2:
- + if (playerWithRedFlag != null)
- + unequipFlag(playerWithRedFlag);
- + if (redFlagStatus == 2)
- + unspawnNPC(redFlagNpc);
- +
- + pos = getPosition("RedFlag", 1);
- + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
- + redFlagStatus = 0;
- + announce(getPlayerList(), "The Red flag returned!");
- + break;
- + }
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + private void spawnFlagsAndHolders()
- + {
- + int[] pos = getPosition("BlueFlag", 1);
- + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
- + blueHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("blueFlagHolderId"));
- +
- + pos = getPosition("RedFlag", 1);
- + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
- + redHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("redFlagHolderId"));
- + debug("The flags spawned.");
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void unequipFlag(L2PcInstance player)
- + {
- + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
- + if (wpn != null)
- + {
- + L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
- + player.getInventory().destroyItemByItemId("", 6718, 1, player, null);
- + InventoryUpdate iu = new InventoryUpdate();
- + for (L2ItemInstance element : unequiped)
- + iu.addModifiedItem(element);
- + player.sendPacket(iu);
- + player.sendPacket(new ItemList(player, true));
- + player.broadcastUserInfo();
- + }
- +
- + if (player == playerWithRedFlag)
- + playerWithRedFlag = null;
- + if (player == playerWithBlueFlag)
- + playerWithBlueFlag = null;
- + }
- +
- + private void unspawnFlagsAndHolders()
- + {
- + unspawnNPC(blueFlagNpc);
- + unspawnNPC(blueHolderNpc);
- + unspawnNPC(redFlagNpc);
- + unspawnNPC(redHolderNpc);
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (working copy)
- @@ -22,12 +22,15 @@
- import java.util.logging.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
- import com.l2jfrozen.gameserver.managers.CursedWeaponsManager;
- import com.l2jfrozen.gameserver.model.Inventory;
- import com.l2jfrozen.gameserver.model.L2Character;
- import com.l2jfrozen.gameserver.model.actor.instance.L2CubicInstance;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.event.LMS;
- +import com.l2jfrozen.gameserver.event.dm;
- import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
- /**
- @@ -80,6 +83,8 @@
- private int _runSpd, _walkSpd, _swimRunSpd, _swimWalkSpd, _flRunSpd, _flWalkSpd, _flyRunSpd, _flyWalkSpd;
- private float _moveMultiplier, _attackSpeedMultiplier;
- private int _maxCp;
- + private boolean _isInLMS;
- + private boolean _isInDM;
- /**
- * @param cha
- @@ -101,6 +106,8 @@
- _swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd;
- _swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd;
- _maxCp = _activeChar.getMaxCp();
- + _isInLMS = EventManager.getInstance().isRegistered(_activeChar) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
- + _isInDM = EventManager.getInstance().isRegistered(_activeChar) && EventManager.getInstance().getCurrentEvent() instanceof dm;
- }
- @Override
- @@ -163,7 +170,15 @@
- // writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
- //}
- - writeS(_activeChar.getName());
- + if(_isInLMS || _isInDM)
- + {
- + writeS("Player");
- + }
- + else
- + {
- + writeS(_activeChar.getName());
- + }
- + //->writeS(_activeChar.getName());
- if(_activeChar.getAppearance().getInvisible())
- //if(gmSeeInvis)
- @@ -208,7 +223,14 @@
- writeD(_z);
- writeD(_heading);
- writeD(_activeChar.getObjectId());
- - writeS(_activeChar.getName());
- + if(_isInLMS || _isInDM)
- + {
- + writeS("Player");
- + }
- + else
- + {
- + writeS(_activeChar.getName());
- + }
- writeD(_activeChar.getRace().ordinal());
- writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
- @@ -221,18 +243,36 @@
- writeD(_activeChar.getBaseClass());
- }
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
- - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
- + if(_isInLMS || _isInDM)
- + {
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(6408);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + }
- + else
- + {
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
- + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
- + }
- // c6 new h's
- writeH(0x00);
- @@ -294,10 +334,20 @@
- writeS(_activeChar.getTitle());
- }
- - writeD(_activeChar.getClanId());
- - writeD(_activeChar.getClanCrestId());
- - writeD(_activeChar.getAllyId());
- - writeD(_activeChar.getAllyCrestId());
- + if(_isInLMS || _isInDM)
- + {
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + writeD(0);
- + }
- + else
- + {
- + writeD(_activeChar.getClanId());
- + writeD(_activeChar.getClanCrestId());
- + writeD(_activeChar.getAllyId());
- + writeD(_activeChar.getAllyCrestId());
- + }
- // In UserInfo leader rights and siege flags, but here found nothing??
- // Therefore RelationChanged packet with that info is required
- writeD(0);
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (working copy)
- @@ -19,6 +19,7 @@
- import com.l2jfrozen.Config;
- import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
- import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.model.L2Party;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
- @@ -90,6 +91,13 @@
- player.sendPacket(SystemMessage.sendString("A superior power doesn't allow you to leave the event."));
- return;
- }
- +
- + if(EventManager.getInstance().isRegistered(player) && !EventManager.getInstance().getBoolean("restartAllowed"))
- + {
- + player.sendMessage("You cannot logout while you are a participant in an event.");
- + sendPacket(new ActionFailed());
- + return;
- + }
- if(player.isInOlympiadMode() || Olympiad.getInstance().isRegistered(player))
- {
- Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (working copy)
- @@ -138,7 +138,7 @@
- import com.l2jfrozen.gameserver.model.entity.Duel;
- import com.l2jfrozen.gameserver.model.entity.event.CTF;
- import com.l2jfrozen.gameserver.model.entity.event.DM;
- -import com.l2jfrozen.gameserver.model.entity.event.L2Event;
- +//import com.l2jfrozen.gameserver.model.entity.event.L2Event;
- import com.l2jfrozen.gameserver.model.entity.event.TvT;
- import com.l2jfrozen.gameserver.model.entity.event.VIP;
- import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
- @@ -233,7 +233,7 @@
- import com.l2jfrozen.util.Point3D;
- import com.l2jfrozen.util.database.L2DatabaseFactory;
- import com.l2jfrozen.util.random.Rnd;
- -
- +import com.l2jfrozen.gameserver.event.EventManager;
- /**
- * This class represents all player characters in the world. There is always a client-thread connected to this (except
- @@ -4545,7 +4545,7 @@
- return;
- }
- - if(L2Event.active && eventSitForced)
- + if (EventManager.getInstance().isRunning() && eventSitForced)
- {
- sendMessage("A dark force beyond your mortal understanding makes your knees to shake when you try to stand up ...");
- }
- @@ -5883,6 +5883,11 @@
- return;
- }
- }
- + if(!EventManager.getInstance().canTargetPlayer(this, player))
- + {
- + player.sendPacket(new ActionFailed());
- + return;
- + }
- // Check if the L2PcInstance is confused
- if(player.isOutOfControl())
- {
- @@ -7296,6 +7301,19 @@
- doPkInfo(pk);
- }
- }
- +
- + L2PcInstance ek = null;
- +
- + if (killer instanceof L2PcInstance)
- + ek = (L2PcInstance) killer;
- + if(killer instanceof L2Summon)
- + ek = ((L2Summon) killer).getOwner();
- +
- + if(ek != null && EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered(ek))
- + {
- + EventManager.getInstance().getCurrentEvent().onKill(this,ek);
- + EventManager.getInstance().getCurrentEvent().onDie(this,ek);
- + }
- if(atEvent && pk != null)
- {
- @@ -7754,6 +7772,9 @@
- // If in duel and you kill (only can kill l2summon), do nothing
- if(isInDuel() && targetPlayer.isInDuel())
- return;
- +
- + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered(targetPlayer))
- + return;
- // If in Arena, do nothing
- if(isInsideZone(ZONE_PVP) || targetPlayer.isInsideZone(ZONE_PVP))
- @@ -8432,6 +8453,9 @@
- if(isInsideZone(ZONE_PVP))
- return;
- +
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + return;
- setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME);
- @@ -8461,6 +8485,9 @@
- if(player_target == null)
- return;
- +
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + return;
- if((TvT.is_started() && _inEventTvT && player_target._inEventTvT) || (DM.is_started() && _inEventDM && player_target._inEventDM) || (CTF.is_started() && _inEventCTF && player_target._inEventCTF) || (VIP._started && _inEventVIP && player_target._inEventVIP))
- return;
- @@ -8579,6 +8606,9 @@
- {
- _log.fine(getName() + " died and lost " + lostExp + " experience.");
- }
- +
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + lostExp = 0;
- // Set the new Experience value of the L2PcInstance
- getStat().addExp(-lostExp);
- @@ -11818,6 +11848,9 @@
- // Check if the L2PcInstance is in an arena or a siege area
- if(isInsideZone(ZONE_PVP) && ((L2PcInstance) attacker).isInsideZone(ZONE_PVP))
- return true;
- +
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)attacker) && EventManager.getInstance().isRunning())
- + return true;
- if(getClan() != null)
- {
- @@ -11907,6 +11940,17 @@
- */
- public void useMagic(L2Skill skill, boolean forceUse, boolean dontMove)
- {
- + if(EventManager.getInstance().isRegistered(this))
- + if(!EventManager.getInstance().getCurrentEvent().getBoolean("allowUseMagic"))
- + {
- + sendPacket(new ActionFailed());
- + return;
- + }
- +
- + if(EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(this))
- + if(!EventManager.getInstance().getCurrentEvent().onUseMagic(skill))
- + return;
- +
- if(isDead())
- {
- abortCast();
- @@ -12617,6 +12661,9 @@
- //SkillDat skilldatpet = getCurrentPetSkill();
- if(skill.isPvpSkill()) // pvp skill
- {
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)target) && EventManager.getInstance().isRunning())
- + return true;
- +
- if(getClan() != null && ((L2PcInstance)target).getClan() != null)
- {
- if(getClan().isAtWarWith(((L2PcInstance)target).getClan().getClanId()) && ((L2PcInstance)target).getClan().isAtWarWith(getClan().getClanId()))
- @@ -12631,6 +12678,9 @@
- else if ((skilldat != null && !skilldat.isCtrlPressed() && skill.isOffensive() && !srcIsSummon)
- /*|| (skilldatpet != null && !skilldatpet.isCtrlPressed() && skill.isOffensive() && srcIsSummon)*/)
- {
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)target) && EventManager.getInstance().isRunning())
- + return true;
- +
- if(getClan() != null && ((L2PcInstance)target).getClan() != null)
- {
- if(getClan().isAtWarWith(((L2PcInstance)target).getClan().getClanId()) && ((L2PcInstance)target).getClan().isAtWarWith(getClan().getClanId()))
- @@ -14855,6 +14905,9 @@
- */
- public synchronized boolean setActiveClass(int classIndex)
- {
- + if(EventManager.getInstance().players.contains(this))
- + return false;
- +
- if(isInCombat() || this.getAI().getIntention() == CtrlIntention.AI_INTENTION_ATTACK){
- sendMessage("Impossible switch class if in combat");
- sendPacket( ActionFailed.STATIC_PACKET );
- @@ -16378,6 +16431,10 @@
- setXYZ(_obsX, _obsY, _obsZ);
- }
- + EventManager.getInstance().onLogout(this);
- + if(EventManager.getInstance().isRegistered(this))
- + EventManager.getInstance().getCurrentEvent().onLogout(this);
- +
- if(isTeleporting())
- {
- try
- @@ -17641,6 +17698,9 @@
- {
- if(getDeathPenaltyBuffLevel() >= 15) //maximum level reached
- return;
- +
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + return;
- if(getDeathPenaltyBuffLevel() != 0)
- {
- Index: head-src/com/l2jfrozen/gameserver/event/Domination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Domination.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Domination.java (revision 0)
- @@ -0,0 +1,197 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +
- +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class Domination extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + debug("The event started with " + players.size() + " player");
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + debug("The event started");
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + unSpawnZones();
- + setStatus(EventState.INACTIVE);
- + debug("The event ended. Winner: " + winnerTeam);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private FastList<L2Spawn> zones;
- +
- + public Domination()
- + {
- + super();
- + eventId = 2;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + zones = new FastList<L2Spawn>();
- + winnerTeam = 0;
- + }
- +
- + @Override
- + protected void clockTick()
- + {
- + int team1 = 0;
- + int team2 = 0;
- +
- + for (L2PcInstance player : getPlayerList())
- + switch (getTeam(player))
- + {
- + case 1:
- + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
- + team1++;
- + break;
- +
- + case 2:
- + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
- + team2++;
- + break;
- + }
- +
- + if (team1 > team2)
- + {
- + for (L2PcInstance player : getPlayersOfTeam(1))
- + increasePlayersScore(player);
- + teams.get(1).increaseScore();
- + }
- +
- + if (team2 > team1)
- + {
- + for (L2PcInstance player : getPlayersOfTeam(2))
- + increasePlayersScore(player);
- + teams.get(2).increaseScore();
- + }
- +
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + killer.addItem("Event", 6392, 1, killer, true);
- + addToResurrector(victim);
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + int[] npcpos = getPosition("Zone", 1);
- + zones.add(spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("zoneNpcId")));
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void unSpawnZones()
- + {
- + for (L2Spawn s : zones)
- + {
- + s.getLastSpawn().deleteMe();
- + s.stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(s, true);
- + zones.remove(s);
- + }
- + }
- +
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/GameServer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/GameServer.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/GameServer.java (working copy)
- @@ -74,6 +74,9 @@
- import com.l2jfrozen.gameserver.datatables.xml.AugmentationData;
- import com.l2jfrozen.gameserver.datatables.xml.ExperienceData;
- import com.l2jfrozen.gameserver.datatables.xml.ZoneData;
- +import com.l2jfrozen.gameserver.event.EventBuffer;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.event.EventStats;
- import com.l2jfrozen.gameserver.geo.GeoData;
- import com.l2jfrozen.gameserver.geo.geoeditorcon.GeoEditorListener;
- import com.l2jfrozen.gameserver.geo.pathfinding.PathFinding;
- @@ -118,7 +121,7 @@
- import com.l2jfrozen.gameserver.model.entity.Announcements;
- import com.l2jfrozen.gameserver.model.entity.Hero;
- import com.l2jfrozen.gameserver.model.entity.MonsterRace;
- -import com.l2jfrozen.gameserver.model.entity.event.manager.EventManager;
- +//import com.l2jfrozen.gameserver.model.entity.event.manager.EventManager;
- import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
- import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
- import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSignsFestival;
- @@ -531,7 +534,7 @@
- else
- _log.info("All custom mods are Disabled.");
- - Util.printSection("EventManager");
- + /*Util.printSection("EventManager");
- EventManager.getInstance().startEventRegistration();
- if(EventManager.TVT_EVENT_ENABLED || EventManager.CTF_EVENT_ENABLED || EventManager.DM_EVENT_ENABLED)
- @@ -544,7 +547,7 @@
- _log.info("DM Event is Enabled.");
- }
- else
- - _log.info("All events are Disabled.");
- + _log.info("All events are Disabled.");*/
- if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
- OfflineTradeTable.restoreOfflineTraders();
- @@ -555,6 +558,11 @@
- _log.info("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
- _log.info("GameServer Started, free memory " + Memory.getFreeMemory() + " Mb of " + Memory.getTotalMemory() + " Mb");
- _log.info("Used memory: " + Memory.getUsedMemory() + " MB");
- +
- + EventManager.getInstance();
- + EventStats.getInstance();
- + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + EventBuffer.getInstance();
- Util.printSection("Status");
- System.gc();
- Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (revision 0)
- @@ -0,0 +1,50 @@
- +package com.l2jfrozen.gameserver.model.actor.instance;
- +
- +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import javolution.text.TextBuilder;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class L2EventManagerInstance extends L2FolkInstance
- +{
- +private int objectId;
- +
- + public L2EventManagerInstance(int objectId, L2NpcTemplate template)
- + {
- + super(objectId, template);
- + this.objectId = objectId;
- + }
- +
- + @Override
- + public void onBypassFeedback(L2PcInstance player, String command)
- + {
- + if (command.startsWith("reg"))
- + {
- + EventManager.getInstance().registerPlayer(player);
- + }
- + if (command.startsWith("unreg"))
- + {
- + EventManager.getInstance().unregisterPlayer(player);
- + }
- + if (command.startsWith("list"))
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + TextBuilder sb = new TextBuilder();
- + sb.append("<html><body><center>Select an event to vote for it:<br>");
- +
- + int i = 0;
- + for(String name: EventManager.getInstance().getEventNames())
- + {
- + i++;
- + sb.append (" <a action=\"bypass -h npc_"+objectId+"_"+i+"\">- "+name+" -</a> <br>");
- + }
- + sb.append("</center></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- + else
- + {
- + EventManager.getInstance().addVote(player,Integer.parseInt(command));
- + }
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/EventConfig.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventConfig.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/EventConfig.java (revision 0)
- @@ -0,0 +1,270 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.io.File;
- +import java.util.StringTokenizer;
- +import java.util.logging.Logger;
- +
- +import javax.xml.parsers.DocumentBuilder;
- +import javax.xml.parsers.DocumentBuilderFactory;
- +
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import org.w3c.dom.Document;
- +import org.w3c.dom.NamedNodeMap;
- +import org.w3c.dom.Node;
- +
- +import com.l2jfrozen.util.random.Rnd;
- +
- +public class EventConfig
- +{
- +
- + @SuppressWarnings("synthetic-access")
- + private static class SingletonHolder
- + {
- + protected static final EventConfig _instance = new EventConfig();
- + }
- +
- + public static EventConfig getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + private Logger _log = Logger.getLogger(EventConfig.class.getName());
- + public FastMap<Integer, FastMap<String, String>> config;
- +
- + public FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>> positions;
- +
- + public FastMap<Integer, FastMap<String, int[]>> colors;
- +
- + public FastMap<Integer, FastMap<String, FastList<Integer>>> restrictions;
- +
- + public EventConfig()
- + {
- + config = new FastMap<Integer, FastMap<String, String>>();
- + positions = new FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>>();
- + colors = new FastMap<Integer, FastMap<String, int[]>>();
- + restrictions = new FastMap<Integer, FastMap<String, FastList<Integer>>>();
- + loadConfigs();
- + }
- +
- + private void addColor(int id, String owner, int[] color)
- + {
- + if (!colors.containsKey(id))
- + colors.put(id, new FastMap<String, int[]>());
- +
- + colors.get(id).put(owner, color);
- + }
- +
- + private void addPosition(int id, String owner, int x, int y, int z, int radius)
- + {
- +
- + if (!positions.containsKey(id))
- + positions.put(id, new FastMap<String, FastMap<Integer, int[]>>());
- + if (!positions.get(id).containsKey(owner))
- + positions.get(id).put(owner, new FastMap<Integer, int[]>());
- +
- + positions.get(id).get(owner).put(positions.get(id).get(owner).size() + 1, new int[] { x, y, z, radius });
- + }
- +
- + private void addProperty(int id, String propName, String value)
- + {
- + if (!config.containsKey(id))
- + config.put(id, new FastMap<String, String>());
- +
- + config.get(id).put(propName, value);
- + }
- +
- + private void addRestriction(int id, String type, String ids)
- + {
- + if (!restrictions.containsKey(id))
- + restrictions.put(id, new FastMap<String, FastList<Integer>>());
- +
- + FastList<Integer> idlist = new FastList<Integer>();
- + StringTokenizer st = new StringTokenizer(ids, ",");
- + while (st.hasMoreTokens())
- + idlist.add(Integer.parseInt(st.nextToken()));
- +
- + restrictions.get(id).put(type, idlist);
- + }
- +
- + public boolean getBoolean(int event, String propName)
- + {
- + if (!(config.containsKey(event)))
- + {
- + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
- + return false;
- + }
- +
- + if (config.get(event).containsKey(propName))
- + return Boolean.parseBoolean(config.get(event).get(propName));
- + else
- + {
- + _log.warning("Event: Try to get a non existing property: " + propName);
- + return false;
- + }
- +
- + }
- +
- + public int[] getColor(int event, String owner)
- + {
- + if (!(colors.containsKey(event)))
- + {
- + _log.warning("Event: Try to get a color of a non existing event: ID: " + event);
- + return new int[] { 255, 255, 255 };
- + }
- +
- + if (colors.get(event).containsKey(owner))
- + return colors.get(event).get(owner);
- + else
- + {
- + _log.warning("Event: Try to get a non existing color: " + owner);
- + return new int[] { 255, 255, 255 };
- + }
- + }
- +
- + public int getInt(int event, String propName)
- + {
- + if (!(config.containsKey(event)))
- + {
- + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
- + return -1;
- + }
- +
- + if (config.get(event).containsKey(propName))
- + return Integer.parseInt(config.get(event).get(propName));
- + else
- + {
- + _log.warning("Event: Try to get a non existing property: " + propName);
- + return -1;
- + }
- + }
- +
- + public int[] getPosition(int event, String owner, int num)
- + {
- + if (!positions.containsKey(event))
- + {
- + _log.warning("Event: Try to get a position of a non existing event: ID: " + event);
- + return new int[] {};
- + }
- + if (!positions.get(event).containsKey(owner))
- + {
- + _log.warning("Event: Try to get a position of a non existing owner: " + owner);
- + return new int[] {};
- + }
- + if (!positions.get(event).get(owner).containsKey(num) && num != 0)
- + {
- + _log.warning("Event: Try to get a non existing position: " + num);
- + return new int[] {};
- + }
- +
- + if (num == 0)
- + return positions.get(event).get(owner).get(Rnd.get(positions.get(event).get(owner).size()) + 1);
- + else
- + return positions.get(event).get(owner).get(num);
- + }
- +
- + public FastList<Integer> getRestriction(int event, String type)
- + {
- + if (!(restrictions.containsKey(event)))
- + {
- + _log.warning("Event: Try to get a restriction of a non existing event: ID: " + event);
- + return null;
- + }
- + if (restrictions.get(event).containsKey(type))
- + return restrictions.get(event).get(type);
- + else
- + {
- + _log.warning("Event: Try to get a non existing restriction: " + type);
- + return null;
- + }
- + }
- +
- + public String getString(int event, String propName)
- + {
- + if (!(config.containsKey(event)))
- + {
- + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
- + return null;
- + }
- +
- + if (config.get(event).containsKey(propName))
- + return config.get(event).get(propName);
- + else
- + {
- + _log.warning("Event: Try to get a non existing property: " + propName);
- + return null;
- + }
- +
- + }
- +
- + private void loadConfigs()
- + {
- + File configFile = new File("./config/Events.xml");
- + Document doc = null;
- + try
- + {
- + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- + dbf.setIgnoringComments(true);
- + dbf.setValidating(false);
- + DocumentBuilder db = dbf.newDocumentBuilder();
- + doc = db.parse(configFile);
- +
- + for (Node root = doc.getFirstChild(); root != null; root = root.getNextSibling())
- + if ("events".equalsIgnoreCase(root.getNodeName()))
- + for (Node event = root.getFirstChild(); event != null; event = event.getNextSibling())
- + if ("event".equalsIgnoreCase(event.getNodeName()))
- + {
- + NamedNodeMap eventAttrs = event.getAttributes();
- + int eventId = Integer.parseInt(eventAttrs.getNamedItem("id").getNodeValue());
- +
- + for (Node property = event.getFirstChild(); property != null; property = property.getNextSibling())
- + {
- +
- + if ("property".equalsIgnoreCase(property.getNodeName()))
- + {
- + NamedNodeMap propAttrs = property.getAttributes();
- + String name = propAttrs.getNamedItem("name").getNodeValue();
- + String value = propAttrs.getNamedItem("value").getNodeValue();
- + addProperty(eventId, name, value);
- + }
- +
- + if ("position".equalsIgnoreCase(property.getNodeName()))
- + {
- + NamedNodeMap propAttrs = property.getAttributes();
- + String owner = propAttrs.getNamedItem("owner").getNodeValue();
- + String x = propAttrs.getNamedItem("x").getNodeValue();
- + String y = propAttrs.getNamedItem("y").getNodeValue();
- + String z = propAttrs.getNamedItem("z").getNodeValue();
- + String radius = propAttrs.getNamedItem("radius").getNodeValue();
- + addPosition(eventId, owner, Integer.parseInt(x), Integer.parseInt(y), Integer.parseInt(z), Integer.parseInt(radius));
- +
- + }
- +
- + if ("color".equalsIgnoreCase(property.getNodeName()))
- + {
- + NamedNodeMap propAttrs = property.getAttributes();
- + String owner = propAttrs.getNamedItem("owner").getNodeValue();
- + int r = Integer.parseInt(propAttrs.getNamedItem("r").getNodeValue());
- + int g = Integer.parseInt(propAttrs.getNamedItem("g").getNodeValue());
- + int b = Integer.parseInt(propAttrs.getNamedItem("b").getNodeValue());
- + addColor(eventId, owner, new int[] { r, g, b });
- + }
- +
- + if ("restriction".equalsIgnoreCase(property.getNodeName()))
- + {
- + NamedNodeMap propAttrs = property.getAttributes();
- + String type = propAttrs.getNamedItem("type").getNodeValue();
- + String ids = propAttrs.getNamedItem("ids").getNodeValue();
- + addRestriction(eventId, type, ids);
- + }
- + }
- + }
- + }
- + catch (Exception e)
- + {
- +
- + }
- +
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/Event.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Event.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Event.java (revision 0)
- @@ -0,0 +1,696 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.util.Set;
- +
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
- +import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
- +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.L2Party;
- +import com.l2jfrozen.gameserver.model.L2Skill;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.L2Summon;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PetInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
- +import com.l2jfrozen.gameserver.network.serverpackets.ExShowScreenMessage;
- +import com.l2jfrozen.gameserver.network.serverpackets.Ride;
- +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
- +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
- +import com.l2jfrozen.gameserver.util.Broadcast;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public abstract class Event
- +{
- + protected class Clock implements Runnable
- + {
- + protected String getTime()
- + {
- + String mins = "" + time / 60;
- + String secs = (time % 60 < 10 ? "0" + time % 60 : "" + time % 60);
- + return "" + mins + ":" + secs + "";
- + }
- +
- + public void run()
- + {
- + clockTick();
- + scorebartext = getScorebar();
- + for (L2PcInstance player : getPlayerList())
- + player.sendPacket(new ExShowScreenMessage(1, -1, 2, false, 1, 0, 0, false, 2000, false, scorebartext));
- +
- + if (time <= 0)
- + schedule(1);
- + else
- + {
- + time--;
- + tpm.scheduleGeneral(clock, 1000);
- + }
- + }
- +
- + protected void setTime(int t)
- + {
- + time = t;
- + }
- +
- + protected void startClock(int mt)
- + {
- + time = mt;
- + tpm.scheduleGeneral(clock, 1);
- + }
- + }
- +
- + protected class ResurrectorTask implements Runnable
- + {
- + private L2PcInstance player;
- +
- + public ResurrectorTask(L2PcInstance p)
- + {
- + player = p;
- + ThreadPoolManager.getInstance().scheduleGeneral(this, 7000);
- + debug("Resurrector task created: " + player.getName());
- + }
- +
- + public void run()
- + {
- + if (EventManager.getInstance().isRegistered(player))
- + {
- + debug("Resurrector task executed: " + player.getName());
- + player.doRevive();
- +
- + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + EventBuffer.getInstance().buffPlayer(player);
- +
- + player.setCurrentCp(player.getMaxCp());
- + player.setCurrentHp(player.getMaxHp());
- + player.setCurrentMp(player.getMaxMp());
- + teleportToTeamPos(player);
- + }
- +
- + }
- + }
- +
- + protected int eventId;
- +
- + //Config
- + protected EventConfig config = EventConfig.getInstance();
- +
- + protected static int[] startpos = EventManager.npcPos;
- +
- + protected FastMap<Integer, EventTeam> teams;
- +
- + //TEAM-STATUS-SCORE
- + protected FastMap<L2PcInstance, int[]> players;
- +
- + protected ThreadPoolManager tpm;
- +
- + protected ResurrectorTask resurrectorTask;
- +
- + private String scorebartext;
- +
- + protected Clock clock;
- +
- + protected int time;
- +
- + protected int winnerTeam;
- +
- + protected int loserTeam;
- +
- + public Event()
- + {
- + teams = new FastMap<Integer, EventTeam>();
- + clock = new Clock();
- + tpm = ThreadPoolManager.getInstance();
- + players = new FastMap<L2PcInstance, int[]>();
- + time = 0;
- + }
- +
- + protected void addToResurrector(L2PcInstance player)
- + {
- + new ResurrectorTask(player);
- + }
- +
- + protected void announce(Set<L2PcInstance> list, String text)
- + {
- + for (L2PcInstance player : list)
- + player.sendPacket(new CreatureSay(0, 18, "", "[Event] " + text));
- + }
- +
- + public boolean canAttack(L2PcInstance player, L2Object target)
- + {
- + return true;
- + }
- +
- + protected void clockTick()
- + {
- +
- + }
- +
- + protected int countOfPositiveStatus()
- + {
- + int count = 0;
- + for (L2PcInstance player : getPlayerList())
- + if (getStatus(player) >= 0)
- + count++;
- +
- + return count;
- + }
- +
- + protected void createNewTeam(int id, String name, int[] color, int[] startPos)
- + {
- + teams.put(id, new EventTeam(id, name, color, startPos));
- + }
- +
- + protected void createPartyOfTeam(int teamId)
- + {
- + int count = 0;
- + L2Party party = null;
- +
- + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
- +
- + for (L2PcInstance p : players.keySet())
- + if (getTeam(p) == teamId)
- + list.add(p);
- +
- + for (L2PcInstance player : list)
- + {
- + if (count % 9 == 0 && list.size() - count != 1)
- + party = new L2Party(player, 1);
- + if (count % 9 < 9)
- + player.joinParty(party);
- + count++;
- + }
- + }
- +
- + protected void debug(String text)
- + {
- + EventManager.getInstance().debug(text);
- + }
- +
- + protected void divideIntoTeams(int number)
- + {
- + int i = 0;
- + while (EventManager.getInstance().players.size() != 0)
- + {
- + i++;
- + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
- + players.put(player, new int[] { i, 0, 0 });
- + EventManager.getInstance().players.remove(player);
- + if (i == number)
- + i = 0;
- + }
- + }
- +
- + public void dropBomb(L2PcInstance player)
- + {
- +
- + }
- +
- + protected abstract void endEvent();
- +
- + protected void forceSitAll()
- + {
- + for (L2PcInstance player : players.keySet())
- + {
- + if (player.isCastingNow())
- + player.abortCast();
- + if (player.isAttackingNow())
- + player.abortAttack();
- + player.sitDown();
- + player.eventSitForced = true;
- + }
- + }
- +
- + protected void forceStandAll()
- + {
- + for (L2PcInstance player : players.keySet())
- + {
- + player.eventSitForced = false;
- + player.standUp();
- + }
- +
- + }
- +
- + public boolean getBoolean(String propName)
- + {
- + return config.getBoolean(eventId, propName);
- + }
- +
- + public int[] getColor(String owner)
- + {
- + return config.getColor(eventId, owner);
- + }
- +
- + public int getInt(String propName)
- + {
- + return config.getInt(eventId, propName);
- + }
- +
- + protected Set<L2PcInstance> getPlayerList()
- + {
- + return players.keySet();
- + }
- +
- + protected FastList<L2PcInstance> getPlayersOfTeam(int team)
- + {
- + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
- +
- + for (L2PcInstance player : getPlayerList())
- + if (getTeam(player) == team)
- + list.add(player);
- +
- + return list;
- + }
- +
- + protected EventTeam getPlayersTeam(L2PcInstance player)
- + {
- + return teams.get(players.get(player)[0]);
- + }
- +
- + protected FastList<L2PcInstance> getPlayersWithStatus(int status)
- + {
- + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
- +
- + for (L2PcInstance player : getPlayerList())
- + if (getStatus(player) == status)
- + list.add(player);
- +
- + return list;
- + }
- +
- + protected L2PcInstance getPlayerWithMaxScore()
- + {
- + L2PcInstance max;
- + max = players.head().getNext().getKey();
- + for (L2PcInstance player : players.keySet())
- + if (players.get(player)[2] > players.get(max)[2])
- + max = player;
- +
- + return max;
- + }
- +
- + protected void unequip(){
- + for (L2PcInstance player : players.keySet())
- + {
- + player.getInventory().unEquipItemInSlot(7);
- + player.getInventory().unEquipItemInSlot(8);
- + player.getInventory().unEquipItemInSlot(14);
- + }
- + }
- +
- + public int[] getPosition(String owner, int num)
- + {
- + return config.getPosition(eventId, owner, num);
- + }
- +
- + protected L2PcInstance getRandomPlayer()
- + {
- + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
- + for (L2PcInstance player : players.keySet())
- + temp.add(player);
- +
- + return temp.get(Rnd.get(temp.size()));
- + }
- +
- + protected L2PcInstance getRandomPlayerFromTeam(int team)
- + {
- + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
- + for (L2PcInstance player : players.keySet())
- + if (getTeam(player) == team)
- + temp.add(player);
- +
- + return temp.get(Rnd.get(temp.size()));
- + }
- +
- + public FastList<Integer> getRestriction(String type)
- + {
- + return config.getRestriction(eventId, type);
- + }
- +
- + protected int getScore(L2PcInstance player)
- + {
- + return players.get(player)[2];
- + }
- +
- + protected abstract String getScorebar();
- +
- + protected int getStatus(L2PcInstance player)
- + {
- + return players.get(player)[1];
- + }
- +
- + public String getString(String propName)
- + {
- + return config.getString(eventId, propName);
- + }
- +
- + public int getTeam(L2PcInstance player)
- + {
- + return players.get(player)[0];
- + }
- +
- + protected int getWinnerTeam()
- + {
- + FastList<EventTeam> t = new FastList<EventTeam>();
- +
- + for (EventTeam team : teams.values())
- + {
- + if (t.size() == 0)
- + {
- + t.add(team);
- + continue;
- + }
- +
- + if (team.getScore() > t.getFirst().getScore())
- + {
- + t.clear();
- + t.add(team);
- + continue;
- + }
- + if (team.getScore() == t.getFirst().getScore())
- + t.add(team);
- +
- + }
- +
- + if (t.size() > 1)
- + return t.get(Rnd.get(t.size())).getId();
- + else
- + return t.getFirst().getId();
- +
- + }
- +
- + protected void giveReward(FastList<L2PcInstance> players, int id, int ammount)
- + {
- + for (L2PcInstance player : players)
- + {
- + if(player == null)
- + continue;
- +
- + player.addItem("Event", id, ammount, player, true);
- + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
- + }
- +
- + }
- +
- + protected void giveReward(L2PcInstance player, int id, int ammount)
- + {
- + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
- +
- + player.addItem("Event", id, ammount, player, true);
- + }
- +
- + protected void increasePlayersScore(L2PcInstance player)
- + {
- + int old = getScore(player);
- + setScore(player, old + 1);
- + EventStats.getInstance().tempTable.get(player.getObjectId())[3] = EventStats.getInstance().tempTable.get(player.getObjectId())[3] + 1;
- + }
- +
- + protected void msgToAll(String text)
- + {
- + for (L2PcInstance player : players.keySet())
- + player.sendMessage(text);
- + }
- +
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + EventStats.getInstance().tempTable.get(victim.getObjectId())[2] = EventStats.getInstance().tempTable.get(victim.getObjectId())[2] + 1;
- + return;
- + }
- +
- + public void onHit(L2PcInstance actor, L2PcInstance target)
- + {
- + }
- +
- + public void onKill(L2PcInstance victim, L2PcInstance killer)
- + {
- + EventStats.getInstance().tempTable.get(killer.getObjectId())[1] = EventStats.getInstance().tempTable.get(killer.getObjectId())[1] + 1;
- + return;
- + }
- +
- + public void onLogout(L2PcInstance player)
- + {
- + if (players.containsKey(player))
- + removePlayer(player);
- +
- + player.setXYZ(EventManager.getInstance().positions.get(player)[0], EventManager.getInstance().positions.get(player)[1], EventManager.getInstance().positions.get(player)[2]);
- + player.setTitle(EventManager.getInstance().titles.get(player));
- +
- + if (teams.size() == 1)
- + if (getPlayerList().size() == 1)
- + {
- + endEvent();
- + return;
- + }
- +
- + if (teams.size() > 1)
- + {
- + int t = players.head().getNext().getValue()[0];
- + for (L2PcInstance p : getPlayerList())
- + if (getTeam(p) != t)
- + return;
- +
- + endEvent();
- + return;
- +
- + }
- + }
- +
- + public void onSay(int type, L2PcInstance player, String text)
- + {
- + return;
- + }
- +
- + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
- + {
- + return false;
- + }
- +
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + if (EventManager.getInstance().getRestriction("item").contains(item.getItemId()) || getRestriction("item").contains(item.getItemId()))
- + return false;
- +
- + if (item.getItemType() == L2EtcItemType.POTION && !getBoolean("allowPotions"))
- + return false;
- +
- + if (item.getItemType() == L2EtcItemType.SCROLL)
- + return false;
- +
- + return true;
- + }
- +
- + public boolean onUseMagic(L2Skill skill)
- + {
- + if (EventManager.getInstance().getRestriction("skill").contains(skill.getId()) || getRestriction("skill").contains(skill.getId()))
- + return false;
- +
- + if (skill.getSkillType() == L2Skill.SkillType.RESURRECT)
- + return false;
- +
- + if (skill.getSkillType() == L2Skill.SkillType.SUMMON_FRIEND)
- + return false;
- +
- + if (skill.getSkillType() == L2Skill.SkillType.RECALL)
- + return false;
- +
- + if (skill.getSkillType() == L2Skill.SkillType.FAKE_DEATH)
- + return false;
- +
- + return true;
- + }
- +
- + protected void prepare(L2PcInstance player)
- + {
- + if (player.isCastingNow())
- + player.abortCast();
- + player.getAppearance().setVisible();
- +
- + if (player.getPet() != null)
- + {
- + L2Summon summon = player.getPet();
- + if (summon instanceof L2PetInstance)
- + summon.unSummon(player);
- + }
- +
- + if(player.isMounted())
- + {
- + if(player.setMountType(0))
- + {
- + if(player.isFlying())
- + {
- + player.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
- + }
- + Ride dismount = new Ride(player.getObjectId(), Ride.ACTION_DISMOUNT, 0);
- + Broadcast.toSelfAndKnownPlayers(player, dismount);
- + player.setMountObjectID(0);
- + dismount = null;
- + }
- + }
- +
- + if (getBoolean("removeBuffs"))
- + {
- + player.stopAllEffects();
- + if (player.getPet() != null)
- + {
- + L2Summon summon = player.getPet();
- + if (summon instanceof L2Summon)
- + summon.unSummon(player);
- + }
- + }
- +
- + if (player.getParty() != null)
- + {
- + L2Party party = player.getParty();
- + party.removePartyMember(player);
- + }
- + int[] nameColor = getPlayersTeam(player).getTeamColor();
- + player.getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
- + player.setTitle("<- 0 ->");
- +
- + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + EventBuffer.getInstance().buffPlayer(player);
- +
- + player.broadcastUserInfo();
- + }
- +
- + protected void preparePlayers()
- + {
- + for (L2PcInstance player : players.keySet())
- + prepare(player);
- + }
- +
- + protected void removePlayer(L2PcInstance player)
- + {
- + players.remove(player);
- + }
- +
- + public void reset()
- + {
- + players.clear();
- + tpm.purge();
- + winnerTeam = 0;
- +
- + for (EventTeam team : teams.values())
- + team.setScore(0);
- +
- + debug("Event reseted");
- + }
- +
- + protected abstract void schedule(int time);
- +
- + protected void selectPlayers(int teamId, int playerCount)
- + {
- + for (int i = 0; i < playerCount; i++)
- + {
- + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
- + players.put(player, new int[] { teamId, 0, 0 });
- + EventManager.getInstance().players.remove(player);
- + }
- +
- + }
- +
- + protected void setScore(L2PcInstance player, int score)
- + {
- + players.get(player)[2] = score;
- + player.setTitle("<- " + score + " ->");
- + player.broadcastUserInfo();
- + }
- +
- + protected void setStatus(L2PcInstance player, int status)
- + {
- + if (players.containsKey(player))
- + players.get(player)[1] = status;
- + }
- +
- + protected void setTeam(L2PcInstance player, int team)
- + {
- + players.get(player)[0] = team;
- + }
- +
- + protected abstract void showHtml(L2PcInstance player, int obj);
- +
- + protected L2Spawn spawnNPC(int xPos, int yPos, int zPos, int npcId)
- + {
- + final L2NpcTemplate template = NpcTable.getInstance().getTemplate(npcId);
- + try
- + {
- + final L2Spawn spawn = new L2Spawn(template);
- + spawn.setLocx(xPos);
- + spawn.setLocy(yPos);
- + spawn.setLocz(zPos);
- + spawn.setAmount(1);
- + spawn.setHeading(0);
- + spawn.setRespawnDelay(1);
- + SpawnTable.getInstance().addNewSpawn(spawn, false);
- + spawn.init();
- + return spawn;
- + }
- + catch (Exception e)
- + {
- + return null;
- + }
- + }
- +
- + protected abstract void start();
- +
- + protected void teleportPlayer(L2PcInstance player, int[] coordinates)
- + {
- + player.teleToLocation(coordinates[0] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[1] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[2]);
- + }
- +
- + protected void teleportToTeamPos()
- + {
- + for (L2PcInstance player : players.keySet())
- + {
- + teleportToTeamPos(player);
- + }
- +
- + }
- +
- + protected void teleportToTeamPos(L2PcInstance player)
- + {
- + int[] pos = getPosition(teams.get(getTeam(player)).getName(), 0);
- + teleportPlayer(player, pos);
- + }
- +
- + protected void unspawnNPC(L2Spawn npcSpawn)
- + {
- + if (npcSpawn == null)
- + return;
- +
- + npcSpawn.getLastSpawn().deleteMe();
- + npcSpawn.stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(npcSpawn, true);
- + }
- +
- + public int numberOfTeams()
- + {
- + return teams.size();
- + }
- +
- + public void useCapture(L2PcInstance player, L2NpcInstance base){}
- +
- + protected void polymorph(L2PcInstance player, int id)
- + {
- + player.getPoly().setPolyInfo("", String.valueOf(id));
- + player.decayMe();
- + player.spawnMe(player.getX(),player.getY(),player.getZ());
- + }
- +
- + protected void unpolymorph(L2PcInstance player)
- + {
- + player.getPoly().setPolyInfo(null, "1");
- + player.decayMe();
- + player.spawnMe(player.getX(),player.getY(),player.getZ());
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/EventBuffer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (revision 0)
- @@ -0,0 +1,315 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- +import java.util.Map;
- +import java.util.StringTokenizer;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.util.database.L2DatabaseFactory;
- +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
- +import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class EventBuffer
- +{
- + private static class SingletonHolder
- + {
- + protected static final EventBuffer _instance = new EventBuffer();
- + }
- + private class UpdateTask implements Runnable
- + {
- + public void run()
- + {
- + updateSQL();
- + }
- + }
- + public static EventBuffer getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + private FastMap<String, FastList<Integer>> buffTemplates;
- +
- + private FastMap<String, Boolean> changes;
- +
- + private UpdateTask updateTask;
- +
- + public EventBuffer()
- + {
- + updateTask = new UpdateTask();
- + changes = new FastMap<String, Boolean>();
- + buffTemplates = new FastMap<String, FastList<Integer>>();
- + loadSQL();
- + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(updateTask, 600000, 600000);
- + }
- +
- + protected void buffPlayer(L2PcInstance player)
- + {
- + boolean bss = player.checkBss();
- + boolean sps = player.checkSps();
- + boolean ss = player.checkSs();
- +
- + String playerId = "" + player.getObjectId() + player.getClassIndex();
- +
- + if(!buffTemplates.containsKey(playerId))
- + {
- + EventManager.getInstance().debug("The player : "+player.getName()+" ("+playerId+") without template");
- + return;
- + }
- +
- + for (int skillId : buffTemplates.get(playerId))
- + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getEffects(player, player, ss, sps, bss);
- + }
- +
- + public void changeList(L2PcInstance player, int buff, boolean action)
- + {
- + String playerId = "" + player.getObjectId() + player.getClassIndex();
- +
- + if (!buffTemplates.containsKey(playerId))
- + {
- + buffTemplates.put(playerId, new FastList<Integer>());
- + changes.put(playerId, true);
- + }
- + else
- + {
- + if (!changes.containsKey(playerId))
- + changes.put(playerId, false);
- +
- + if (action)
- + buffTemplates.get(playerId).add(buff);
- + else
- + buffTemplates.get(playerId).remove(buffTemplates.get(playerId).indexOf(buff));
- +
- + }
- +
- + }
- +
- + private void loadSQL()
- + {
- + if (!EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + return;
- +
- + Connection con = null;
- + PreparedStatement statement = null;
- + try
- + {
- + con = L2DatabaseFactory.getInstance().getConnection();
- + statement = con.prepareStatement("SELECT * FROM event_buffs");
- + ResultSet rset = statement.executeQuery();
- + int count = 0;
- + while (rset.next())
- + {
- + count++;
- +
- + buffTemplates.put(rset.getString("player"), new FastList<Integer>());
- +
- + StringTokenizer st = new StringTokenizer(rset.getString("buffs"), ",");
- +
- + FastList<Integer> templist = new FastList<Integer>();
- +
- + while (st.hasMoreTokens())
- + templist.add(Integer.parseInt(st.nextToken()));
- +
- + buffTemplates.getEntry(rset.getString("player")).setValue(templist);
- + }
- + rset.close();
- + statement.close();
- +
- + EventManager.getInstance().debug("Buffer loaded: " + count + " players template.");
- + }
- + catch (Exception e)
- + {
- + System.out.println("EventBuffs SQL catch");
- + }
- + finally
- + {
- + try { con.close(); } catch (Exception e) {}
- + }
- + }
- +
- + protected boolean playerHaveTemplate(L2PcInstance player)
- + {
- + String playerId = "" + player.getObjectId() + player.getClassIndex();
- +
- + if (buffTemplates.containsKey(playerId))
- + return true;
- + else
- + return false;
- + }
- +
- + public void showHtml(L2PcInstance player)
- + {
- + try{
- + String playerId = "" + player.getObjectId() + player.getClassIndex();
- +
- + if (!buffTemplates.containsKey(playerId))
- + {
- + buffTemplates.put(playerId, new FastList<Integer>());
- + changes.put(playerId, true);
- + }
- +
- + StringTokenizer st = new StringTokenizer(EventManager.getInstance().getString("allowedBuffsList"), ",");
- +
- + FastList<Integer> skillList = new FastList<Integer>();
- +
- + while (st.hasMoreTokens())
- + skillList.add(Integer.parseInt(st.nextToken()));
- +
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Edit Buffs</td><td width=80></td><td width=120>Remaining slots: " + (EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) + "</td></tr></table><br><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td>Added buffs:</td></tr></table><br>");
- + sb.append("<center><table width=270>");
- +
- + int c = 0;
- + for (int skillId : buffTemplates.get(playerId))
- + {
- + c++;
- + String skillStr = "0000";
- + if (skillId < 100)
- + skillStr = "00" + skillId;
- + else if (skillId > 99 && skillId < 1000)
- + skillStr = "0" + skillId;
- + else if (skillId > 4698 && skillId < 4701)
- + skillStr = "1331";
- + else if (skillId > 4701 && skillId < 4704)
- + skillStr = "1332";
- + else
- + skillStr = "" + skillId;
- +
- + if (c % 2 == 1)
- + sb.append("<tr><td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td>");
- + if (c % 2 == 0)
- + sb.append("<td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td></tr>");
- + }
- +
- + if (c % 2 == 1)
- + sb.append("<td width=33></td><td width=100></td></tr>");
- +
- + sb.append("</table><br>");
- +
- + sb.append("<br><br><center><table width=270 bgcolor=5A5A5A><tr><td>Available buffs:</td></tr></table><br>");
- + sb.append("<center><table width=270>");
- +
- + c = 0;
- + for (int skillId : skillList)
- + {
- + String skillStr = "0000";
- + if (skillId < 100)
- + skillStr = "00" + skillId;
- + else if (skillId > 99 && skillId < 1000)
- + skillStr = "0" + skillId;
- + else if (skillId > 4698 && skillId < 4701)
- + skillStr = "1331";
- + else if (skillId > 4701 && skillId < 4704)
- + skillStr = "1332";
- + else
- + skillStr = "" + skillId;
- +
- + if (!buffTemplates.get(playerId).contains(skillId))
- + {
- + c++;
- + if (c % 2 == 1)
- + sb.append("<tr><td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td>");
- + if (c % 2 == 0)
- + sb.append("<td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td></tr>");
- + }
- + }
- +
- + if (c % 2 == 1)
- + sb.append("<td width=33></td><td width=100></td></tr>");
- +
- + sb.append("</table>");
- +
- + sb.append("</body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- + catch(Throwable e)
- + {
- + e.printStackTrace();
- + }
- + }
- +
- + public void updateSQL()
- + {
- + Connection con = null;
- + PreparedStatement statement = null;
- +
- + try
- + {
- + con = L2DatabaseFactory.getInstance().getConnection();
- +
- + for (Map.Entry<String, Boolean> player : changes.entrySet())
- + {
- +
- + TextBuilder sb = new TextBuilder();
- +
- + int c = 0;
- + for (int buffid : buffTemplates.get(player.getKey()))
- + if (c == 0)
- + {
- + sb.append(buffid);
- + c++;
- + }
- + else
- + sb.append("," + buffid);
- +
- + if (player.getValue())
- + {
- + statement = con.prepareStatement("INSERT INTO event_buffs(player,buffs) VALUES (?,?)");
- + statement.setString(1, player.getKey());
- + statement.setString(2, sb.toString());
- +
- + statement.executeUpdate();
- + statement.close();
- + }
- + else
- + {
- + statement = con.prepareStatement("UPDATE event_buffs SET buffs=? WHERE player=?");
- + statement.setString(1, sb.toString());
- + statement.setString(2, player.getKey());
- +
- + statement.executeUpdate();
- + statement.close();
- + }
- + }
- + }
- + catch (Exception e)
- + {
- + System.out.println("EventBuffs SQL catch");
- + }
- + finally
- + {
- + try { con.close(); } catch (Exception e) {}
- + }
- +
- + changes.clear();
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/VIPTvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (revision 0)
- @@ -0,0 +1,207 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class VIPTvT extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + selectNewVipOfTeam(1);
- + selectNewVipOfTeam(2);
- + forceSitAll();
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " VIP kills!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- +
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, TELEPORT, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private FastMap<Integer, L2PcInstance> vips;
- +
- + public VIPTvT()
- + {
- + super();
- + eventId = 8;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + vips = new FastMap<Integer, L2PcInstance>();
- + winnerTeam = 0;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winnerTeam = players.head().getNext().getValue()[0];
- +
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + if (vips.get(1) == victim)
- + {
- + teams.get(2).increaseScore();
- + increasePlayersScore(killer);
- + killer.addItem("Event", 6392, 3, killer, true);
- + selectNewVipOfTeam(1);
- + }
- + if (vips.get(2) == victim)
- + {
- + teams.get(1).increaseScore();
- + increasePlayersScore(killer);
- + killer.addItem("Event", 6392, 3, killer, true);
- + selectNewVipOfTeam(2);
- + }
- +
- + addToResurrector(victim);
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void selectNewVipOfTeam(int team)
- + {
- + if (vips.get(team) != null)
- + {
- + int[] nameColor = teams.get(getTeam(vips.get(team))).getTeamColor();
- + vips.get(team).getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
- + }
- +
- + L2PcInstance newvip = getRandomPlayerFromTeam(team);
- + vips.getEntry(team).setValue(newvip);
- + if (team == 1)
- + {
- + int[] c = getColor("BlueVIP");
- + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
- + }
- +
- + if (team == 2)
- + {
- + int[] c = getColor("RedVIP");
- + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
- + }
- +
- + if (!newvip.isDead())
- + {
- + newvip.setCurrentCp(newvip.getMaxCp());
- + newvip.setCurrentMp(newvip.getMaxMp());
- + newvip.setCurrentHp(newvip.getMaxHp());
- + }
- +
- + newvip.broadcastUserInfo();
- +
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + vips.put(1, null);
- + vips.put(2, null);
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + super.onLogout(player);
- +
- + if(vips.get(1) == player)
- + selectNewVipOfTeam(1);
- + if(vips.get(2) == player)
- + selectNewVipOfTeam(2);
- +
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/EventTeam.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventTeam.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/EventTeam.java (revision 0)
- @@ -0,0 +1,109 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class EventTeam implements Comparable<EventTeam>
- +{
- + private int score;
- +
- + private String name;
- +
- + private int[] nameColor;
- +
- + private int[] startPos;
- +
- + private int id;
- +
- + public EventTeam(int id, String name, int[] color, int[] startPos)
- + {
- + this.id = id;
- + score = 0;
- + this.name = name;
- + nameColor = color;
- + this.startPos = startPos;
- + }
- +
- + public int compareTo(EventTeam second)
- + {
- +
- + if (getScore() > second.getScore())
- + return 1;
- + if (getScore() < second.getScore())
- + return -1;
- + if (getScore() == second.getScore())
- + return 0;
- +
- + return 0;
- +
- + }
- +
- + protected String getHexaColor()
- + {
- + String hexa;
- + Integer i1 = nameColor[0];
- + Integer i2 = nameColor[1];
- + Integer i3 = nameColor[2];
- + hexa = "" + (i1 > 15 ? Integer.toHexString(i1) : "0" + Integer.toHexString(i1)) + (i2 > 15 ? Integer.toHexString(i2) : "0" + Integer.toHexString(i2)) + (i3 > 15 ? Integer.toHexString(i3) : "0" + Integer.toHexString(i3));
- + return hexa;
- + }
- +
- + protected int getId()
- + {
- + return id;
- + }
- +
- + protected String getName()
- + {
- + return name;
- + }
- +
- + protected int getScore()
- + {
- + return score;
- + }
- +
- + protected int[] getTeamColor()
- + {
- + return nameColor;
- + }
- +
- + protected int[] getTeamPos()
- + {
- + return startPos;
- + }
- +
- + protected void increaseScore()
- + {
- + score++;
- + }
- +
- + /* (non-Javadoc)
- + * @see java.lang.Comparable#compareTo(java.lang.Object)
- + */
- +
- + protected void increaseScore(int ammount)
- + {
- + score += ammount;
- + }
- +
- + protected void setScore(int ammount)
- + {
- + score = ammount;
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/EventStats.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventStats.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/EventStats.java (revision 0)
- @@ -0,0 +1,383 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- +import java.util.Map;
- +import java.util.Set;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.util.database.L2DatabaseFactory;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.ShowBoard;
- +
- +public class EventStats
- +{
- +
- + private static class SingletonHolder
- + {
- + protected static final EventStats _instance = new EventStats();
- + }
- +
- + private class StatModell
- + {
- + protected int num;
- + protected int wins;
- + protected int losses;
- + protected int kills;
- + protected int deaths;
- + protected int scores;
- +
- + private StatModell(int num, int wins, int losses, int kills, int deaths, int scores)
- + {
- + this.num = num;
- + this.wins = wins;
- + this.losses = losses;
- + this.kills = kills;
- + this.deaths = deaths;
- + this.scores = scores;
- + }
- +
- + }
- +
- + public static EventStats getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + private FastMap<Integer, FastMap<Integer, StatModell>> stats;
- +
- + protected FastMap<Integer, int[]> tempTable;
- +
- + private FastMap<Integer, ShowBoard> htmls;
- +
- + private FastMap<Integer, int[]> statSums;
- +
- + public EventStats()
- + {
- + stats = new FastMap<Integer, FastMap<Integer, StatModell>>();
- + tempTable = new FastMap<Integer, int[]>();
- + htmls = new FastMap<Integer, ShowBoard>();
- + statSums = new FastMap<Integer, int[]>();
- + loadSQL();
- + }
- +
- + protected void applyChanges()
- + {
- + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
- + return;
- +
- + int eventId = EventManager.getInstance().getCurrentEvent().eventId;
- + for (L2PcInstance player : EventManager.getInstance().getCurrentEvent().getPlayerList())
- + {
- + int playerId = player.getObjectId();
- +
- + if (!stats.containsKey(playerId))
- + stats.put(playerId, new FastMap<Integer, StatModell>());
- +
- + if (!stats.get(playerId).containsKey(eventId))
- + stats.get(playerId).put(eventId, new StatModell(0, 0, 0, 0, 0, 0));
- +
- + if (tempTable.get(playerId)[0] == 1)
- + stats.get(playerId).get(eventId).wins = stats.get(playerId).get(eventId).wins + 1;
- + else
- + stats.get(playerId).get(eventId).losses = stats.get(playerId).get(eventId).losses + 1;
- +
- + stats.get(playerId).get(eventId).num = stats.get(playerId).get(eventId).num + 1;
- + stats.get(playerId).get(eventId).kills = stats.get(playerId).get(eventId).kills + tempTable.get(playerId)[1];
- + stats.get(playerId).get(eventId).deaths = stats.get(playerId).get(eventId).deaths + tempTable.get(playerId)[2];
- + stats.get(playerId).get(eventId).scores = stats.get(playerId).get(eventId).scores + tempTable.get(playerId)[3];
- + }
- + EventManager.getInstance().debug("applyChanges finished");
- + }
- +
- + protected void createHtmls()
- + {
- + htmls.clear();
- + TextBuilder sb = new TextBuilder();
- + Connection con = null;
- + PreparedStatement statement = null;
- + try
- + {
- + con = L2DatabaseFactory.getInstance().getConnection();
- + statement = con.prepareStatement("SELECT characters.char_name, event_stats_full.* FROM event_stats_full INNER JOIN characters ON characters.obj_Id = event_stats_full.player ORDER BY event_stats_full.wins DESC");
- + ResultSet rset = statement.executeQuery();
- + rset.last();
- + rset.beforeFirst();
- + int count = 0;
- + while (rset.next())
- + {
- + count++;
- + if (count % 10 == 1)
- + sb.append("<html><body><br><br><center><table width=615 bgcolor=5A5A5A><tr><td width=30><center>Rank</td><td width=100><center>Name</td><td width=55><center>Events</td><td width=55><center>Win%</td><td width=55><center>K:D</td><td width=55><center>Wins</td><td width=55><center>Losses</td><td width=55><center>Kills</td><td width=55><center>Deaths</td><td width=100><center>Favourite Event</td></tr></table><br>" + "<center><table width=635>");
- +
- + sb.append("<tr><td width=30><center>" + count + "</td><td width=100>" + rset.getString("char_name") + "</td><td width=55><center>" + rset.getInt("num") + "</td><td width=55><center>" + rset.getInt("winpercent") + "%</td><td width=55><center>" + rset.getDouble("kdratio") + "</td><td width=55><center>" + rset.getInt("wins") + "</td><td width=55><center>" + rset.getInt("losses") + "</td><td width=55><center>" + rset.getInt("kills") + "</td>" + "<td width=55><center>" + rset.getInt("deaths") + "</td><td width=120><center>" + EventManager.getInstance().events.get(rset.getInt("favevent")).getString("eventName") + "</td></tr>");
- +
- + if (count % 10 == 0)
- + {
- + sb.append("</table></body></html>");
- + htmls.put(count / 10, new ShowBoard(sb.toString(), "101"));
- + sb.clear();
- + }
- + }
- + if (count % 10 != 0 && !htmls.containsKey(count / 10 + 1))
- + {
- + sb.append("</table></body></html>");
- + htmls.put((count / 10 + 1), new ShowBoard(sb.toString(), "101"));
- + sb.clear();
- + }
- + rset.close();
- + statement.close();
- + }
- + catch (Exception e)
- + {
- + System.out.println("create SQL exception.");
- + }
- + finally
- + {
- + try { con.close(); } catch (Exception e) {}
- + }
- + EventManager.getInstance().debug("createHtmls finished");
- + }
- +
- + private void loadSQL()
- + {
- + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
- + return;
- +
- + Connection con = null;
- + PreparedStatement statement = null;
- + try
- + {
- + con = L2DatabaseFactory.getInstance().getConnection();
- + statement = con.prepareStatement("SELECT * FROM event_stats");
- + ResultSet rset = statement.executeQuery();
- + int count = 0;
- + while (rset.next())
- + {
- + count++;
- + if (!stats.containsKey(rset.getInt("player")))
- + stats.put(rset.getInt("player"), new FastMap<Integer, StatModell>());
- +
- + stats.get(rset.getInt("player")).put(rset.getInt("event"), new StatModell(rset.getInt("num"), rset.getInt("wins"), rset.getInt("losses"), rset.getInt("kills"), rset.getInt("deaths"), rset.getInt("scores")));
- + }
- + rset.close();
- + statement.close();
- +
- + EventManager.getInstance().debug("Stats loaded: " + count + " records.");
- + }
- + catch (Exception e)
- + {
- + System.out.println("EventStats SQL catch");
- + }
- + finally
- + {
- + try { con.close(); } catch (Exception e) {}
- + }
- + createHtmls();
- + }
- +
- + public void showHtml(int id, L2PcInstance player)
- + {
- + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
- + {
- + player.sendMessage("The stat tracking is disabled.");
- + return;
- + }
- + player.sendPacket(htmls.get(id));
- + player.sendPacket(new ShowBoard(null, "102"));
- + player.sendPacket(new ShowBoard(null, "103"));
- + }
- +
- + public void showPlayerStats(int playerId, L2PcInstance player)
- + {
- + TextBuilder sb = new TextBuilder();
- + sb.append("<html><body><br><br><center><table width=640 bgcolor=5A5A5A><tr><td width=120><center>Event</td><td width=65><center>Count</td><td width=65><center>Win%</td><td width=65><center>K:D</td><td width=65><center>Wins</td><td width=65><center>Losses</td><td width=65><center>Kills</td><td width=65><center>Deaths</td><td width=65><center>Scores</td></tr></table><br>" + "<center><table width=640>");
- +
- + if (stats.containsKey(playerId))
- + for (Map.Entry<Integer, StatModell> event : stats.get(playerId).entrySet())
- + {
- + StatModell stats = event.getValue();
- +
- + if(EventManager.getInstance().events.containsKey(event.getKey()))
- + sb.append("<tr><td width=120>" + EventManager.getInstance().events.get(event.getKey()).getString("eventName") + "</td><td width=65><center>" + stats.num + "</td><td width=65><center>" + (stats.wins / stats.num) * 100 + "%</td><td width=65><center>" + (stats.deaths == 0 ? (double) stats.kills / stats.num : (double) ((stats.kills / stats.deaths) / stats.num)) + "</td><td width=65><center>" + stats.wins + "</td><td width=65><center>" + stats.losses + "</td><td width=65><center>" + stats.kills / stats.num + "</td><td width=65><center>" + stats.deaths / stats.num + "</td><td width=65><center>" + stats.scores / stats.num + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + player.sendPacket(new ShowBoard(sb.toString(), "101"));
- + player.sendPacket(new ShowBoard(null, "102"));
- + player.sendPacket(new ShowBoard(null, "103"));
- + }
- +
- + public int getEventKills(int playerId)
- + {
- + int kills = 0;
- +
- + if(!stats.containsKey(playerId))
- + return 0;
- + else
- + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
- + kills += statmodell.getValue().kills;
- +
- + return kills;
- + }
- +
- + public int getEvents(int playerId)
- + {
- + int num = 0;
- +
- + if(!stats.containsKey(playerId))
- + return 0;
- + else
- + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
- + num += statmodell.getValue().num;
- +
- + return num;
- + }
- +
- + public int getEventWins(int playerId)
- + {
- + int wins = 0;
- +
- + if(!stats.containsKey(playerId))
- + return 0;
- + else
- + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
- + wins += statmodell.getValue().wins;
- +
- + return wins;
- + }
- +
- + // num | wins | losses | kills | deaths | fav_event_id
- + protected void sumPlayerStats()
- + {
- + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
- + return;
- +
- + statSums.clear();
- +
- + for (int playerId : stats.keySet())
- + {
- +
- + int num = 0;
- + int wins = 0;
- + int losses = 0;
- + int kills = 0;
- + int deaths = 0;
- + int faveventid = 0;
- + int faveventamm = 0;
- +
- + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
- + {
- + num += statmodell.getValue().num;
- + wins += statmodell.getValue().wins;
- + losses += statmodell.getValue().losses;
- + kills += statmodell.getValue().kills;
- + deaths += statmodell.getValue().deaths;
- +
- + if (statmodell.getValue().num > faveventamm)
- + {
- + faveventamm = statmodell.getValue().num;
- + faveventid = statmodell.getKey();
- + }
- + }
- +
- + statSums.put(playerId, new int[] { num, wins, losses, kills, deaths, faveventid });
- +
- + }
- + EventManager.getInstance().debug("sumPlayerStats finished");
- + }
- +
- + protected void updateSQL(Set<L2PcInstance> players, int eventId)
- + {
- + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
- + return;
- +
- + sumPlayerStats();
- + Connection con = null;
- + PreparedStatement statement = null;
- + try
- + {
- + con = L2DatabaseFactory.getInstance().getConnection();
- +
- + for (L2PcInstance player : players)
- + {
- + int id = player.getObjectId();
- +
- + if (statSums.get(id)[0] != 1)
- + {
- + statement = con.prepareStatement("UPDATE event_stats_full SET num=?, winpercent=?, kdratio=?, wins=?, losses=?, kills=?, deaths=?, favevent=? WHERE player=?");
- + statement.setInt(1, statSums.get(id)[0]);
- + statement.setInt(2, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
- + statement.setDouble(3, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
- + statement.setInt(4, statSums.get(id)[1]);
- + statement.setInt(5, statSums.get(id)[2]);
- + statement.setInt(6, statSums.get(id)[3]);
- + statement.setInt(7, statSums.get(id)[4]);
- + statement.setInt(8, statSums.get(id)[5]);
- + statement.setInt(9, id);
- +
- + statement.executeUpdate();
- + statement.close();
- + }
- + else
- + {
- + statement = con.prepareStatement("INSERT INTO event_stats_full(player,num,winpercent,kdratio,wins,losses,kills,deaths,favevent) VALUES (?,?,?,?,?,?,?,?,?)");
- + statement.setInt(1, id);
- + statement.setInt(2, statSums.get(id)[0]);
- + statement.setInt(3, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
- + statement.setDouble(4, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
- + statement.setInt(5, statSums.get(id)[1]);
- + statement.setInt(6, statSums.get(id)[2]);
- + statement.setInt(7, statSums.get(id)[3]);
- + statement.setInt(8, statSums.get(id)[4]);
- + statement.setInt(9, statSums.get(id)[5]);
- + statement.executeUpdate();
- + statement.close();
- + }
- +
- + if (stats.get(id).get(eventId).num != 1)
- + {
- + statement = con.prepareStatement("UPDATE event_stats SET num=?, wins=?, losses=?, kills=?, deaths=?, scores=? WHERE player=? AND event=?");
- + statement.setInt(1, stats.get(id).get(eventId).num);
- + statement.setInt(2, stats.get(id).get(eventId).wins);
- + statement.setInt(3, stats.get(id).get(eventId).losses);
- + statement.setInt(4, stats.get(id).get(eventId).kills);
- + statement.setInt(5, stats.get(id).get(eventId).deaths);
- + statement.setInt(6, stats.get(id).get(eventId).scores);
- + statement.setInt(7, id);
- + statement.setInt(8, eventId);
- + statement.executeUpdate();
- + statement.close();
- + }
- + else
- + {
- + statement = con.prepareStatement("INSERT INTO event_stats(player,event,num,wins,losses,kills,deaths,scores) VALUES (?,?,?,?,?,?,?,?)");
- + statement.setInt(1, id);
- + statement.setInt(2, eventId);
- + statement.setInt(3, stats.get(id).get(eventId).num);
- + statement.setInt(4, stats.get(id).get(eventId).wins);
- + statement.setInt(5, stats.get(id).get(eventId).losses);
- + statement.setInt(6, stats.get(id).get(eventId).kills);
- + statement.setInt(7, stats.get(id).get(eventId).deaths);
- + statement.setInt(8, stats.get(id).get(eventId).scores);
- + statement.executeUpdate();
- + statement.close();
- + }
- +
- + }
- + }
- + catch (Exception e)
- + {
- + System.out.println("EventStats SQL catch");
- + }
- + finally
- + {
- + try { con.close(); } catch (Exception e) {}
- + }
- + EventManager.getInstance().debug("updateSQL finished");
- + createHtmls();
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (working copy)
- @@ -18,6 +18,7 @@
- */
- package com.l2jfrozen.gameserver.network.serverpackets;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.datatables.AccessLevel;
- import com.l2jfrozen.gameserver.datatables.sql.AccessLevels;
- import com.l2jfrozen.gameserver.managers.CastleManager;
- @@ -46,6 +47,7 @@
- private boolean _sweepable;
- private boolean _canTeleport;
- private AccessLevel _access = AccessLevels.getInstance()._userAccessLevel;
- + private boolean _event;
- private com.l2jfrozen.gameserver.model.L2Clan _clan;
- L2Character _activeChar;
- @@ -60,6 +62,7 @@
- L2PcInstance player = (L2PcInstance) cha;
- _access = player.getAccessLevel();
- _clan = player.getClan();
- + _event = EventManager.getInstance().isRegistered((L2PcInstance)cha);
- _canTeleport = !((TvT.is_started() && player._inEventTvT)
- || (DM.is_started() && player._inEventDM)
- || (CTF.is_started() && player._inEventCTF)
- @@ -91,45 +94,55 @@
- // 6d 03 00 00 00 - to siege HQ
- // sweepable
- // 6d 04 00 00 00 - FIXED
- -
- - writeD(_canTeleport ? 0x01 : 0); // 6d 00 00 00 00 - to nearest village
- -
- - if(_canTeleport && _clan != null)
- - {
- - L2SiegeClan siegeClan = null;
- - Boolean isInDefense = false;
- - Castle castle = CastleManager.getInstance().getCastle(_activeChar);
- - Fort fort = FortManager.getInstance().getFort(_activeChar);
- -
- - if(castle != null && castle.getSiege().getIsInProgress())
- +
- + if(_event)
- + {
- + writeD(0x00);
- + writeD(0x00); // 6d 01 00 00 00 - to hide away
- + writeD(0x00); // 6d 02 00 00 00 - to castle
- + writeD(0x00);
- + }
- + else
- + {
- + writeD(_canTeleport ? 0x01 : 0); // 6d 00 00 00 00 - to nearest village
- +
- + if(_canTeleport && _clan != null)
- {
- - //siege in progress
- - siegeClan = castle.getSiege().getAttackerClan(_clan);
- - if(siegeClan == null && castle.getSiege().checkIsDefender(_clan))
- + L2SiegeClan siegeClan = null;
- + Boolean isInDefense = false;
- + Castle castle = CastleManager.getInstance().getCastle(_activeChar);
- + Fort fort = FortManager.getInstance().getFort(_activeChar);
- +
- + if(castle != null && castle.getSiege().getIsInProgress())
- {
- - isInDefense = true;
- + //siege in progress
- + siegeClan = castle.getSiege().getAttackerClan(_clan);
- + if(siegeClan == null && castle.getSiege().checkIsDefender(_clan))
- + {
- + isInDefense = true;
- + }
- }
- - }
- - else if(fort != null && fort.getSiege().getIsInProgress())
- - {
- - //siege in progress
- - siegeClan = fort.getSiege().getAttackerClan(_clan);
- - if(siegeClan == null && fort.getSiege().checkIsDefender(_clan))
- + else if(fort != null && fort.getSiege().getIsInProgress())
- {
- - isInDefense = true;
- + //siege in progress
- + siegeClan = fort.getSiege().getAttackerClan(_clan);
- + if(siegeClan == null && fort.getSiege().checkIsDefender(_clan))
- + {
- + isInDefense = true;
- + }
- }
- +
- + writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
- + writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
- + writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
- }
- -
- - writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
- - writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
- - writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
- - }
- - else
- - {
- - writeD(0x00); // 6d 01 00 00 00 - to hide away
- - writeD(0x00); // 6d 02 00 00 00 - to castle
- - writeD(0x00); // 6d 03 00 00 00 - to siege HQ
- - }
- + else
- + {
- + writeD(0x00); // 6d 01 00 00 00 - to hide away
- + writeD(0x00); // 6d 02 00 00 00 - to castle
- + writeD(0x00); // 6d 03 00 00 00 - to siege HQ
- + }
- + }
- writeD(_sweepable ? 0x01 : 0x00); // sweepable (blue glow)
- writeD(_access.allowFixedRes() ? 0x01 : 0x00); // 6d 04 00 00 00 - to FIXED
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
- @@ -18,12 +18,18 @@
- */
- package com.l2jfrozen.gameserver.network.clientpackets;
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import com.l2jfrozen.Config;
- import com.l2jfrozen.gameserver.ai.CtrlIntention;
- import com.l2jfrozen.gameserver.communitybbs.CommunityBoard;
- +import com.l2jfrozen.gameserver.event.EventBuffer;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.event.EventStats;
- import com.l2jfrozen.gameserver.datatables.sql.AdminCommandAccessRights;
- import com.l2jfrozen.gameserver.handler.AdminCommandHandler;
- import com.l2jfrozen.gameserver.handler.IAdminCommandHandler;
- @@ -43,6 +49,7 @@
- import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
- import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- import com.l2jfrozen.gameserver.util.GMAudit;
- +import com.l2jfrozen.util.database.L2DatabaseFactory;
- public final class RequestBypassToServer extends L2GameClientPacket
- {
- @@ -116,6 +123,18 @@
- ach.useAdminCommand(_command, activeChar);
- }
- + else if(_command.startsWith("event_vote"))
- + {
- + EventManager.getInstance().addVote(activeChar, Integer.parseInt(_command.substring(11)));
- + }
- + else if(_command.equals("event_register"))
- + {
- + EventManager.getInstance().registerPlayer(activeChar);
- + }
- + else if(_command.equals("event_unregister"))
- + {
- + EventManager.getInstance().unregisterPlayer(activeChar);
- + }
- else if(_command.equals("come_here") && activeChar.isGM())
- {
- comeHere(activeChar);
- @@ -307,7 +326,52 @@
- player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim());
- }
- }
- -
- + else if (_command.startsWith("eventvote "))
- + {
- + EventManager.getInstance().addVote(activeChar, Integer.parseInt(_command.substring(10)));
- + }
- + else if (_command.startsWith("eventstats "))
- + {
- + Connection con = null;
- + PreparedStatement statement = null;
- + con = L2DatabaseFactory.getInstance().getConnection();
- + statement = con.prepareStatement("SELECT characters.char_name, event_stats_full.* FROM event_stats_full INNER JOIN characters ON characters.obj_Id = event_stats_full.player ORDER BY event_stats_full.wins DESC");
- + ResultSet rset = statement.executeQuery();
- + if (!rset.last())
- + {
- + rset.close();
- + statement.close();
- + con.close();
- + this.getClient().activeChar.sendMessage("Currently there are no statistics to show.");
- + return;
- + }
- + rset.close();
- + statement.close();
- + con.close();
- + EventStats.getInstance().showHtml(Integer.parseInt(_command.substring(11)),activeChar);
- + }
- + else if (_command.startsWith("eventstats_show "))
- + {
- + EventStats.getInstance().showPlayerStats(Integer.parseInt(_command.substring(16)),activeChar);
- + }
- + else if (_command.equals("eventbuffershow"))
- + {
- + EventBuffer.getInstance().showHtml(activeChar);
- + }
- + else if (_command.startsWith("eventbuffer "))
- + {
- + EventBuffer.getInstance().changeList(activeChar, Integer.parseInt(_command.substring(12,_command.length()-2)), (Integer.parseInt(_command.substring(_command.length()-1)) == 0 ? false : true));
- + EventBuffer.getInstance().showHtml(activeChar);
- + }
- + else if (_command.startsWith("eventinfo "))
- + {
- + int eventId = Integer.valueOf(_command.substring(10));
- +
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + html.setFile("data/html/eventinfo/"+eventId+".htm");
- + activeChar.sendPacket(html);
- + activeChar.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- // Jstar's Custom Bypass Caller!
- else if(_command.startsWith("custom_"))
- {
- Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (working copy)
- @@ -35,6 +35,7 @@
- import com.l2jfrozen.gameserver.datatables.sql.HelperBuffTable;
- import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
- import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.idfactory.IdFactory;
- import com.l2jfrozen.gameserver.managers.CastleManager;
- import com.l2jfrozen.gameserver.managers.CustomNpcInstanceManager;
- @@ -2961,6 +2962,20 @@
- filename = getHtmlPath(npcId, val);
- break;
- }
- +
- + if(npcId == EventManager.getInstance().getInt("managerNpcId"))
- + {
- + EventManager.getInstance().showFirstHtml(player,getObjectId());
- + player.sendPacket( new ActionFailed() );
- + return;
- + }
- +
- + if(EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(player))
- + if(EventManager.getInstance().getCurrentEvent().onTalkNpc(this,player))
- + {
- + player.sendPacket( new ActionFailed() );
- + return;
- + }
- if(this instanceof L2CastleTeleporterInstance){
- ((L2CastleTeleporterInstance)this).showChatWindow(player);
- Index: head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (revision 0)
- @@ -0,0 +1,280 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class DoubleDomination extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + setStatus(EventState.FIGHT);
- + debug("The event started with " + players.size() + " players");
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + debug("The fight started");
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + unSpawnZones();
- + setStatus(EventState.INACTIVE);
- + debug("The event ended. Winner: " + winnerTeam);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private FastMap<L2Spawn, Integer> zones;
- +
- + private int time;
- +
- + private int holder;
- +
- + public DoubleDomination()
- + {
- + super();
- + eventId = 3;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + zones = new FastMap<L2Spawn, Integer>();
- + winnerTeam = 0;
- + time = 0;
- + holder = 0;
- + }
- +
- + @Override
- + protected void clockTick()
- + {
- + int team1 = 0;
- + int team2 = 0;
- +
- + for (L2Spawn zone : zones.keySet())
- + {
- + for (L2PcInstance player : getPlayerList())
- + switch (getTeam(player))
- + {
- + case 1:
- + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
- + team1++;
- + break;
- +
- + case 2:
- + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
- + team2++;
- + break;
- + }
- +
- + if (team1 > team2)
- + zones.getEntry(zone).setValue(1);
- +
- + if (team2 > team1)
- + zones.getEntry(zone).setValue(2);
- +
- + if (team1 == team2)
- + zones.getEntry(zone).setValue(0);
- +
- + team1 = 0;
- + team2 = 0;
- + }
- +
- + if (zones.containsValue(1) && (!zones.containsValue(0) && !zones.containsValue(2)))
- + {
- + if (holder != 1)
- + {
- + announce(getPlayerList(), "The " + teams.get(1).getName() + " team captured both zones. Score in 10sec!");
- + holder = 1;
- + time = 0;
- + }
- +
- + if (time == getInt("timeToScore") - 1)
- + {
- + for (L2PcInstance player : getPlayersOfTeam(1))
- + increasePlayersScore(player);
- + teams.get(1).increaseScore();
- + teleportToTeamPos();
- + time = 0;
- + announce(getPlayerList(), "The " + teams.get(1).getName() + " team scored!");
- + holder = 0;
- + }
- + else
- + time++;
- +
- + }
- + else if (zones.containsValue(2) && (!zones.containsValue(0) && !zones.containsValue(1)))
- + {
- + if (holder != 2)
- + {
- + announce(getPlayerList(), "The " + teams.get(2).getName() + " team captured both zones. Score in 10sec!");
- + holder = 1;
- + time = 0;
- + }
- +
- + if (time == getInt("timeToScore") - 1)
- + {
- + for (L2PcInstance player : getPlayersOfTeam(2))
- + increasePlayersScore(player);
- + teams.get(2).increaseScore();
- + teleportToTeamPos();
- + time = 0;
- + announce(getPlayerList(), "The " + teams.get(2).getName() + " team scored!");
- + holder = 0;
- + }
- + else
- + time++;
- + }
- + else
- + {
- + if (holder != 0)
- + announce(getPlayerList(), "Canceled!");
- +
- + holder = 0;
- + time = 0;
- + }
- +
- + }
- +
- + /**
- + * @see net.sf.l2j.gameserver.event.Event#endEvent()
- + */
- + @Override
- + protected void endEvent()
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + addToResurrector(victim);
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + int[] z1pos = getPosition("Zone", 1);
- + int[] z2pos = getPosition("Zone", 2);
- + zones.put(spawnNPC(z1pos[0], z1pos[1], z1pos[2], getInt("zoneNpcId")), 0);
- + zones.put(spawnNPC(z2pos[0], z2pos[1], z2pos[2], getInt("zoneNpcId")), 0);
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void unSpawnZones()
- + {
- + for (L2Spawn s : zones.keySet())
- + {
- + s.getLastSpawn().deleteMe();
- + s.stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(s, true);
- + zones.remove(s);
- + }
- + }
- +
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java (revision 0)
- @@ -0,0 +1,35 @@
- +package com.l2jfrozen.gameserver.handler.skillhandlers;
- +
- +import com.l2jfrozen.gameserver.handler.ISkillHandler;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.L2Skill;
- +import com.l2jfrozen.gameserver.model.L2Character;
- +import com.l2jfrozen.gameserver.model.L2Skill.SkillType;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +
- +public class Capture implements ISkillHandler
- +{
- +private static final SkillType[] SKILL_IDS =
- +{ SkillType.CAPTURE };
- +
- +public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
- +{
- +if (!(activeChar instanceof L2PcInstance))
- +return;
- +
- +if(!(targets[0] instanceof L2NpcInstance))
- +return;
- +
- +L2PcInstance player = (L2PcInstance) activeChar;
- +L2NpcInstance target = (L2NpcInstance) targets[0];
- +
- +EventManager.getInstance().getCurrentEvent().useCapture(player, target);
- +}
- +
- +public SkillType[] getSkillIds()
- +{
- +return SKILL_IDS;
- +}
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/model/L2Character.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/L2Character.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/model/L2Character.java (working copy)
- @@ -46,6 +46,7 @@
- import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
- import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable.TeleportWhereType;
- import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.geo.GeoData;
- import com.l2jfrozen.gameserver.geo.pathfinding.Node;
- import com.l2jfrozen.gameserver.geo.pathfinding.PathFinding;
- @@ -1107,6 +1108,53 @@
- */
- protected void doAttack(L2Character target)
- {
- + if (this instanceof L2PcInstance)
- + if (EventManager.getInstance().isRegistered((L2PcInstance) this))
- + {
- +
- + if (target instanceof L2PcInstance)
- + if (EventManager.getInstance().areTeammates(
- + (L2PcInstance) this, (L2PcInstance) target)
- + && !EventManager.getInstance().getBoolean(
- + "friendlyFireEnabled"))
- + {
- + sendPacket(new ActionFailed());
- + return;
- + }
- +
- + if (!EventManager.getInstance().getCurrentEvent()
- + .canAttack((L2PcInstance) this, target))
- + {
- + sendPacket(new ActionFailed());
- + return;
- + }
- + }
- +
- + if (this instanceof L2Summon)
- + {
- + if (EventManager.getInstance().isRegistered(
- + ((L2Summon) this).getOwner()))
- + {
- + if (target instanceof L2PcInstance)
- + if (EventManager.getInstance()
- + .areTeammates(((L2Summon) this).getOwner(),
- + (L2PcInstance) target)
- + && !EventManager.getInstance().getBoolean(
- + "friendlyFireEnabled"))
- + {
- + sendPacket(new ActionFailed());
- + return;
- + }
- +
- + if (!EventManager.getInstance().getCurrentEvent()
- + .canAttack(((L2Summon) this).getOwner(), target))
- + {
- + sendPacket(new ActionFailed());
- + return;
- + }
- + }
- + }
- +
- if(Config.DEBUG)
- {
- _log.fine(getName() + " doAttack: target=" + target);
- @@ -1437,6 +1485,10 @@
- {
- weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_NONE);
- }
- +
- + if(this instanceof L2PcInstance && target instanceof L2PcInstance)
- + if(EventManager.getInstance().isRegistered((L2PcInstance)this))
- + EventManager.getInstance().getCurrentEvent().onHit((L2PcInstance)this,(L2PcInstance)target);
- if(player != null)
- {
- @@ -1819,6 +1871,75 @@
- */
- public void doCast(L2Skill skill)
- {
- + try{
- + if(getTarget() != null)
- + {
- + if (this instanceof L2PcInstance)
- + {
- + if (EventManager.getInstance().isRegistered((L2PcInstance) this))
- + {
- + if (!EventManager.getInstance().getCurrentEvent()
- + .canAttack((L2PcInstance) this, getTarget()))
- + return;
- +
- + if (this.getTarget() instanceof L2PcInstance)
- + if (EventManager.getInstance().areTeammates(
- + (L2PcInstance) this,
- + (L2PcInstance) this.getTarget())
- + && !EventManager.getInstance().getBoolean(
- + "friendlyFireEnabled")
- + && skill.isOffensive())
- + {
- + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
- + return;
- + }
- +
- + if (!EventManager.getInstance().getCurrentEvent()
- + .canAttack((L2PcInstance) this, this.getTarget()))
- + {
- + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
- + return;
- + }
- + }
- + }
- +
- + if (this instanceof L2Summon)
- + {
- + if(((L2Summon) this).getOwner() != null)
- + if (EventManager.getInstance().isRegistered(
- + ((L2Summon) this).getOwner()))
- + {
- + if (!EventManager.getInstance().getCurrentEvent()
- + .canAttack(((L2Summon) this).getOwner(), getTarget()))
- + return;
- +
- + if (this.getTarget() instanceof L2PcInstance)
- + if (EventManager.getInstance().areTeammates(
- + ((L2Summon) this).getOwner(),
- + (L2PcInstance) this.getTarget())
- + && !EventManager.getInstance().getBoolean(
- + "friendlyFireEnabled")
- + && skill.isOffensive())
- + {
- + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
- + return;
- + }
- +
- + if (!EventManager
- + .getInstance()
- + .getCurrentEvent()
- + .canAttack(((L2Summon) this).getOwner(),
- + this.getTarget()))
- + {
- + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
- + return;
- +
- + }
- + }
- + }
- + }
- + }catch(ClassCastException e){}
- +
- L2Character activeChar = this;
- if(skill == null)
- Index: head-src/com/l2jfrozen/gameserver/event/Zombie.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Zombie.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Zombie.java (revision 0)
- @@ -0,0 +1,212 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class Zombie extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToRandom();
- + forceSitAll();
- + unequip();
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + transform(getRandomPlayer());
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + setStatus(EventState.INACTIVE);
- + clock.setTime(0);
- +
- + if (getPlayersWithStatus(0).size() != 1)
- + {
- + msgToAll("Tie!");
- + EventManager.getInstance().end("The match has ended in a tie!");
- + }
- +
- + else
- + {
- + L2PcInstance winner = getWinner();
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
- + }
- +
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + public Zombie()
- + {
- + super();
- + eventId = 9;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + }
- +
- + @Override
- + public boolean canAttack(L2PcInstance player, L2Object target)
- + {
- + if (target instanceof L2PcInstance)
- + if (getStatus(player) == 1 && getStatus((L2PcInstance) target) == 0)
- + return true;
- +
- + return false;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "Humans: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
- + }
- +
- + private L2PcInstance getWinner()
- + {
- + return getPlayersWithStatus(0).head().getNext().getValue();
- + }
- +
- + @Override
- + public void onHit(L2PcInstance actor, L2PcInstance target)
- + {
- + if (eventState == EventState.END)
- + {
- + if (getStatus(actor) == 1 && getStatus(target) == 0)
- + {
- + transform(target);
- + increasePlayersScore(actor);
- + actor.addItem("Event", 6392, 2, actor, true);
- + }
- +
- + if (getPlayersWithStatus(0).size() == 1)
- + schedule(1);
- + }
- +
- + }
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + if (getStatus(player) == 1 && getPlayersWithStatus(1).size() == 1)
- + {
- + super.onLogout(player);
- + transform(getRandomPlayer());
- + }
- + else
- + {
- + super.onLogout(player);
- + }
- +
- + }
- +
- + @Override
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + return false;
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + /* (non-Javadoc)
- + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
- + */
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Zombie" : "Human") + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void teleportToRandom()
- + {
- + for (L2PcInstance player : players.keySet())
- + {
- + int[] loc = getPosition("All", 0);
- + player.teleToLocation(loc[0], loc[1], loc[2]);
- + }
- + }
- +
- + protected void transform(L2PcInstance player)
- + {
- + setStatus(player, 1);
- + polymorph(player,25375);
- + player.getAppearance().setNameColor(255, 0, 0);
- + player.broadcastUserInfo();
- + player.getInventory().unEquipItemInSlot(10);
- + player.getInventory().unEquipItemInSlot(16);
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (working copy)
- @@ -15,45 +15,78 @@
- package com.l2jfrozen.gameserver.network.serverpackets;
- /**
- - * @author Kerberos
- + * @author glory to Setekh for IL opcode ;p
- */
- public class ExShowScreenMessage extends L2GameServerPacket
- {
- - private int _type;
- - private int _sysMessageId;
- - private int _unk1;
- - private int _unk2;
- - private int _unk3;
- - private int _unk4;
- - private int _size;
- - private int _position;
- - private boolean _effect;
- - private String _text;
- - private int _time;
- -
- + public static enum SMPOS
- + {
- + DUMMY,
- + TOP_LEFT,
- + TOP_CENTER,
- + TOP_RIGHT,
- + MIDDLE_LEFT,
- + MIDDLE_CENTER,
- + MIDDLE_RIGHT,
- + BOTTOM_CENTER,
- + BOTTOM_RIGHT,
- + }
- +
- + private final int _type;
- + private final int _sysMessageId;
- + private final boolean _hide;
- + private final int _unk2;
- + private final int _unk3;
- + private final boolean _fade;
- + private final int _size;
- + private final int _position;
- + private final boolean _effect;
- + private final String _text;
- + private final int _time;
- +
- public ExShowScreenMessage(String text, int time)
- {
- _type = 1;
- _sysMessageId = -1;
- - _unk1 = 0;
- + _hide = false;
- _unk2 = 0;
- _unk3 = 0;
- - _unk4 = 0;
- + _fade = false;
- _position = 0x02;
- _text = text;
- _time = time;
- _size = 0;
- _effect = false;
- }
- -
- - public ExShowScreenMessage(int type, int messageId, int position, int unk1, int size, int unk2, int unk3, boolean showEffect, int time, int unk4, String text)
- +
- + public ExShowScreenMessage(String text, int time, SMPOS pos, boolean effect)
- + {
- + this(text, time, pos.ordinal(), effect);
- + }
- +
- + public ExShowScreenMessage(String text, int time, int pos, boolean effect)
- + {
- + _type = 1;
- + _sysMessageId = -1;
- + _hide = false;
- + _unk2 = 0;
- + _unk3 = 0;
- + _fade = false;
- + _position = pos;
- + _text = text;
- + _time = time;
- + _size = 0;
- + _effect = effect;
- + }
- +
- + public ExShowScreenMessage(int type, int messageId, int position, boolean hide, int size, int unk2, int unk3, boolean showEffect, int time, boolean fade, String text)
- {
- _type = type;
- _sysMessageId = messageId;
- - _unk1 = unk1;
- + _hide = hide;
- _unk2 = unk2;
- _unk3 = unk3;
- - _unk4 = unk4;
- + _fade = fade;
- _position = position;
- _text = text;
- _time = time;
- @@ -62,26 +95,26 @@
- }
- @Override
- - public String getType()
- - {
- - return "[S]FE:39 ExShowScreenMessage";
- - }
- -
- - @Override
- protected void writeImpl()
- {
- writeC(0xfe);
- - writeH(0x39);
- + writeH(0x38);
- writeD(_type); // 0 - system messages, 1 - your defined text
- writeD(_sysMessageId); // system message id (_type must be 0 otherwise no effect)
- writeD(_position); // message position
- - writeD(_unk1); // ?
- + writeD(_hide == true ? 1 : 0); // hide
- writeD(_size); // font size 0 - normal, 1 - small
- writeD(_unk2); // ?
- - writeD(_unk3); // ?
- + writeD(_unk3); // ?
- writeD(_effect == true ? 1 : 0); // upper effect (0 - disabled, 1 enabled) - _position must be 2 (center) otherwise no effect
- writeD(_time); // time
- - writeD(_unk4); // ?
- + writeD(_fade == true ? 1 : 0); // fade effect (0 - disabled, 1 enabled)
- writeS(_text); // your text (_type must be 1, otherwise no effect)
- }
- -}
- +
- + @Override
- + public String getType()
- + {
- + return "[S]FE:38 ExShowScreenMessage";
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/Shutdown.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/Shutdown.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/Shutdown.java (working copy)
- @@ -22,6 +22,8 @@
- import java.util.logging.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventBuffer;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.controllers.GameTimeController;
- import com.l2jfrozen.gameserver.controllers.TradeController;
- import com.l2jfrozen.gameserver.datatables.CharSchemesTable;
- @@ -678,6 +680,9 @@
- CharSchemesTable.getInstance().onServerShutdown();
- + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + EventBuffer.getInstance().updateSQL();
- +
- //Save items on ground before closing
- if(Config.SAVE_DROPPED_ITEM)
- {
- Index: head-src/com/l2jfrozen/gameserver/event/Russian.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Russian.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Russian.java (revision 0)
- @@ -0,0 +1,289 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.util.Map;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class Russian extends Event
- +{
- +
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToTeamPos();
- + forceSitAll();
- + spawnRussians();
- + setStatus(EventState.CHOOSE);
- + debug("The event started with " + players.size() + " players");
- + schedule(30000);
- + break;
- +
- + case CHOOSE:
- + if (round == 0)
- + forceStandAll();
- +
- + round++;
- + setStatus(EventState.CHECK);
- + debug("Choose phase.");
- + schedule(getInt("roundTime") * 1000);
- + break;
- +
- + case CHECK:
- + debug("Check phase");
- + removeAfkers();
- + killRandomRussian();
- +
- + if (countOfPositiveStatus() != 0)
- + {
- + if (russians.size() != 1)
- + {
- + for (L2PcInstance player : getPlayersWithStatus(1))
- + {
- + setStatus(player, 0);
- + increasePlayersScore(player);
- + player.getAppearance().setNameColor(255, 255, 255);
- + player.broadcastUserInfo();
- + }
- +
- + for (FastList<L2PcInstance> chose : choses.values())
- + chose.reset();
- +
- + setStatus(EventState.CHOOSE);
- + schedule(getInt("roundTime") * 1000);
- + }
- + else
- + {
- + for (L2PcInstance player : getPlayersWithStatus(1))
- + giveReward(player, getInt("rewardId"), getInt("rewardAmmount"));
- +
- + unspawnRussians();
- + debug("Event ended. " + countOfPositiveStatus() + " players survived");
- + EventManager.getInstance().end("Congratulation! " + countOfPositiveStatus() + " players survived the event!");
- + }
- +
- + }
- + else
- + {
- + unspawnRussians();
- + debug("Event ended. Noone survived");
- + EventManager.getInstance().end("Unfortunatly no-one survived the event!");
- + }
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- +
- + }
- + }
- +
- + private enum EventState
- + {
- + START, CHOOSE, CHECK, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private int round;
- +
- + private FastMap<Integer, L2Spawn> russians;
- +
- + private FastMap<Integer, FastList<L2PcInstance>> choses;
- +
- + public Russian()
- + {
- + super();
- + eventId = 11;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + round = 0;
- + russians = new FastMap<Integer, L2Spawn>();
- + choses = new FastMap<Integer, FastList<L2PcInstance>>();
- + }
- +
- + @Override
- + public boolean canAttack(L2PcInstance player, L2Object target)
- + {
- + return false;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + L2PcInstance winner = players.head().getNext().getKey();
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- +
- + unspawnRussians();
- + debug("Event ended. 1 player survived");
- + EventManager.getInstance().end("Congratulation! 1 player survived the event!");
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "";
- + }
- +
- + private void killRandomRussian()
- + {
- + FastList<Integer> ids = new FastList<Integer>();
- + for (int id : russians.keySet())
- + ids.add(id);
- + int russnum = ids.get(Rnd.get(ids.size()));
- + L2Spawn russian = russians.get(russnum);
- + unspawnNPC(russian);
- + announce(getPlayerList(), "The #" + russnum + " russian died.");
- +
- + for (L2PcInstance victim : choses.get(russnum))
- + {
- + setStatus(victim, -1);
- + victim.stopAllEffects();
- + victim.reduceCurrentHp(victim.getMaxHp() + victim.getMaxCp() + 1, victim);
- + victim.sendMessage("Your russian died!");
- + victim.getAppearance().setNameColor(255, 255, 255);
- + }
- + debug("Russian #" + russnum + " died");
- + russians.remove(russnum);
- + }
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + super.onLogout(player);
- +
- + for (FastList<L2PcInstance> list : choses.values())
- + if (list.contains(player))
- + list.remove(player);
- + }
- +
- + @Override
- + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
- + {
- + if (npc.getNpcId() != getInt("russianNpcId"))
- + return false;
- +
- + if (getStatus(player) != 0)
- + return true;
- +
- + for (Map.Entry<Integer, L2Spawn> russian : russians.entrySet())
- + if (russian.getValue().getLastSpawn().getObjectId() == npc.getObjectId())
- + {
- + choses.get(russian.getKey()).add(player);
- + player.getAppearance().setNameColor(0, 255, 0);
- + player.broadcastUserInfo();
- + setStatus(player, 1);
- + }
- +
- + return true;
- + }
- +
- + private void removeAfkers()
- + {
- + int c = 0;
- + for (L2PcInstance player : getPlayerList())
- + if (getStatus(player) == 0)
- + {
- +
- + player.sendMessage("Timeout!");
- + player.stopAllEffects();
- + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
- + setStatus(player, -1);
- + c++;
- + }
- + debug(c + " afkers removed");
- + }
- +
- + @Override
- + public void reset()
- + {
- + super.reset();
- + round = 0;
- + russians.clear();
- + choses.clear();
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>Russians left: " + russians.size() + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + private void spawnRussians()
- + {
- + for (int i = 1; i <= getInt("numberOfRussians"); i++)
- + {
- + int[] pos = getPosition("Russian", i);
- + russians.put(i, spawnNPC(pos[0], pos[1], pos[2], getInt("russianNpcId")));
- + choses.put(i, new FastList<L2PcInstance>());
- + russians.get(i).getLastSpawn().setTitle("--" + i + "--");
- + }
- + debug("Russians spawned");
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void unspawnRussians()
- + {
- + for (L2Spawn russian : russians.values())
- + unspawnNPC(russian);
- +
- + debug("Russians unspawned");
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (working copy)
- @@ -22,6 +22,7 @@
- import java.util.logging.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.ai.CtrlIntention;
- import com.l2jfrozen.gameserver.datatables.SkillTable;
- import com.l2jfrozen.gameserver.handler.IItemHandler;
- @@ -167,6 +168,10 @@
- return;
- }
- + if(EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(activeChar))
- + if(!EventManager.getInstance().getCurrentEvent().onUseItem(activeChar,item))
- + return;
- +
- if(activeChar.isFishing() && (itemId < 6535 || itemId > 6540))
- {
- // You cannot do anything else while fishing
- Index: head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (working copy)
- @@ -26,6 +26,8 @@
- import com.l2jfrozen.gameserver.handler.skillhandlers.BalanceLife;
- import com.l2jfrozen.gameserver.handler.skillhandlers.BeastFeed;
- import com.l2jfrozen.gameserver.handler.skillhandlers.Blow;
- +import com.l2jfrozen.gameserver.handler.skillhandlers.Bomb;
- +import com.l2jfrozen.gameserver.handler.skillhandlers.Capture;
- import com.l2jfrozen.gameserver.handler.skillhandlers.Charge;
- import com.l2jfrozen.gameserver.handler.skillhandlers.ClanGate;
- import com.l2jfrozen.gameserver.handler.skillhandlers.CombatPointHeal;
- @@ -120,6 +122,8 @@
- registerSkillHandler(new GetPlayer());
- registerSkillHandler(new ZakenPlayer());
- registerSkillHandler(new ZakenSelf());
- + registerSkillHandler(new Bomb());
- + registerSkillHandler(new Capture());
- _log.config("SkillHandler: Loaded " + _datatable.size() + " handlers.");
- }
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (working copy)
- @@ -21,6 +21,8 @@
- import java.util.logging.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.event.LMS;
- import com.l2jfrozen.gameserver.model.BlockList;
- import com.l2jfrozen.gameserver.model.L2Party;
- import com.l2jfrozen.gameserver.model.L2World;
- @@ -38,6 +40,7 @@
- private String _name;
- private int _itemDistribution;
- + private boolean _isInLMS;
- @Override
- protected void readImpl()
- @@ -51,10 +54,17 @@
- {
- L2PcInstance requestor = getClient().getActiveChar();
- L2PcInstance target = L2World.getInstance().getPlayer(_name);
- + _isInLMS = EventManager.getInstance().isRegistered(requestor) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
- if(requestor == null)
- return;
- + if(_isInLMS)
- + {
- + requestor.sendMessage("You cannot make party in LMS");
- + return;
- + }
- +
- if (!getClient().getFloodProtectors().getPartyInvitation().tryPerformAction("PartyInvitation"))
- {
- requestor.sendMessage("You Cannot Invite into Party So Fast!");
- Index: head-src/com/l2jfrozen/gameserver/event/LMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/LMS.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/LMS.java (revision 0)
- @@ -0,0 +1,141 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class LMS extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToTeamPos();
- + forceSitAll();
- + setStatus(EventState.FIGHT);
- + debug("The event started with " + players.size() + " players.");
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + debug("The event started.");
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + debug("The event ended.");
- + L2PcInstance winner = getPlayersWithStatus(0).get(Rnd.get(getPlayersWithStatus(0).size()));
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end(winner.getName() + " is the Last Man Standing!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + public LMS()
- + {
- + super();
- + eventId = 4;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "Players: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onKill(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onKill(victim, killer);
- + increasePlayersScore(killer);
- + setStatus(victim, 1);
- + if (getPlayersWithStatus(0).size() == 1)
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- + }
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + /* (non-Javadoc)
- + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
- + */
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/TvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/TvT.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/TvT.java (revision 0)
- @@ -0,0 +1,151 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class TvT extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, TELEPORT, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + public TvT()
- + {
- + super();
- + eventId = 7;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + winnerTeam = 0;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winnerTeam = players.head().getNext().getValue()[0];
- +
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + addToResurrector(victim);
- + }
- +
- + @Override
- + public void onKill(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onKill(victim, killer);
- + if (getPlayersTeam(killer) != getPlayersTeam(victim))
- + {
- + getPlayersTeam(killer).increaseScore();
- + killer.addItem("Event", 6392, 1, killer, true);
- + increasePlayersScore(killer);
- + }
- +
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (revision 0)
- @@ -0,0 +1,30 @@
- +package com.l2jfrozen.gameserver.handler.skillhandlers;
- +
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.handler.ISkillHandler;
- +import com.l2jfrozen.gameserver.model.L2Character;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.L2Skill;
- +import com.l2jfrozen.gameserver.model.L2Skill.SkillType;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +
- +public class Bomb implements ISkillHandler
- +{
- +private static final SkillType[] SKILL_IDS =
- +{ SkillType.BOMB };
- +
- +public void useSkill(L2Character activeChar, L2Skill skill,
- +L2Object[] targets)
- +{
- +
- +if (!(activeChar instanceof L2PcInstance))
- +return;
- +
- +EventManager.getInstance().getCurrentEvent().dropBomb((L2PcInstance)activeChar);
- +}
- +
- +public SkillType[] getSkillIds()
- +{
- +return SKILL_IDS;
- +}
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/Mutant.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Mutant.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Mutant.java (revision 0)
- @@ -0,0 +1,212 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class Mutant extends Event
- +{
- +
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToTeamPos();
- + forceSitAll();
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + transformMutant(getRandomPlayer());
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + untransformMutant();
- + L2PcInstance winner = getPlayerWithMaxScore();
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private L2PcInstance mutant;
- +
- + public Mutant()
- + {
- + super();
- + eventId = 13;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + }
- +
- + /**
- + * @see net.sf.l2j.gameserver.event.Event#endEvent()
- + */
- + @Override
- + protected void endEvent()
- + {
- + setStatus(EventState.END);
- + clock.setTime(0);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + addToResurrector(victim);
- + }
- +
- + @Override
- + public void onKill(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onKill(victim, killer);
- + if (getStatus(killer) == 1)
- + increasePlayersScore(killer);
- + if (getStatus(killer) == 0 && getStatus(victim) == 1)
- + transformMutant(killer);
- + killer.addItem("Event", 6392, 1, killer, true);
- + }
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + super.onLogout(player);
- +
- + if (mutant == player)
- + transformMutant(getRandomPlayer());
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + if (players.size() > 0)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void transformMutant(L2PcInstance player)
- + {
- + player.addSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
- + setStatus(player, 1);
- + untransformMutant();
- + polymorph(player,25286);
- + player.getAppearance().setNameColor(255, 0, 0);
- + player.broadcastUserInfo();
- + mutant = player;
- +
- + }
- +
- + private void untransformMutant()
- + {
- + if (mutant != null)
- + {
- + mutant.getAppearance().setNameColor(getColor("All")[0], getColor("All")[1], getColor("All")[2]);
- + mutant.removeSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
- + setStatus(mutant, 0);
- + unpolymorph(mutant);
- + mutant.broadcastUserInfo();
- + mutant = null;
- + }
- + }
- + @Override
- + public boolean canAttack(L2PcInstance player, L2Object target)
- + {
- + if (target instanceof L2PcInstance)
- + if (getStatus(player) == 0 && getStatus((L2PcInstance) target) == 0)
- + return false;
- + else
- + return true;
- +
- + return false;
- + }
- +
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/model/L2Skill.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/L2Skill.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/model/L2Skill.java (working copy)
- @@ -31,6 +31,7 @@
- import com.l2jfrozen.gameserver.datatables.HeroSkillTable;
- import com.l2jfrozen.gameserver.datatables.SkillTable;
- import com.l2jfrozen.gameserver.datatables.sql.SkillTreeTable;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.geo.GeoData;
- import com.l2jfrozen.gameserver.managers.SiegeManager;
- import com.l2jfrozen.gameserver.model.actor.instance.L2ArtefactInstance;
- @@ -263,6 +264,8 @@
- COREDONE,
- ZAKENPLAYER,
- ZAKENSELF,
- + BOMB,
- + CAPTURE,
- // unimplemented
- NOTDONE;
- @@ -1968,6 +1971,20 @@
- continue;
- }
- }
- +
- + if(obj instanceof L2PcInstance && activeChar instanceof L2PcInstance)
- + if(EventManager.getInstance().getCurrentEvent().numberOfTeams() > 1 &&
- + EventManager.getInstance().isRegistered((L2PcInstance)activeChar) &&
- + EventManager.getInstance().isRegistered((L2PcInstance)obj) &&
- + EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)obj) == EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)activeChar))
- + continue;
- +
- + if(obj instanceof L2Summon && activeChar instanceof L2PcInstance)
- + if(EventManager.getInstance().getCurrentEvent().numberOfTeams() > 1 &&
- + EventManager.getInstance().isRegistered((L2PcInstance)activeChar) &&
- + EventManager.getInstance().isRegistered(((L2Summon)obj).getOwner()) &&
- + EventManager.getInstance().getCurrentEvent().getTeam(((L2Summon)obj).getOwner()) == EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)activeChar))
- + continue;
- targetList.add((L2Character) obj);
- }
- Index: head-src/com/l2jfrozen/gameserver/event/Bomb.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Bomb.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Bomb.java (revision 0)
- @@ -0,0 +1,261 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.model.L2Object;
- +import com.l2jfrozen.gameserver.model.L2Skill;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillLaunched;
- +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillUser;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +public class Bomb extends Event
- +{
- + private class Bomber implements Runnable
- + {
- + public void run()
- + {
- + explode(bombs.head().getNext().getKey());
- + bombs.remove(bombs.head().getNext().getKey());
- + }
- + }
- +
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + unequip();
- + giveSkill();
- + debug("The event initialized with " + players.size() + " players");
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + debug("The fight started");
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + removeSkill();
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + debug("The event ended. Winner: " + winnerTeam);
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, TELEPORT, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private FastMap<L2Spawn, L2PcInstance> bombs;
- +
- + private Bomber bomber;
- +
- + public Bomb()
- + {
- + super();
- + eventId = 12;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + task = new Core();
- + bomber = new Bomber();
- + bombs = new FastMap<L2Spawn, L2PcInstance>();
- + winnerTeam = 0;
- + }
- +
- + @Override
- + public void dropBomb(L2PcInstance player)
- + {
- + bombs.put(spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("bombNpcId")), player);
- + bombs.tail().getPrevious().getKey().getLastSpawn().setTitle((getTeam(player) == 1 ? "Blue" : "Red"));
- + bombs.tail().getPrevious().getKey().getLastSpawn().broadcastStatusUpdate();
- +
- + for(L2PcInstance p : getPlayerList())
- + p.sendPacket(new NpcInfo(bombs.tail().getPrevious().getKey().getLastSpawn(), p));
- +
- + tpm.scheduleGeneral(bomber, 3000);
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winnerTeam = players.head().getNext().getValue()[0];
- +
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + private void explode(L2Spawn bomb)
- + {
- + FastList<L2Object> victims = new FastList<L2Object>();
- +
- + for (L2PcInstance player : getPlayerList())
- + {
- + if(player == null)
- + continue;
- +
- + if(player.isInvul())
- + continue;
- +
- + if (getTeam(bombs.get(bomb)) != getTeam(player) && Math.sqrt(player.getPlanDistanceSq(bomb.getLastSpawn())) <= getInt("bombRadius"))
- + {
- + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, bomb.getLastSpawn());
- + increasePlayersScore(bombs.get(bomb));
- + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
- + addToResurrector(player);
- +
- + victims.add(player);
- +
- + if (getTeam(player) == 1)
- + teams.get(2).increaseScore();
- + if (getTeam(player) == 2)
- + teams.get(1).increaseScore();
- + }
- + if (victims.size() != 0)
- + {
- + bomb.getLastSpawn().broadcastPacket(new MagicSkillUser(bomb.getLastSpawn(), (L2PcInstance) victims.head().getNext().getValue(), 18, 1, 0, 0));
- + bomb.getLastSpawn().broadcastPacket(new MagicSkillLaunched(bomb.getLastSpawn(), 18, 1, victims.toArray(new L2Object[victims.size()])));
- + victims.clear();
- + }
- + }
- + unspawnNPC(bomb);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + protected int getWinnerTeam()
- + {
- + if (teams.get(1).getScore() > teams.get(2).getScore())
- + return 1;
- + if (teams.get(2).getScore() > teams.get(1).getScore())
- + return 2;
- + if (teams.get(1).getScore() == teams.get(2).getScore())
- + if (Rnd.nextInt(1) == 1)
- + return 1;
- + else
- + return 2;
- +
- + return 1;
- + }
- +
- + private void giveSkill()
- + {
- + for (L2PcInstance player : getPlayerList())
- + player.addSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
- + }
- +
- +
- + @Override
- + public void onLogout(L2PcInstance player)
- + {
- + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
- + }
- +
- + @Override
- + public boolean onUseMagic(L2Skill skill)
- + {
- + if (skill.getId() == getInt("bombSkillId"))
- + return true;
- +
- + return false;
- +
- + }
- +
- + private void removeSkill()
- + {
- + for (L2PcInstance player : getPlayerList())
- + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
- + sb.append("<br><table width=270>");
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + return false;
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/FormalLMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (revision 0)
- @@ -0,0 +1,54 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +
- +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +
- +/**
- + *
- + *
- + * @author Rizel
- + */
- +public class FormalLMS
- +{
- + private L2ItemInstance formalWear;
- +
- + @SuppressWarnings("synthetic-access")
- + private static class SingletonHolder
- + {
- + protected static final FormalLMS _instance = new FormalLMS();
- + }
- +
- + public static FormalLMS getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + public FormalLMS()
- + {
- + formalWear = ItemTable.getInstance().createItem("", 6408, 1, null, null);
- + }
- +
- + public int getOID()
- + {
- + return formalWear.getObjectId();
- + }
- +}
- Index: head-src/com/l2jfrozen/gameserver/event/EventManager.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventManager.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/EventManager.java (revision 0)
- @@ -0,0 +1,727 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.io.FileWriter;
- +import java.io.IOException;
- +import java.text.SimpleDateFormat;
- +import java.util.Date;
- +import java.util.Map;
- +import java.util.Random;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
- +import com.l2jfrozen.gameserver.model.L2Character;
- +import com.l2jfrozen.gameserver.model.L2Party;
- +import com.l2jfrozen.gameserver.model.L2World;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.gameserver.util.Broadcast;
- +
- +public final class EventManager
- +{
- +
- + private class Countdown implements Runnable
- + {
- + protected String getTime()
- + {
- + String mins = "" + counter / 60;
- + String secs = (counter % 60 < 10 ? "0" + counter % 60 : "" + counter % 60);
- + return "" + mins + ":" + secs + "";
- + }
- +
- + @SuppressWarnings("synthetic-access")
- + public void run()
- + {
- + if (status == State.REGISTERING)
- +
- + switch (counter)
- + {
- + case 300:
- + case 240:
- + case 180:
- + case 120:
- + case 60:
- + announce("" + counter / 60 + " min(s) left to register, " + getCurrentEvent().getString("eventName"));
- + break;
- + case 30:
- + case 10:
- + announce("" + counter + " seconds left to register!");
- + break;
- + }
- +
- + if (status == State.VOTING)
- + if (counter == getInt("showVotePopupAt") && getBoolean("votePopupEnabled"))
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + TextBuilder sb = new TextBuilder();
- + int count = 0;
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- +
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Voting</td><td width=130><center>Time left: " + cdtask.getTime() + "</td><td width=70>Votes: " + votes.size() + "</td></tr></table><br>");
- +
- + for (Map.Entry<Integer, Event> event : events.entrySet())
- + {
- + count++;
- + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30>Info</td><td width=30>");
- + sb.append("<a action=\"bypass -h eventvote " + event.getKey() + "\">Vote</a>");
- + sb.append("</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td></tr></table>");
- + }
- +
- + sb.append("</body></html>");
- + html.setHtml(sb.toString());
- +
- + for (L2PcInstance player : L2World.getInstance().getAllPlayers())
- + {
- + if (votes.containsKey(player) || player.getLevel() < 40)
- + continue;
- +
- + player.sendPacket(html);
- + }
- + }
- +
- + if (counter == 0)
- + schedule(1);
- + else
- + {
- + counter--;
- + tpm.scheduleGeneral(cdtask, 1000);
- + }
- +
- + }
- + }
- +
- + private class Scheduler implements Runnable
- + {
- + @SuppressWarnings("synthetic-access")
- + public void run()
- + {
- + switch (status)
- + {
- + case VOTING:
- + if (votes.size() > 0)
- + setCurrentEvent(getVoteWinner());
- + else
- + setCurrentEvent(eventIds.get(rnd.nextInt(eventIds.size())));
- +
- + announce("The next event will be: " + getCurrentEvent().getString("eventName"));
- + announce("Registering phase started! You have " + getInt("registerTime") / 60 + " mins to register!");
- + announce("Event joinable in giran.");
- + setStatus(State.REGISTERING);
- + debug("Registering phase started.");
- + counter = getInt("registerTime") - 1;
- + tpm.scheduleGeneral(cdtask, 1);
- + break;
- +
- + case REGISTERING:
- + announce("Registering phase ended!");
- + debug("Registering phase ended.");
- + if (countOfRegistered() < getCurrentEvent().getInt("minPlayers"))
- + {
- + debug("Lack of participants.");
- + announce("Theres not enough participants! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
- + players.clear();
- + colors.clear();
- + positions.clear();
- + setStatus(State.VOTING);
- + counter = getInt("betweenEventsTime") - 1;
- + tpm.scheduleGeneral(cdtask, 1);
- + }
- + else
- + {
- + debug("Event starts.");
- + announce("Event started!");
- + setStatus(State.RUNNING);
- + msgToAll("You'll be teleported to the event in 10 secs");
- + schedule(10000);
- + }
- + break;
- +
- + case RUNNING:
- + getCurrentEvent().start();
- +
- + for (L2PcInstance player : players)
- + EventStats.getInstance().tempTable.put(player.getObjectId(), new int[] { 0, 0, 0, 0 });
- +
- + break;
- +
- + case TELE_BACK:
- + msgToAll("You'll be teleported back in 10 secs");
- + setStatus(State.END);
- + debug("Teleporting back.");
- + schedule(10000);
- + break;
- +
- + case END:
- + teleBackEveryone();
- + if (getBoolean("statTrackingEnabled"))
- + {
- + EventStats.getInstance().applyChanges();
- + EventStats.getInstance().tempTable.clear();
- + EventStats.getInstance().updateSQL(getCurrentEvent().getPlayerList(), getCurrentEvent().eventId);
- + }
- + getCurrentEvent().reset();
- + setCurrentEvent(0);
- + players.clear();
- + colors.clear();
- + positions.clear();
- + titles.clear();
- + announce("Event ended! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
- + setStatus(State.VOTING);
- + counter = getInt("betweenEventsTime") - 1;
- + debug("Event ended.");
- + tpm.scheduleGeneral(cdtask, 1);
- + break;
- +
- + }
- + }
- + }
- +
- + @SuppressWarnings("synthetic-access")
- + private static class SingletonHolder
- + {
- + protected static final EventManager _instance = new EventManager();
- + }
- +
- + // Manager Statuses
- + protected enum State
- + {
- + REGISTERING, VOTING, RUNNING, TELE_BACK, END
- + }
- +
- + public static EventManager getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + private EventConfig config;
- + // Event instances
- + public FastMap<Integer, Event> events;
- +
- + // The list of registered players
- + public FastList<L2PcInstance> players;
- +
- + // The current event
- + private Event current;
- +
- + // Original name colors
- + private FastMap<L2PcInstance, Integer> colors;
- +
- + //Original titles
- + protected FastMap<L2PcInstance, String> titles;
- +
- + //Original positions
- + protected FastMap<L2PcInstance, int[]> positions;
- +
- + // Votes for the events
- + private FastMap<L2PcInstance, Integer> votes;
- +
- + private State status;
- +
- + private int counter;
- +
- + private Countdown cdtask;
- +
- + // NPC location
- + public static int[] npcPos = { 82698, 148638, -3473 };
- +
- + // Threadpoolmanager
- + private ThreadPoolManager tpm;
- +
- + // Scheduler
- + private Scheduler task;
- +
- + private Random rnd = new Random();
- +
- + private FileWriter writer;
- +
- + private FastList<Integer> eventIds;
- +
- + private static final SimpleDateFormat _formatter = new SimpleDateFormat("dd/MM/yyyy H:mm:ss");
- +
- + public EventManager()
- + {
- + config = EventConfig.getInstance();
- +
- + events = new FastMap<Integer, Event>();
- + players = new FastList<L2PcInstance>();
- + votes = new FastMap<L2PcInstance, Integer>();
- + titles = new FastMap<L2PcInstance, String>();
- + colors = new FastMap<L2PcInstance, Integer>();
- + positions = new FastMap<L2PcInstance, int[]>();
- + eventIds = new FastList<Integer>();
- + status = State.VOTING;
- + tpm = ThreadPoolManager.getInstance();
- + task = new Scheduler();
- + cdtask = new Countdown();
- + counter = 0;
- +
- + // Add the events to the list
- + events.put(1, new dm());
- + events.put(2, new Domination());
- + events.put(3, new DoubleDomination());
- + events.put(4, new LMS());
- + events.put(5, new Lucky());
- + events.put(6, new Simon());
- + events.put(7, new TvT());
- + events.put(8, new VIPTvT());
- + events.put(9, new Zombie());
- + events.put(10, new CTF());
- + events.put(11, new Russian());
- + events.put(12, new Bomb());
- + events.put(13, new Mutant());
- + events.put(14, new Battlefield());
- +
- + for(int eventId : events.keySet())
- + eventIds.add(eventId);
- +
- + debug(events.size() + " event imported.");
- +
- + // Start the scheduler
- + counter = getInt("firstAfterStartTime") - 1;
- + tpm.scheduleGeneral(cdtask, 1);
- +
- + System.out.println("Event Engine Started");
- + }
- +
- + public boolean addVote(L2PcInstance player, int eventId)
- + {
- + if (getStatus() != State.VOTING)
- + {
- + player.sendMessage("You cant vote now!");
- + return false;
- + }
- + if (votes.containsKey(player))
- + {
- + player.sendMessage("You already voted for an event!");
- + return false;
- + }
- + if (player.getLevel() < 40)
- + {
- + player.sendMessage("Your level is too low to vote for events!");
- + return false;
- + }
- + else
- + {
- + player.sendMessage("You succesfully voted for the event");
- + votes.put(player, eventId);
- + return true;
- + }
- + }
- +
- + private void announce(String text)
- + {
- + Broadcast.toAllOnlinePlayers(new CreatureSay(0, 18, "", "[Event] " + text));
- + }
- +
- + private boolean canRegister(L2PcInstance player)
- + {
- + if (players.contains(player))
- + {
- + player.sendMessage("You already registered to the event!");
- + return false;
- + }
- +
- + if (player.isInJail())
- + {
- + player.sendMessage("You cant register from the jail.");
- + return false;
- + }
- +
- + if (player.isInOlympiadMode())
- + {
- + player.sendMessage("You cant register while youre in the olympiad.");
- + return false;
- + }
- +
- + if (player.getLevel() > getCurrentEvent().getInt("maxLvl"))
- + {
- + player.sendMessage("Youre greater than the max allowed lvl.");
- + return false;
- + }
- +
- + if (player.getLevel() < getCurrentEvent().getInt("minLvl"))
- + {
- + player.sendMessage("Youre lower than the min allowed lvl.");
- + return false;
- + }
- +
- + if (player.getKarma() > 0)
- + {
- + player.sendMessage("You cant register if you have karma.");
- + return false;
- + }
- +
- + if (player.isCursedWeaponEquiped())
- + {
- + player.sendMessage("You cant register with a cursed weapon.");
- + return false;
- + }
- +
- + if (player.isDead())
- + {
- + player.sendMessage("You cant register while youre dead.");
- + return false;
- + }
- +
- + return true;
- + } /*
- + * If theres a running event and
- + */
- +
- + public boolean canTargetPlayer(L2PcInstance target, L2PcInstance self)
- + {
- + if (getStatus() == State.RUNNING)
- + {
- + if ((isRegistered(target) && isRegistered(self)) || (!isRegistered(target) && !isRegistered(self)))
- + return true;
- + else
- + return false;
- + }
- + else
- + return true;
- + }
- +
- + protected int countOfRegistered()
- + {
- + return players.size();
- + }
- +
- + protected void debug(String message)
- + {
- + if (!getBoolean("debug"))
- + return;
- +
- + String today = _formatter.format(new Date());
- +
- + try
- + {
- + writer = new FileWriter("log/EventEngine.log", true);
- + writer.write(today + " - " + message + "\r\n");
- + }
- + catch (IOException e)
- + {
- +
- + }
- + finally
- + {
- + try
- + {
- + writer.close();
- + }
- + catch (Exception e)
- + {
- + }
- + }
- + }
- +
- + protected void end(String text)
- + {
- + announce(text);
- + status = State.TELE_BACK;
- + schedule(1);
- + }
- +
- + public boolean getBoolean(String propName)
- + {
- + return config.getBoolean(0, propName);
- + }
- +
- + public Event getCurrentEvent()
- + {
- + return current;
- + }
- +
- + public FastList<String> getEventNames()
- + {
- + FastList<String> map = new FastList<String>();
- + for (Event event : events.values())
- + map.add(event.getString("eventName"));
- + return map;
- + }
- +
- + public int getInt(String propName)
- + {
- + return config.getInt(0, propName);
- + }
- +
- + protected int[] getPosition(String owner, int num)
- + {
- + return config.getPosition(0, owner, num);
- + }
- +
- + public FastList<Integer> getRestriction(String type)
- + {
- + return config.getRestriction(0, type);
- + }
- +
- + private State getStatus()
- + {
- + return status;
- + }
- +
- + protected String getString(String propName)
- + {
- + return config.getString(0, propName);
- + }
- +
- + private int getVoteCount(int event)
- + {
- + int count = 0;
- + for (int e : votes.values())
- + if (e == event)
- + count++;
- +
- + return count;
- + }
- +
- + private int getVoteWinner()
- + {
- + int old = 0;
- + FastMap<Integer, Integer> temp = new FastMap<Integer, Integer>();
- +
- + for (int vote : votes.values())
- + if (!temp.containsKey(vote))
- + temp.put(vote, 1);
- + else
- + {
- + old = temp.get(vote);
- + old++;
- + temp.getEntry(vote).setValue(old);
- + }
- +
- + int max = temp.head().getNext().getValue();
- + int result = temp.head().getNext().getKey();
- +
- + for (Map.Entry<Integer, Integer> entry : temp.entrySet())
- + if (entry.getValue() > max)
- + {
- + max = entry.getValue();
- + result = entry.getKey();
- + }
- +
- + votes.clear();
- + temp = null;
- + return result;
- +
- + }
- +
- + public boolean isRegistered(L2PcInstance player)
- + {
- + if (getCurrentEvent() != null)
- + return getCurrentEvent().players.containsKey(player);
- + else
- + return false;
- + }
- +
- + public boolean isRegistered(L2Character player)
- + {
- + if (getCurrentEvent() != null)
- + return getCurrentEvent().players.containsKey(player);
- + else
- + return false;
- + }
- +
- + public boolean isRunning()
- + {
- + if (getStatus() == State.RUNNING)
- + return true;
- + else
- + return false;
- + }
- +
- + private void msgToAll(String text)
- + {
- + for (L2PcInstance player : players)
- + player.sendMessage(text);
- + }
- +
- + public void onLogout(L2PcInstance player)
- + {
- + if (votes.containsKey(player))
- + votes.remove(player);
- + if (players.contains(player))
- + {
- + players.remove(player);
- + colors.remove(player);
- + titles.remove(player);
- + positions.remove(player);
- + }
- + }
- +
- + public boolean registerPlayer(L2PcInstance player)
- + {
- + if (getStatus() != State.REGISTERING)
- + {
- + player.sendMessage("You can't register now!");
- + return false;
- + }
- +
- + if(getBoolean("eventBufferEnabled"))
- + if (!EventBuffer.getInstance().playerHaveTemplate(player))
- + {
- + player.sendMessage("You have to set a buff template first!");
- + EventBuffer.getInstance().showHtml(player);
- + return false;
- + }
- +
- + if (canRegister(player))
- + {
- + player.sendMessage("You succesfully registered to the event!");
- + players.add(player);
- + titles.put(player, player.getTitle());
- + colors.put(player, player.getAppearance().getNameColor());
- + positions.put(player, new int[] { player.getX(), player.getY(), player.getZ() });
- + return true;
- + }
- + else
- + {
- + player.sendMessage("You failed on registering to the event!");
- + return false;
- + }
- + }
- +
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setCurrentEvent(int eventId)
- + {
- + if (eventId == 0)
- + current = null;
- + else
- + current = events.get(eventId);
- +
- + debug("Changed current event to: " + (current == null ? "null" : current.getString("eventName")));
- + }
- +
- + protected void setStatus(State s)
- + {
- + status = s;
- + }
- +
- + public void showFirstHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- + int count = 0;
- +
- + sb.append("<html><body><table width=270><tr><td width=130>Event Engine </td><td width=70>"+(getBoolean("eventBufferEnabled") ? "<a action=\"bypass -h eventbuffershow\">Buffer</a>" : "")+"</td><td width=70><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- +
- + if (getStatus() == State.VOTING)
- + {
- +
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Events</td><td width=130><center>Time left: " + cdtask.getTime() + "</td>"+/*<td width=70>Votes: " + votes.size() + "</td>*/"</tr></table><br>");
- +
- + for (Map.Entry<Integer, Event> event : events.entrySet())
- + {
- + count++;
- + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30><a action=\"bypass -h eventinfo "+event.getKey()+"\">Info</a></td>"/*<td width=30>*/);
- +
- + /*if (!votes.containsKey(player))
- + sb.append("<a action=\"bypass -h npc_" + obj + "_" + event.getKey() + "\">Vote</a>");
- + else
- + sb.append("Vote");*/
- +
- + sb.append(/*</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td>*/"</tr></table>");
- + }
- + sb.append("</body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- +
- + if (getStatus() == State.REGISTERING)
- + {
- +
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>");
- + if (players.contains(player))
- + sb.append("<a action=\"bypass -h npc_" + obj + "_unreg\">Unregister</a>");
- + else
- + sb.append("<a action=\"bypass -h npc_" + obj + "_reg\">Register</a>");
- +
- + sb.append("</td><td width=130><center><a action=\"bypass -h eventinfo "+getCurrentEvent().getInt("ids")+"\">" + getCurrentEvent().getString("eventName") + "</a></td><td width=70>Time: " + cdtask.getTime() + "</td></tr></table><br>");
- +
- + for (L2PcInstance p : EventManager.getInstance().players)
- + {
- + count++;
- + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=120>" + p.getName() + "</td><td width=40>lvl " + p.getLevel() + "</td><td width=110>" + p.getTemplate().className + "</td></tr></table>");
- + }
- +
- + sb.append("</body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- + if (getStatus() == State.RUNNING)
- + getCurrentEvent().showHtml(player, obj);
- +
- + }
- +
- + private void teleBackEveryone()
- + {
- + for (L2PcInstance player : getCurrentEvent().getPlayerList())
- + {
- + if(player.getPoly().isMorphed())
- + {
- + player.getPoly().setPolyInfo(null, "1");
- + player.decayMe();
- + player.spawnMe(player.getX(),player.getY(),player.getZ());
- + }
- + player.teleToLocation(positions.get(player)[0], positions.get(player)[1], positions.get(player)[2]);
- + player.getAppearance().setNameColor(colors.get(player));
- + player.setTitle(titles.get(player));
- + if (player.getParty() != null)
- + {
- + L2Party party = player.getParty();
- + party.removePartyMember(player);
- + }
- +
- + player.broadcastUserInfo();
- + if (player.isDead())
- + player.doRevive();
- + }
- +
- + }
- +
- + public boolean unregisterPlayer(L2PcInstance player)
- + {
- + if (!players.contains(player))
- + {
- + player.sendMessage("You're not registered to the event!");
- + return false;
- + }
- + if (getStatus() != State.REGISTERING)
- + {
- + player.sendMessage("You can't unregister now!");
- + return false;
- + }
- + else
- + {
- + player.sendMessage("You succesfully unregistered from the event!");
- + players.remove(player);
- + colors.remove(player);
- + positions.remove(player);
- + return true;
- + }
- + }
- +
- + public boolean areTeammates(L2PcInstance player, L2PcInstance target)
- + {
- + if(getCurrentEvent() == null)
- + return false;
- +
- + if(getCurrentEvent().numberOfTeams() == 1)
- + return false;
- +
- + if(getCurrentEvent().numberOfTeams() > 1)
- + if(getCurrentEvent().getTeam(player) == getCurrentEvent().getTeam(target))
- + return true;
- + else
- + return false;
- +
- + return false;
- + }
- +}
- \ No newline at end of file
- Index: config/Events.xml
- ===================================================================
- --- config/Events.xml (revision 0)
- +++ config/Events.xml (revision 0)
- @@ -0,0 +1,350 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<events>
- + <!-- Core settings -->
- + <event id="0">
- + <property name="registerTime" value="300" />
- + <property name="betweenEventsTime" value="10800" />
- + <property name="firstAfterStartTime" value="1800" />
- + <property name="managerNpcId" value="50001" />
- + <property name="showVotePopupAt" value="600" />
- + <property name="votePopupEnabled" value="false" />
- + <property name="debug" value="false" />
- + <property name="statTrackingEnabled" value="true" />
- + <property name="eventBufferEnabled" value="false" />
- + <property name="allowedBuffsList" value="1068,1085,1086,1087" />
- + <property name="maxBuffNum" value="2" />
- + <property name="friendlyFireEnabled" value="false" />
- + <property name="restartAllowed" value="false" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="1374,1375,1376,395,396" />
- + </event>
- +
- + <!-- DeathMatch -->
- + <event id="1">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Deathmatch" />
- + <property name="ids" value="1" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="20" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Domination -->
- + <event id="2">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Domination" />
- + <property name="ids" value="2" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <property name="zoneRadius" value="170" />
- + <property name="zoneNpcId" value="9103" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <position owner="Zone" x="106108" y="114969" z="-1587" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Double Domination -->
- + <event id="3">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Double Domination" />
- + <property name="ids" value="3" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <property name="zoneRadius" value="170" />
- + <property name="zoneNpcId" value="9103" />
- + <property name="timeToScore" value="10" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <position owner="Zone" x="106995" y="114556" z="-1587" radius="0" />
- + <position owner="Zone" x="104823" y="115175" z="-1587" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Last Man Standing -->
- + <event id="4">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Last Man Standing" />
- + <property name="ids" value="4" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="25" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Lucky Chests -->
- + <event id="5">
- + <property name="minLvl" value="40" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Lucky Chests" />
- + <property name="ids" value="5" />
- + <property name="matchTime" value="180" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="20" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="false" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <property name="chestNpcId" value="9102" />
- + <property name="numberOfChests" value="300" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
- + <position owner="Chests" x="106037" y="114816" z="-1560" radius="700" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Simon Says -->
- + <event id="6">
- + <property name="minLvl" value="40" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Simon Says" />
- + <property name="ids" value="6" />
- + <property name="roundTime" value="10" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="25" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="false" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <property name="simonNpcId" value="9101" />
- + <property name="lengthOfFirstWord" value="3" />
- + <property name="increasePerRound" value="1" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
- + <position owner="Simon" x="106037" y="114816" z="-1560" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Team vs Team -->
- + <event id="7">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Team vs Team" />
- + <property name="ids" value="7" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- VIP Team vs Team -->
- + <event id="8">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="VIP Team vs Team" />
- + <property name="ids" value="8" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <color owner="BlueVIP" r="0" g="255" b="255"/>
- + <color owner="RedVIP" r="255" g="155" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Zombie -->
- + <event id="9">
- + <property name="minLvl" value="40" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Zombie" />
- + <property name="ids" value="9" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="25" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="false" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <color owner="Zombie" r="255" g="0" b="0"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
- + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
- + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
- + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Capture the Flag -->
- + <event id="10">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Capture the Flag" />
- + <property name="ids" value="10" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <property name="blueFlagId" value="9104" />
- + <property name="redFlagId" value="9105" />
- + <property name="blueFlagHolderId" value="9106" />
- + <property name="redFlagHolderId" value="9107" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="BlueFlag" x="106391" y="116331" z="-1587" radius="0" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <position owner="RedFlag" x="105696" y="113522" z="-1587" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- +
- + <!-- Russian Roulette -->
- + <event id="11">
- + <property name="minLvl" value="40" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Russian Roulette" />
- + <property name="ids" value="11" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="15" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="false" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <property name="russianNpcId" value="9108" />
- + <property name="numberOfRussians" value="6" />
- + <property name="roundTime" value="10" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
- + <position owner="Russian" x="106109" y="114947" z="-1587" radius="0" />
- + <position owner="Russian" x="106176" y="114792" z="-1587" radius="0" />
- + <position owner="Russian" x="106138" y="114658" z="-1587" radius="0" />
- + <position owner="Russian" x="106010" y="114607" z="-1587" radius="0" />
- + <position owner="Russian" x="105859" y="114672" z="-1587" radius="0" />
- + <position owner="Russian" x="105875" y="114837" z="-1587" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Bomb Fight -->
- + <event id="12">
- + <property name="minLvl" value="40" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Bomb Fight" />
- + <property name="ids" value="12" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <property name="bombNpcId" value="9109" />
- + <property name="bombRadius" value="100" />
- + <property name="bombSkillId" value="5220" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="11619" y="-49691" z="-3008" radius="50" />
- + <position owner="Red" x="12720" y="-48594" z="-3035" radius="50" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Mutant -->
- + <event id="13">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Mutant" />
- + <property name="ids" value="13" />
- + <property name="matchTime" value="240" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="25" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="true" />
- + <property name="minPlayers" value="8" />
- + <property name="mutantBuffId" value="9007" />
- + <color owner="All" r="255" g="255" b="255"/>
- + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +
- + <!-- Battlefield -->
- + <event id="14">
- + <property name="minLvl" value="70" />
- + <property name="maxLvl" value="80" />
- + <property name="eventName" value="Battlefield" />
- + <property name="ids" value="14" />
- + <property name="matchTime" value="300" />
- + <property name="rewardId" value="6392" />
- + <property name="rewardAmmount" value="10" />
- + <property name="allowPotions" value="false" />
- + <property name="allowUseMagic" value="true" />
- + <property name="removeBuffs" value="false" />
- + <property name="minPlayers" value="8" />
- + <property name="numOfBases" value="5" />
- + <property name="baseNpcId" value="9110" />
- + <property name="captureSkillId" value="5219" />
- + <color owner="Blue" r="0" g="0" b="255"/>
- + <color owner="Red" r="255" g="0" b="0"/>
- + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
- + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
- + <position owner="Base" x="106037" y="114816" z="-1587" radius="0" />
- + <position owner="Base" x="106995" y="114556" z="-1587" radius="0" />
- + <position owner="Base" x="104823" y="115175" z="-1587" radius="0" />
- + <position owner="Base" x="105752" y="116245" z="-1587" radius="0" />
- + <position owner="Base" x="106907" y="113671" z="-1587" radius="0" />
- + <restriction type="item" ids="" />
- + <restriction type="skill" ids="" />
- + </event>
- +</events>
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/Lucky.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Lucky.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Lucky.java (revision 0)
- @@ -0,0 +1,215 @@
- +/*
- + * 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.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastList;
- +
- +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.model.L2Skill;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class Lucky extends Event
- +{
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToTeamPos();
- + forceSitAll();
- + unequip();
- + setStatus(EventState.FIGHT);
- + schedule(30000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + int[] coor = getPosition("Chests", 1);
- + for (int i = 0; i < getInt("numberOfChests"); i++)
- + chests.add(spawnNPC(coor[0] + (Rnd.get(coor[3] * 2) - coor[3]), coor[1] + (Rnd.get(coor[3] * 2) - coor[3]), coor[2], getInt("chestNpcId")));
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + unSpawnChests();
- + L2PcInstance winner = getPlayerWithMaxScore();
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " opened chests!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private FastList<L2Spawn> chests;
- +
- + public Lucky()
- + {
- + super();
- + eventId = 5;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + chests = new FastList<L2Spawn>();
- + }
- +
- + /**
- + * @see net.sf.l2j.gameserver.event.Event#endEvent()
- + */
- + @Override
- + protected void endEvent()
- + {
- +
- + setStatus(EventState.END);
- + clock.setTime(0);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
- + }
- +
- + @Override
- + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
- + {
- + if (npc.getNpcId() != getInt("chestNpcId"))
- + return false;
- +
- + if (Rnd.get(3) == 0)
- + {
- + player.sendPacket(new CreatureSay(npc.getObjectId(), 0, "Chest", "BoOoOoMm!"));
- + player.stopAllEffects();
- + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
- + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
- + addToResurrector(player);
- + }
- + else
- + {
- + npc.doDie(npc);
- + player.addItem("Event", 6392, 1, player, true);
- + increasePlayersScore(player);
- + }
- +
- + npc.deleteMe();
- + npc.getSpawn().stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), true);
- + chests.remove(npc.getSpawn());
- +
- + if (chests.size() == 0)
- + clock.setTime(0);
- +
- + return true;
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- + public boolean onUseMagic(L2Skill skill)
- + {
- + return false;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + if (players.size() > 0)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + }
- +
- + /* (non-Javadoc)
- + * @see net.sf.l2j.gameserver.event.Event#start()
- + */
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void unSpawnChests()
- + {
- + for (L2Spawn s : chests)
- + {
- + s.getLastSpawn().deleteMe();
- + s.stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(s, true);
- + chests.remove(s);
- + }
- + }
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + return false;
- + }
- +
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/Simon.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Simon.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Simon.java (revision 0)
- @@ -0,0 +1,308 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +/**
- + * @author Rizel
- + *
- + */
- +public class Simon extends Event
- +{
- +
- + private class Core implements Runnable
- + {
- + public void run()
- + {
- + try
- + {
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(1);
- + preparePlayers();
- + teleportToTeamPos();
- + forceSitAll();
- + unequip();
- + setStatus(EventState.SAY);
- + schedule(30000);
- + break;
- +
- + case SAY:
- + round++;
- + say = createNewRandomString(getInt("lengthOfFirstWord") + getInt("increasePerRound") * round);
- + sendToPlayers(say.toUpperCase());
- + setStatus(EventState.CHECK);
- + schedule(getInt("roundTime") * 1000);
- + break;
- +
- + case CHECK:
- + if (removeAfkers())
- + {
- + setAllToFalse();
- + setStatus(EventState.SAY);
- + schedule(getInt("roundTime") * 1000);
- + }
- + break;
- +
- + case END:
- + setStatus(EventState.INACTIVE);
- + forceStandAll();
- +
- + if (winner != null)
- + {
- + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
- + }
- + else
- + EventManager.getInstance().end("The match ended in a tie!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- + }
- +
- + private enum EventState
- + {
- + START, SAY, CHECK, END, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private int round;
- +
- + private String say;
- +
- + private L2NpcInstance npc;
- +
- + private L2Spawn spawn;
- +
- + private CreatureSay message;
- +
- + private L2PcInstance winner;
- +
- + public Simon()
- + {
- + super();
- + eventId = 6;
- + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- + task = new Core();
- + round = 0;
- + spawn = null;
- + npc = null;
- + winner = null;
- + }
- +
- + private String createNewRandomString(int size)
- + {
- + String str = "";
- +
- + for (int i = 0; i < size; i++)
- + str = str + (char) (Rnd.nextInt(26) + 97);
- +
- + return str;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winner = players.head().getNext().getKey();
- + setStatus(EventState.END);
- + schedule(1);
- +
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "";
- + }
- +
- + @Override
- + public void onSay(int type, L2PcInstance player, String text)
- + {
- + if (eventState == EventState.CHECK && getStatus(player) != -1)
- + {
- + if (text.equalsIgnoreCase(say))
- + {
- + setStatus(player, 1);
- + player.sendMessage("Correct!");
- + increasePlayersScore(player);
- + player.getAppearance().setNameColor(0, 255, 0);
- + player.broadcastUserInfo();
- + }
- +
- + else
- + {
- + setStatus(player, -1);
- + player.sendMessage("Wrong!");
- + player.getAppearance().setNameColor(255, 0, 0);
- + player.broadcastUserInfo();
- + }
- +
- + int falses = 0;
- + L2PcInstance falsed = null;
- + for (L2PcInstance p : getPlayerList())
- + if (getStatus(p) == 0)
- + {
- + falses++;
- + falsed = p;
- + }
- +
- + if (falses == 1)
- + {
- + int count = 0;
- + for (L2PcInstance pla : getPlayerList())
- + if (getStatus(pla) == 1)
- + count++;
- +
- + if (count >= 1)
- + {
- + falsed.sendMessage("Last one!");
- + falsed.getAppearance().setNameColor(255, 0, 0);
- + falsed.broadcastUserInfo();
- + setStatus(falsed, -1);
- + }
- +
- + if (count == 0)
- + {
- + winner = getPlayersWithStatus(0).head().getNext().getValue();
- + setStatus(EventState.END);
- + schedule(1);
- + }
- +
- + }
- +
- + if (countOfPositiveStatus() == 1)
- + {
- + winner = getPlayersWithStatus(1).head().getNext().getValue();
- + setStatus(EventState.END);
- + schedule(1);
- + }
- +
- + }
- +
- + }
- +
- + private boolean removeAfkers()
- + {
- +
- + for (L2PcInstance player : getPlayerList())
- + {
- + if (getStatus(player) == 0)
- + {
- +
- + player.sendMessage("Timeout!");
- + player.getAppearance().setNameColor(255, 0, 0);
- + player.broadcastUserInfo();
- + setStatus(player, -1);
- + }
- +
- + if (countOfPositiveStatus() == 1)
- + {
- + if (getPlayersWithStatus(1).size() == 1)
- + winner = getPlayersWithStatus(1).head().getNext().getValue();
- + else
- + winner = null;
- +
- + setStatus(EventState.END);
- + schedule(1);
- + return false;
- + }
- + }
- + return true;
- + }
- +
- + @Override
- + public void reset()
- + {
- + super.reset();
- + round = 0;
- + players.clear();
- + say = "";
- + npc.deleteMe();
- + spawn.stopRespawn();
- + SpawnTable.getInstance().deleteSpawn(spawn, true);
- + npc = null;
- + spawn = null;
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void sendToPlayers(String text)
- + {
- + message = new CreatureSay(npc.getObjectId(), 1, "Simon", text);
- + for (L2PcInstance player : getPlayerList())
- + player.sendPacket(message);
- + }
- +
- + private void setAllToFalse()
- + {
- + for (L2PcInstance player : getPlayerList())
- + if (getStatus(player) != -1)
- + {
- + setStatus(player, 0);
- + player.getAppearance().setNameColor(255, 255, 255);
- + player.broadcastUserInfo();
- + }
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- +
- + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: ?</td></tr></table>");
- + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
- + sb.append("<br><table width=270>");
- +
- + for (L2PcInstance p : getPlayersOfTeam(1))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- +
- + sb.append("</table></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- + }
- +
- + @Override
- + protected void start()
- + {
- + int[] npcpos = getPosition("Simon", 1);
- + spawn = spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("simonNpcId"));
- + npc = spawn.getLastSpawn();
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + @Override
- + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
- + {
- + return false;
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (revision 936)
- +++ head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (working copy)
- @@ -47,6 +47,7 @@
- import com.l2jfrozen.Config;
- import com.l2jfrozen.crypt.nProtect;
- import com.l2jfrozen.crypt.nProtect.RestrictionType;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.managers.OlympiadStadiaManager;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jfrozen.gameserver.model.entity.Announcements;
- @@ -485,6 +486,12 @@
- return false;
- }
- + if(EventManager.getInstance().players.contains(noble))
- + {
- + noble.sendMessage("You can't join olympiad while participating on an Event.");
- + return false;
- + }
- +
- if(!noble.isNoble())
- {
- sm = new SystemMessage(SystemMessageId.ONLY_NOBLESS_CAN_PARTICIPATE_IN_THE_OLYMPIAD);
- @@ -1114,6 +1121,12 @@
- spectator.sendPacket(new SystemMessage(SystemMessageId.THE_OLYMPIAD_GAME_IS_NOT_CURRENTLY_IN_PROGRESS));
- return;
- }
- +
- + if(EventManager.getInstance().players.contains(spectator))
- + {
- + spectator.sendMessage("You can not observe games while registered for an event!");
- + return;
- + }
- L2PcInstance[] players = _manager.getOlympiadInstance(id).getPlayers();
- Index: head-src/com/l2jfrozen/gameserver/event/Battlefield.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Battlefield.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/Battlefield.java (revision 0)
- @@ -0,0 +1,238 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import java.util.Map;
- +
- +import javolution.text.TextBuilder;
- +import javolution.util.FastMap;
- +
- +import com.l2jfrozen.gameserver.datatables.SkillTable;
- +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jfrozen.util.random.Rnd;
- +
- +public class Battlefield extends Event
- +{
- + private class Core implements Runnable
- + {
- +
- + public void run()
- + {
- + try{
- + switch (eventState)
- + {
- + case START:
- + divideIntoTeams(2);
- + preparePlayers();
- + teleportToTeamPos();
- + createPartyOfTeam(1);
- + createPartyOfTeam(2);
- + forceSitAll();
- + giveSkill();
- + spawnBases();
- + setStatus(EventState.FIGHT);
- + schedule(20000);
- + break;
- +
- + case FIGHT:
- + forceStandAll();
- + setStatus(EventState.END);
- + clock.startClock(getInt("matchTime"));
- + break;
- +
- + case END:
- + clock.setTime(0);
- + if (winnerTeam == 0)
- + winnerTeam = getWinnerTeam();
- +
- + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
- + unspawnBases();
- + removeSkill();
- + setStatus(EventState.INACTIVE);
- + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " points!");
- + break;
- + }
- + }
- + catch (Throwable e)
- + {
- + e.printStackTrace();
- + EventManager.getInstance().end("Error! Event ended.");
- + }
- + }
- +
- + }
- +
- + private enum EventState
- + {
- + START, FIGHT, END, TELEPORT, INACTIVE
- + }
- +
- + private EventState eventState;
- +
- + private Core task;
- +
- + private int winnerTeam;
- +
- + private FastMap<Integer,L2Spawn> bases;
- +
- + private FastMap<Integer,Integer> owners;
- +
- + public Battlefield()
- + {
- + super();
- + eventId = 14;
- + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
- + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
- + bases = new FastMap<Integer,L2Spawn>();
- + owners = new FastMap<Integer,Integer>();
- + task = new Core();
- + winnerTeam = 0;
- + }
- +
- + @Override
- + protected void endEvent()
- + {
- + winnerTeam = players.head().getNext().getValue()[0];
- +
- + setStatus(EventState.END);
- + schedule(1);
- + }
- +
- + @Override
- + protected String getScorebar()
- + {
- + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
- + }
- +
- + @Override
- + protected int getWinnerTeam()
- + {
- + if (teams.get(1).getScore() > teams.get(2).getScore())
- + return 1;
- + if (teams.get(2).getScore() > teams.get(1).getScore())
- + return 2;
- + if (teams.get(1).getScore() == teams.get(2).getScore())
- + if (Rnd.nextInt(1) == 1)
- + return 1;
- + else
- + return 2;
- +
- + return 1;
- + }
- +
- + @Override
- + public void onDie(L2PcInstance victim, L2PcInstance killer)
- + {
- + super.onDie(victim, killer);
- + addToResurrector(victim);
- + }
- +
- + @Override
- + protected void schedule(int time)
- + {
- + tpm.scheduleGeneral(task, time);
- + }
- +
- + private void setStatus(EventState s)
- + {
- + eventState = s;
- + }
- +
- + @Override
- + protected void showHtml(L2PcInstance player, int obj)
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(obj);
- + TextBuilder sb = new TextBuilder();
- + sb.append("<html><body><table width=300>" + "<tr><td><center>Event phase</td></tr>" + "<tr><td><center>" + getString("eventName") + " - " + clock.getTime() + "</td></tr>" + "<tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr>" + "</table><br><table width=300>");
- +
- + int i = 0;
- + for (EventTeam team : teams.values())
- + {
- + i++;
- + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
- + for (L2PcInstance p : getPlayersOfTeam(i))
- + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- + }
- +
- + sb.append("</table><br></body></html>");
- + html.setHtml(sb.toString());
- + player.sendPacket(html);
- +
- + }
- +
- + @Override
- + protected void start()
- + {
- + setStatus(EventState.START);
- + schedule(1);
- + }
- +
- + private void spawnBases()
- + {
- + for(int i = 1; i <= getInt("numOfBases"); i++)
- + {
- + bases.put(i, spawnNPC(getPosition("Base",i)[0],getPosition("Base",i)[1],getPosition("Base",i)[2],getInt("baseNpcId")));
- + bases.get(i).getLastSpawn().setTitle("- Neutral -");
- + owners.put(i, 0);
- + }
- + }
- +
- + private void unspawnBases()
- + {
- + for(L2Spawn base: bases.values())
- + unspawnNPC(base);
- + }
- +
- + @Override
- + public void reset()
- + {
- + super.reset();
- + bases.clear();
- + owners.clear();
- + }
- +
- + @Override
- + protected void clockTick()
- + {
- + for(int owner : owners.values())
- + if(owner != 0)
- + teams.get(owner).increaseScore(1);
- + }
- +
- + @Override
- + public void useCapture(L2PcInstance player, L2NpcInstance base)
- + {
- + if(base.getNpcId() != getInt("baseNpcId"))
- + return;
- +
- + for(Map.Entry<Integer, L2Spawn> baseSpawn: bases.entrySet())
- + if(baseSpawn.getValue().getLastSpawn().getObjectId() == base.getObjectId())
- + {
- + if(owners.get(baseSpawn.getKey()) == getTeam(player))
- + return;
- +
- + owners.getEntry(baseSpawn.getKey()).setValue(getTeam(player));
- + baseSpawn.getValue().getLastSpawn().setTitle("- "+teams.get(getTeam(player)).getName()+" -");
- + for(L2PcInstance p : getPlayerList())
- + p.sendPacket(new NpcInfo(baseSpawn.getValue().getLastSpawn(), p));
- +
- + announce(getPlayerList(),"The "+teams.get(getTeam(player)).getName()+" team captured a base!");
- + increasePlayersScore(player);
- + player.addItem("Event", 6392, 2, player, true);
- + }
- + }
- +
- + private void removeSkill()
- + {
- + for (L2PcInstance player : getPlayerList())
- + player.removeSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
- + }
- +
- + private void giveSkill()
- + {
- + for (L2PcInstance player : getPlayerList())
- + player.addSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
- + }
- +}
- \ No newline at end of file
- Index: head-src/com/l2jfrozen/gameserver/event/dm.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/dm.java (revision 0)
- +++ head-src/com/l2jfrozen/gameserver/event/dm.java (revision 0)
- @@ -0,0 +1,139 @@
- +package com.l2jfrozen.gameserver.event;
- +
- +import javolution.text.TextBuilder;
- +
- +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +public class dm extends Event
- +{
- +private class Core implements Runnable
- +{
- +public void run()
- +{
- +try
- +{
- +switch (eventState)
- +{
- +case START:
- +divideIntoTeams(1);
- +preparePlayers();
- +teleportToTeamPos();
- +forceSitAll();
- +setStatus(EventState.FIGHT);
- +debug("The event started with " + players.size() + " player");
- +schedule(20000);
- +break;
- +
- +case FIGHT:
- +forceStandAll();
- +setStatus(EventState.END);
- +debug("The fight started");
- +clock.startClock(getInt("matchTime"));
- +break;
- +
- +case END:
- +clock.setTime(0);
- +L2PcInstance winner = getPlayerWithMaxScore();
- +giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
- +setStatus(EventState.INACTIVE);
- +debug("The event ended. Winner: " + winner.getName());
- +EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
- +break;
- +}
- +}
- +catch (Throwable e)
- +{
- +e.printStackTrace();
- +EventManager.getInstance().end("Error! Event ended.");
- +}
- +}
- +}
- +
- +private enum EventState
- +{
- +START, FIGHT, END, INACTIVE
- +}
- +
- +private EventState eventState;
- +
- +private Core task;
- +
- +public dm()
- +{
- +super();
- +eventId = 1;
- +createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
- +task = new Core();
- +}
- +
- +@Override
- +protected void endEvent()
- +{
- +setStatus(EventState.END);
- +clock.setTime(0);
- +
- +}
- +
- +@Override
- +protected String getScorebar()
- +{
- +return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
- +}
- +
- +@Override
- +public void onDie(L2PcInstance victim, L2PcInstance killer)
- +{
- +super.onDie(victim, killer);
- +addToResurrector(victim);
- +}
- +
- +@Override
- +public void onKill(L2PcInstance victim, L2PcInstance killer)
- +{
- +super.onKill(victim, killer);
- +killer.addItem("Event", 6392, 1, killer, true);
- +increasePlayersScore(killer);
- +}
- +
- +@Override
- +protected void schedule(int time)
- +{
- +tpm.scheduleGeneral(task, time);
- +}
- +
- +private void setStatus(EventState s)
- +{
- +eventState = s;
- +}
- +
- +@Override
- +protected void showHtml(L2PcInstance player, int obj)
- +{
- +if (players.size() > 0)
- +{
- +NpcHtmlMessage html = new NpcHtmlMessage(obj);
- +TextBuilder sb = new TextBuilder();
- +
- +sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
- +sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
- +sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
- +sb.append("<br><table width=270>");
- +
- +for (L2PcInstance p : getPlayersOfTeam(1))
- +sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
- +
- +sb.append("</table></body></html>");
- +html.setHtml(sb.toString());
- +player.sendPacket(html);
- +}
- +}
- +
- +@Override
- +protected void start()
- +{
- +setStatus(EventState.START);
- +schedule(1);
- +}
- +
- +}
- \ No newline at end of file
Add Comment
Please, Sign In to add comment