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/event/FormalLMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (working copy)
- @@ -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/network/clientpackets/Logout.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (working copy)
- @@ -21,6 +21,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.L2Character;
- import com.l2jfrozen.gameserver.model.L2Party;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- @@ -96,6 +97,13 @@
- 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))
- {
- player.sendMessage("You can't Logout in Olympiad mode.");
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (working copy)
- @@ -25,6 +25,7 @@
- import org.apache.log4j.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;
- @@ -175,6 +176,9 @@
- activeChar.sendMessage("Blessed Scroll of Escape: Castle cannot be used due to unsuitable terms.");
- return;
- }
- + if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(activeChar))
- + if (!EventManager.getInstance().getCurrentEvent().onUseItem(activeChar,item))
- + return;
- if (activeChar.isFishing() && (itemId < 6535 || itemId > 6540))
- {
- Index: head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (working copy)
- @@ -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 (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java (working copy)
- @@ -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/event/CTF.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/CTF.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/CTF.java (working copy)
- @@ -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/event/EventBuffer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (working copy)
- @@ -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/TvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/TvT.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/TvT.java (working copy)
- @@ -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/event/Zombie.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Zombie.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Zombie.java (working copy)
- @@ -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/model/actor/instance/L2PcInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (working copy)
- @@ -145,7 +145,7 @@
- import com.l2jfrozen.gameserver.model.entity.L2Rebirth;
- 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;
- @@ -245,6 +245,8 @@
- 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.<br>
- * There is always a client-thread connected to this (except if a player-store is activated upon logout).
- @@ -4441,7 +4443,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 ...");
- }
- @@ -5832,6 +5834,13 @@
- return;
- }
- }
- +
- + if (!EventManager.getInstance().canTargetPlayer(this, player))
- + {
- + player.sendPacket(new ActionFailed());
- + return;
- + }
- +
- // Check if the L2PcInstance is confused
- if (player.isOutOfControl())
- {
- @@ -7401,6 +7410,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.kills.add(getName());
- @@ -7852,6 +7874,9 @@
- 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))
- return;
- @@ -8525,6 +8550,9 @@
- if (isInsideZone(ZONE_PVP))
- return;
- + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + return;
- +
- setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME);
- if (getPvpFlag() == 0)
- @@ -8553,6 +8581,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;
- @@ -8667,6 +8698,9 @@
- LOGGER.debug(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);
- }
- @@ -11843,6 +11877,9 @@
- 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)
- {
- Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
- @@ -11928,6 +11965,10 @@
- */
- public void useMagic(final L2Skill skill, final boolean forceUse, final boolean dontMove)
- {
- + if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(this))
- + if(!EventManager.getInstance().getCurrentEvent().onUseMagic(skill))
- + return;
- +
- if (isDead())
- {
- abortCast();
- @@ -12637,6 +12678,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()))
- @@ -12650,11 +12694,15 @@
- 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()))
- return true; // in clan war player can attack whites even without ctrl
- }
- +
- if (((L2PcInstance) target).getPvpFlag() == 0 && // target's pvp flag is not set and
- ((L2PcInstance) target).getKarma() == 0 // target has no karma
- )
- @@ -14843,6 +14891,9 @@
- */
- public synchronized boolean setActiveClass(final 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");
- @@ -16339,6 +16390,10 @@
- setXYZ(_obsX, _obsY, _obsZ);
- }
- + EventManager.getInstance().onLogout(this);
- + if(EventManager.getInstance().isRegistered(this))
- + EventManager.getInstance().getCurrentEvent().onLogout(this);
- +
- if (isTeleporting())
- {
- try
- @@ -17587,6 +17642,9 @@
- if (getDeathPenaltyBuffLevel() >= 15) // maximum level reached
- return;
- + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
- + return;
- +
- if (getDeathPenaltyBuffLevel() != 0)
- {
- L2Skill skill = SkillTable.getInstance().getInfo(5076, getDeathPenaltyBuffLevel());
- Index: head-src/com/l2jfrozen/gameserver/event/Bomb.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Bomb.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Bomb.java (working copy)
- @@ -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: config/Events.xml
- ===================================================================
- --- config/Events.xml (nonexistent)
- +++ config/Events.xml (working copy)
- @@ -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/Mutant.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Mutant.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Mutant.java (working copy)
- @@ -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/network/clientpackets/Say2.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (working copy)
- @@ -30,6 +30,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;
- @@ -68,6 +70,8 @@
- public final static int HERO_VOICE = 17; // %
- public final static int CRITICAL_ANNOUNCE = 18;
- + private boolean _isInLMS;
- +
- private final static String[] CHAT_NAMES =
- {
- "ALL ",
- @@ -268,7 +272,18 @@
- }
- final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), _type, activeChar.getName(), _text);
- - switch (_type)
- + 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:
- final L2PcInstance receiver = L2World.getInstance().getPlayer(_target);
- Index: head-src/com/l2jfrozen/gameserver/Shutdown.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/Shutdown.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/Shutdown.java (working copy)
- @@ -23,6 +23,8 @@
- import org.apache.log4j.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;
- @@ -706,6 +708,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/model/L2Character.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/L2Character.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/model/L2Character.java (working copy)
- @@ -47,6 +47,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;
- @@ -1006,6 +1007,53 @@
- */
- protected void doAttack(final 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)
- {
- LOGGER.debug(getName() + " doAttack: target=" + target);
- @@ -1360,6 +1408,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)
- {
- if (player.isCursedWeaponEquiped())
- @@ -1716,6 +1768,75 @@
- */
- public void doCast(final 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){}
- +
- final L2Character activeChar = this;
- if (skill == null)
- Index: head-src/com/l2jfrozen/gameserver/event/Simon.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Simon.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Simon.java (working copy)
- @@ -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/event/dm.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/dm.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/dm.java (working copy)
- @@ -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
- Index: head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (working copy)
- @@ -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/GameServer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/GameServer.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/GameServer.java (working copy)
- @@ -78,6 +78,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;
- @@ -122,7 +125,6 @@
- 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.olympiad.Olympiad;
- import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
- import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSignsFestival;
- @@ -559,7 +561,7 @@
- else
- LOGGER.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)
- @@ -572,7 +574,7 @@
- LOGGER.info("DM Event is Enabled.");
- }
- else
- - LOGGER.info("All events are Disabled.");
- + LOGGER.info("All events are Disabled.");*/
- if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
- OfflineTradeTable.restoreOfflineTraders();
- @@ -610,6 +612,11 @@
- LOGGER.info("GameServer Started, free memory " + Memory.getFreeMemory() + " Mb of " + Memory.getTotalMemory() + " Mb");
- LOGGER.info("Used memory: " + Memory.getUsedMemory() + " MB");
- + EventManager.getInstance();
- + EventStats.getInstance();
- + if (EventManager.getInstance().getBoolean("eventBufferEnabled"))
- + EventBuffer.getInstance();
- +
- Util.printSection("Java specific");
- LOGGER.info("JRE name: " + System.getProperty("java.vendor"));
- LOGGER.info("JRE specification version: " + System.getProperty("java.specification.version"));
- Index: head-src/com/l2jfrozen/gameserver/event/Battlefield.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Battlefield.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Battlefield.java (working copy)
- @@ -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/Bomb.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Bomb.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Bomb.java (working copy)
- @@ -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/CTF.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/CTF.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/CTF.java (working copy)
- @@ -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/event/Domination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Domination.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Domination.java (working copy)
- @@ -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/event/DoubleDomination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (working copy)
- @@ -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/event/Event.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Event.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Event.java (working copy)
- @@ -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 (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (working copy)
- @@ -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/EventConfig.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventConfig.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventConfig.java (working copy)
- @@ -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/EventManager.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventManager.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventManager.java (working copy)
- @@ -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: head-src/com/l2jfrozen/gameserver/event/EventStats.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventStats.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventStats.java (working copy)
- @@ -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/event/EventTeam.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventTeam.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventTeam.java (working copy)
- @@ -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/FormalLMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (working copy)
- @@ -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/LMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/LMS.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/LMS.java (working copy)
- @@ -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/Lucky.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Lucky.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Lucky.java (working copy)
- @@ -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/Mutant.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Mutant.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Mutant.java (working copy)
- @@ -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/event/Russian.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Russian.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Russian.java (working copy)
- @@ -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/event/Simon.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Simon.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Simon.java (working copy)
- @@ -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/event/TvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/TvT.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/TvT.java (working copy)
- @@ -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/event/VIPTvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (working copy)
- @@ -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/Zombie.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Zombie.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Zombie.java (working copy)
- @@ -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/event/dm.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/dm.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/dm.java (working copy)
- @@ -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
- Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (working copy)
- @@ -21,26 +21,40 @@
- */
- public class ExShowScreenMessage extends L2GameServerPacket
- {
- + 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 int _unk1;
- + private final boolean _hide;
- private final int _unk2;
- private final int _unk3;
- - private final int _unk4;
- + 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(final String text, final int time)
- {
- _type = 1;
- _sysMessageId = -1;
- - _unk1 = 0;
- + _hide = false;
- _unk2 = 0;
- _unk3 = 0;
- - _unk4 = 0;
- + _fade = false;
- _position = 0x02;
- _text = text;
- _time = time;
- @@ -48,14 +62,34 @@
- _effect = false;
- }
- - public ExShowScreenMessage(final int type, final int messageId, final int position, final int unk1, final int size, final int unk2, final int unk3, final boolean showEffect, final int time, final int unk4, final 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;
- @@ -64,12 +98,6 @@
- }
- @Override
- - public String getType()
- - {
- - return "[S]FE:39 ExShowScreenMessage";
- - }
- -
- - @Override
- protected void writeImpl()
- {
- writeC(0xfe);
- @@ -77,13 +105,19 @@
- 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(_effect ? 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/network/serverpackets/Die.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (working copy)
- @@ -20,6 +20,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 @@
- final 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) || player.isInFunEvent() || player.isPendingRevive());
- }
- _charObjId = cha.getObjectId();
- @@ -88,45 +91,57 @@
- // sweepable
- // 6d 04 00 00 00 - FIXED
- - writeD(_canTeleport ? 0x01 : 0); // 6d 00 00 00 00 - to nearest village
- + 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)
- + if(_canTeleport && _clan != null)
- {
- - L2SiegeClan siegeClan = null;
- - Boolean isInDefense = false;
- - final Castle castle = CastleManager.getInstance().getCastle(_activeChar);
- - final Fort fort = FortManager.getInstance().getFort(_activeChar);
- -
- - if (castle != null && castle.getSiege().getIsInProgress())
- - {
- // 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))
- - {
- - 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
- - }
- - 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 if(fort != null && fort.getSiege().getIsInProgress())
- + {
- + //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
- }
- + 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/model/actor/instance/L2NpcInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (working copy)
- @@ -39,6 +39,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;
- @@ -2966,6 +2967,20 @@
- 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/EventStats.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventStats.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventStats.java (working copy)
- @@ -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/CharInfo.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (working copy)
- @@ -26,12 +26,15 @@
- import org.apache.log4j.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;
- /**
- @@ -89,6 +92,8 @@
- private int _flyWalkSpd;
- private final float _moveMultiplier, _attackSpeedMultiplier;
- private final int _maxCp;
- + private boolean _isInLMS;
- + private boolean _isInDM;
- /**
- * @param cha
- @@ -110,6 +115,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
- @@ -172,7 +179,16 @@
- // writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
- // }
- - writeS(_activeChar.getName());
- + //writeS(_activeChar.getName());
- + if(_isInLMS || _isInDM)
- + {
- + writeS("Player");
- + }
- + else
- + {
- + writeS(_activeChar.getName());
- + }
- + //->writeS(_activeChar.getName());
- if (_activeChar.getAppearance().getInvisible())
- // if(gmSeeInvis)
- @@ -218,6 +234,14 @@
- 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);
- @@ -230,18 +254,48 @@
- 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));
- + //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);
- @@ -303,10 +357,24 @@
- writeS(_activeChar.getTitle());
- }
- - writeD(_activeChar.getClanId());
- - writeD(_activeChar.getClanCrestId());
- - writeD(_activeChar.getAllyId());
- - writeD(_activeChar.getAllyCrestId());
- + //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/event/Lucky.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Lucky.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Lucky.java (working copy)
- @@ -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/model/entity/olympiad/Olympiad.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (working copy)
- @@ -48,6 +48,7 @@
- import org.apache.log4j.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventManager;
- import com.l2jfrozen.gameserver.managers.OlympiadStadiaManager;
- import com.l2jfrozen.gameserver.model.L2World;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- @@ -425,6 +426,11 @@
- noble.sendPacket(sm);
- 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())
- {
- @@ -971,12 +977,16 @@
- spectator.sendPacket(new SystemMessage(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME));
- return;
- }
- + if (EventManager.getInstance().players.contains(spectator))
- + {
- + spectator.sendMessage("You can not observe games while registered for an event!");
- + return;
- + }
- if (spectator.isRegisteredInFunEvent())
- {
- spectator.sendMessage("You are already registered to an Event");
- return;
- }
- -
- OlympiadManager.STADIUMS[id].addSpectator(id, spectator, storeCoords);
- if (OlympiadManager.getInstance().getOlympiadGame(id) != null)
- {
- Index: head-src/com/l2jfrozen/gameserver/event/VIPTvT.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (working copy)
- @@ -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/Domination.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Domination.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Domination.java (working copy)
- @@ -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/event/EventManager.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventManager.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventManager.java (working copy)
- @@ -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: head-src/com/l2jfrozen/gameserver/model/L2Skill.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/L2Skill.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/model/L2Skill.java (working copy)
- @@ -33,6 +33,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;
- @@ -264,6 +265,8 @@
- COREDONE,
- ZAKENPLAYER,
- ZAKENSELF,
- + BOMB,
- + CAPTURE,
- // unimplemented
- NOTDONE;
- @@ -2009,6 +2012,20 @@
- }
- }
- + 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/network/clientpackets/RequestJoinParty.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (working copy)
- @@ -23,6 +23,8 @@
- import org.apache.log4j.Logger;
- import com.l2jfrozen.Config;
- +import com.l2jfrozen.gameserver.event.EventManager;
- +import com.l2jfrozen.gameserver.event.LMS;
- import com.l2jfrozen.gameserver.model.L2Party;
- import com.l2jfrozen.gameserver.model.L2World;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- @@ -39,6 +41,7 @@
- private String _name;
- private int _itemDistribution;
- + private boolean _isInLMS;
- @Override
- protected void readImpl()
- @@ -52,10 +55,15 @@
- {
- final L2PcInstance requestor = getClient().getActiveChar();
- final 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/Event.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Event.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Event.java (working copy)
- @@ -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/network/clientpackets/RequestBypassToServer.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
- @@ -20,11 +20,17 @@
- */
- package com.l2jfrozen.gameserver.network.clientpackets;
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- import org.apache.log4j.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;
- @@ -45,6 +51,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
- {
- @@ -117,6 +124,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/event/EventTeam.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventTeam.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventTeam.java (working copy)
- @@ -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/EventConfig.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/EventConfig.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/EventConfig.java (working copy)
- @@ -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/Battlefield.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Battlefield.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Battlefield.java (working copy)
- @@ -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/model/actor/instance/L2EventManagerInstance.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (working copy)
- @@ -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/handler/SkillHandler.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (working copy)
- @@ -29,6 +29,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;
- @@ -122,6 +124,8 @@
- registerSkillHandler(new GetPlayer());
- registerSkillHandler(new ZakenPlayer());
- registerSkillHandler(new ZakenSelf());
- + registerSkillHandler(new Bomb());
- + registerSkillHandler(new Capture());
- LOGGER.info("SkillHandler: Loaded " + _datatable.size() + " handlers.");
- }
- Index: head-src/com/l2jfrozen/gameserver/event/Russian.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/Russian.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/Russian.java (working copy)
- @@ -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/RequestRestart.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (revision 1132)
- +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (working copy)
- @@ -26,6 +26,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;
- @@ -113,7 +114,12 @@
- 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
- // is not longer a participant.
- Index: head-src/com/l2jfrozen/gameserver/event/LMS.java
- ===================================================================
- --- head-src/com/l2jfrozen/gameserver/event/LMS.java (nonexistent)
- +++ head-src/com/l2jfrozen/gameserver/event/LMS.java (working copy)
- @@ -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
- #P L2jFrozen_DataPack
- Index: data/html/default/9110.htm
- ===================================================================
- --- data/html/default/9110.htm (nonexistent)
- +++ data/html/default/9110.htm (working copy)
- @@ -0,0 +1,3 @@
- +<html><body>
- +Use the Capture skill on the base in order to capture it and score for your team!
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/12.htm
- ===================================================================
- --- data/html/eventinfo/12.htm (nonexistent)
- +++ data/html/eventinfo/12.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Bomb Fight<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All players get a new skill Bomb</td></tr>
- +<tr><td>This is the only skill you can deal dmg with</td></tr>
- +<tr><td>3 seconds after you put a bomb, all surrounding enemies dies and you get scored</td></tr>
- +<tr><td>Team with most kills wins</td></tr>
- +<tr><td>If both teams got same score then a random team wins</td></tr>
- +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
- +<tr><td>Event reward: 1 apigas</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/6.htm
- ===================================================================
- --- data/html/eventinfo/6.htm (nonexistent)
- +++ data/html/eventinfo/6.htm (working copy)
- @@ -0,0 +1,25 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Simon says<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to say exact text as the NPC says as fast as possible</td></tr>
- +<tr><td>If player didnt say the text within 10 seconds he's out</td></tr>
- +<tr><td>If player said the word wrong he is out</td></tr>
- +<tr><td>If player said the word last he is out</td></tr>
- +<tr><td>Red nick means you're out</td></tr>
- +<tr><td>Green nick means you said the word correct</td></tr>
- +<tr><td>All players are in sitting position during the event</td></tr>
- +<tr><td>The winner is the last person to stay with green nick</td></tr>
- +<tr><td>Event reward: 25 medals</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Event duration: Until there's 1 winner</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/9101.htm
- ===================================================================
- --- data/html/default/9101.htm (nonexistent)
- +++ data/html/default/9101.htm (working copy)
- @@ -0,0 +1,3 @@
- +<html><body>
- +Say excactly what i say as soon as possible.
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/5.htm
- ===================================================================
- --- data/html/eventinfo/5.htm (nonexistent)
- +++ data/html/eventinfo/5.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Lucky Chests<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to have most chests succesfully opened</td></tr>
- +<tr><td>There is a chance that a chest will explode and get you killed</td></tr>
- +<tr><td>The event ends when alll chests are opened or time runs out</td></tr>
- +<tr><td>The player with most chests opened wins</td></tr>
- +<tr><td>If there's more than 1 player with max score, then a random player wins</td></tr>
- +<tr><td>Reward for every Chest opened: 1 Medal</td></tr>
- +<tr><td>Event reward: 20 medals</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Event duration: 3 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: sql/npc.sql
- ===================================================================
- --- sql/npc.sql (revision 1132)
- +++ sql/npc.sql (working copy)
- @@ -6637,8 +6637,17 @@
- INSERT INTO `npc` VALUES ('35654', '35654', 'Court Magician', '0', 'Goddard', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
- INSERT INTO `npc` VALUES ('35655', '35655', 'Court Magician', '0', 'Rune', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
- INSERT INTO `npc` VALUES ('35656', '35656', 'Court Magician', '0', 'Schuttgart', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
- +INSERT INTO `npc` VALUES ('9101', '30026', 'Simon', 1, 'Event', 1, 'NPC.a_fighterguild_master_Mhuman', 8.00, 23.50, 70, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9102', '18284', 'Treasure Chest', '0', '', '0', 'LineageMonster.mimic', '8.50', '8.50', '78', 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9103', '31772', 'Zone', 1, '', 0, 'LineageNPC.heroes_obelisk_dwarf', 23.00, 80.00, 70, 'etc', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 50, 120, NULL, NULL, 1, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9104', '35062', 'Blue Flag', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9105', '35062', 'Red Flag', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9106', '32027', 'Blue Flag Holder', 0, '', 0, 'NpcEV.grail_brazier_b', 9.50, 29.00, 78, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 88, 132, NULL, 0, 0, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9107', '32027', 'Red Flag Holder', 0, '', 0, 'NpcEV.grail_brazier_b', 9.50, 29.00, 78, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 88, 132, NULL, 0, 0, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9108', '18284', 'Russian', 0, '', 0, 'LineageMonster.mimic', 8.50, 8.50, 78, 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9109', '18284', 'Bomb', 1, '', 0, 'LineageMonster.mimic', 8.50, 8.50, 78, 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
- +INSERT INTO `npc` VALUES ('9110', '35062', 'Base', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT');
- INSERT INTO `npc` VALUES ('55559', '32001', 'Preacher of Doom', '0', '', '0', 'Monster.dark_horror', '9.50', '29.00', '70', 'male', 'L2Npc', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '0', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
- -
- INSERT INTO `npc` VALUES ('25164', '25164', 'Pet of Skylancer', '0', 'Raid Fighter', '0', 'Monster.skeleton_archer', '11.00', '27.00', '69', 'male', 'L2Minion', '500', '21176', '1493', '223.73', '8.75', '40', '43', '30', '41', '35', '10', '22852', '2260', '19755', '1840', '15424', '747', '249', '0', '227', '279', '0', '0', '80', '120', null, '0', '1', '0', 'LAST_HIT');
- INSERT INTO `npc` VALUES ('25165', '25165', 'Slave Warrior of Skylancer', '0', 'Raid Fighter', '0', 'Monster.bugbear', '17.00', '35.00', '69', 'male', 'L2Minion', '40', '15898', '1493', '223.73', '8.75', '40', '43', '30', '41', '35', '10', '22852', '2260', '6668', '1840', '8676', '747', '278', '0', '253', '0', '0', '0', '80', '120', null, '0', '0', '0', 'LAST_HIT');
- INSERT INTO `npc` VALUES ('27198', '27198', 'Gremlin', '0', '', '0', 'Monster.gremlin', '10.00', '15.00', '1', 'male', 'L2Monster', '40', '62', '44', '3.16', '0.91', '40', '43', '30', '21', '35', '10', '29', '2', '9', '39', '3', '32', '278', '0', '253', '0', '0', '0', '20', '50', null, '0', '0', '0', 'LAST_HIT');
- Index: data/html/eventinfo/2.htm
- ===================================================================
- --- data/html/eventinfo/2.htm (nonexistent)
- +++ data/html/eventinfo/2.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Domination<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Team vs team event</td></tr>
- +<tr><td>The goal is to have more players near the Zone than the enemy team</td></tr>
- +<tr><td>For every second a team got more players than enemy team near zone, they get a point.</td></tr>
- +<tr><td>the team with most Domination points wins</td></tr>
- +<tr><td>If both team got same score, then a random team wins</td></tr>
- +<tr><td>Reward for every kill: 1 medal</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/10.htm
- ===================================================================
- --- data/html/eventinfo/10.htm (nonexistent)
- +++ data/html/eventinfo/10.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Capture the flag<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Each team has a flag they got to protect</td></tr>
- +<tr><td>If a team takes enemy flag and bring it back they get scored</td></tr>
- +<tr><td>Team with most flags taken wins</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Reward for each flag taken: 4 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/3.htm
- ===================================================================
- --- data/html/eventinfo/3.htm (nonexistent)
- +++ data/html/eventinfo/3.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Double Domination<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Team vs team event</td></tr>
- +<tr><td>The goal is to have more players near both Zones than the enemy team</td></tr>
- +<tr><td>If a team got more players in both zones for 10 seconds, they get a point</td></tr>
- +<tr><td>After a team gets scored, both teams gets teleported to intial locations</td></tr>
- +<tr><td>the team with most domination points wins</td></tr>
- +<tr><td>If both team got same score, then a random team wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/1.htm
- ===================================================================
- --- data/html/eventinfo/1.htm (nonexistent)
- +++ data/html/eventinfo/1.htm (working copy)
- @@ -0,0 +1,21 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Death Match<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All vs all event</td></tr>
- +<tr><td>the player with most kills wins</td></tr>
- +<tr><td>If there is more than 1 player with max score, then a random player wins</td></tr>
- +<tr><td>Players will get 1 medal for every kill</td></tr>
- +<tr><td>Event reward: 20 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/10.htm
- ===================================================================
- --- data/html/eventinfo/10.htm (nonexistent)
- +++ data/html/eventinfo/10.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Capture the flag<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Each team has a flag they got to protect</td></tr>
- +<tr><td>If a team takes enemy flag and bring it back they get scored</td></tr>
- +<tr><td>Team with most flags taken wins</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Reward for each flag taken: 4 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/11.htm
- ===================================================================
- --- data/html/eventinfo/11.htm (nonexistent)
- +++ data/html/eventinfo/11.htm (working copy)
- @@ -0,0 +1,24 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Russian Roluette<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>6 Chests spawns</td></tr>
- +<tr><td>Every person need to choose a chest on every round</td></tr>
- +<tr><td>Each round lasts for 10 seconds</td></tr>
- +<tr><td>Green nick means u have choosen a chest for the round</td></tr>
- +<tr><td>If you haven't choosen any chest you die</td></tr>
- +<tr><td>If your chest dies you die</td></tr>
- +<tr><td>Winners are all players who succesfully survived to the last chest</td></tr>
- +<tr><td>Event reward: 15 medals</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/12.htm
- ===================================================================
- --- data/html/eventinfo/12.htm (nonexistent)
- +++ data/html/eventinfo/12.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Bomb Fight<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All players get a new skill Bomb</td></tr>
- +<tr><td>This is the only skill you can deal dmg with</td></tr>
- +<tr><td>3 seconds after you put a bomb, all surrounding enemies dies and you get scored</td></tr>
- +<tr><td>Team with most kills wins</td></tr>
- +<tr><td>If both teams got same score then a random team wins</td></tr>
- +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
- +<tr><td>Event reward: 1 apigas</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/13.htm
- ===================================================================
- --- data/html/eventinfo/13.htm (nonexistent)
- +++ data/html/eventinfo/13.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Mutant<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>1 random player becomes a mutant</td></tr>
- +<tr><td>Mutant gets: 3x p.def/m.def 2x p.atk/m.atk/c.spd/atk.spd and 30% resist to debuffs</td></tr>
- +<tr><td>Only the mutant can score</td></tr>
- +<tr><td>Everyone else can kill mutant only</td></tr>
- +<tr><td>If 2 or more players get same score then a random player wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/14.htm
- ===================================================================
- --- data/html/eventinfo/14.htm (nonexistent)
- +++ data/html/eventinfo/14.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Battlefield<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All players get skill "Capture"</td></tr>
- +<tr><td>The goal is to capture as much bases as possible</td></tr>
- +<tr><td>For each base a team got they will get 1 point every second</td></tr>
- +<tr><td>Team with most score wins</td></tr>
- +<tr><td>If both teams got same score then a random team wins</td></tr>
- +<tr><td>Reward for every base capture: 2 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/2.htm
- ===================================================================
- --- data/html/eventinfo/2.htm (nonexistent)
- +++ data/html/eventinfo/2.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Domination<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Team vs team event</td></tr>
- +<tr><td>The goal is to have more players near the Zone than the enemy team</td></tr>
- +<tr><td>For every second a team got more players than enemy team near zone, they get a point.</td></tr>
- +<tr><td>the team with most Domination points wins</td></tr>
- +<tr><td>If both team got same score, then a random team wins</td></tr>
- +<tr><td>Reward for every kill: 1 medal</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/3.htm
- ===================================================================
- --- data/html/eventinfo/3.htm (nonexistent)
- +++ data/html/eventinfo/3.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Double Domination<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Team vs team event</td></tr>
- +<tr><td>The goal is to have more players near both Zones than the enemy team</td></tr>
- +<tr><td>If a team got more players in both zones for 10 seconds, they get a point</td></tr>
- +<tr><td>After a team gets scored, both teams gets teleported to intial locations</td></tr>
- +<tr><td>the team with most domination points wins</td></tr>
- +<tr><td>If both team got same score, then a random team wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/4.htm
- ===================================================================
- --- data/html/eventinfo/4.htm (nonexistent)
- +++ data/html/eventinfo/4.htm (working copy)
- @@ -0,0 +1,20 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Last man standing<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Free for all event</td></tr>
- +<tr><td>The last person to stay alive is the winner</td></tr>
- +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
- +<tr><td>Event reward: 25 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/5.htm
- ===================================================================
- --- data/html/eventinfo/5.htm (nonexistent)
- +++ data/html/eventinfo/5.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Lucky Chests<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to have most chests succesfully opened</td></tr>
- +<tr><td>There is a chance that a chest will explode and get you killed</td></tr>
- +<tr><td>The event ends when alll chests are opened or time runs out</td></tr>
- +<tr><td>The player with most chests opened wins</td></tr>
- +<tr><td>If there's more than 1 player with max score, then a random player wins</td></tr>
- +<tr><td>Reward for every Chest opened: 1 Medal</td></tr>
- +<tr><td>Event reward: 20 medals</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Event duration: 3 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/6.htm
- ===================================================================
- --- data/html/eventinfo/6.htm (nonexistent)
- +++ data/html/eventinfo/6.htm (working copy)
- @@ -0,0 +1,25 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Simon says<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to say exact text as the NPC says as fast as possible</td></tr>
- +<tr><td>If player didnt say the text within 10 seconds he's out</td></tr>
- +<tr><td>If player said the word wrong he is out</td></tr>
- +<tr><td>If player said the word last he is out</td></tr>
- +<tr><td>Red nick means you're out</td></tr>
- +<tr><td>Green nick means you said the word correct</td></tr>
- +<tr><td>All players are in sitting position during the event</td></tr>
- +<tr><td>The winner is the last person to stay with green nick</td></tr>
- +<tr><td>Event reward: 25 medals</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Event duration: Until there's 1 winner</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/7.htm
- ===================================================================
- --- data/html/eventinfo/7.htm (nonexistent)
- +++ data/html/eventinfo/7.htm (working copy)
- @@ -0,0 +1,21 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Team vs team<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to get more kills than enemy team</td></tr>
- +<tr><td>team with most score wins</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Reward for every kill: 1 medal</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event Duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/8.htm
- ===================================================================
- --- data/html/eventinfo/8.htm (nonexistent)
- +++ data/html/eventinfo/8.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">VIP<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to kill the enemy VIP</td></tr>
- +<tr><td>team get score for every VIP kill</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>team with most VIP kills wins</td></tr>
- +<tr><td>Reward per VIP kill: 3 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/9.htm
- ===================================================================
- --- data/html/eventinfo/9.htm (nonexistent)
- +++ data/html/eventinfo/9.htm (working copy)
- @@ -0,0 +1,20 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Zombies<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>1 Random person turns into a zombie</td></tr>
- +<tr><td>zombie gets 2 medal for every "kill"</td></tr>
- +<tr><td>Last to stay human wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/7.htm
- ===================================================================
- --- data/html/eventinfo/7.htm (nonexistent)
- +++ data/html/eventinfo/7.htm (working copy)
- @@ -0,0 +1,21 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Team vs team<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to get more kills than enemy team</td></tr>
- +<tr><td>team with most score wins</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Reward for every kill: 1 medal</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event Duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/11.htm
- ===================================================================
- --- data/html/eventinfo/11.htm (nonexistent)
- +++ data/html/eventinfo/11.htm (working copy)
- @@ -0,0 +1,24 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Russian Roluette<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>6 Chests spawns</td></tr>
- +<tr><td>Every person need to choose a chest on every round</td></tr>
- +<tr><td>Each round lasts for 10 seconds</td></tr>
- +<tr><td>Green nick means u have choosen a chest for the round</td></tr>
- +<tr><td>If you haven't choosen any chest you die</td></tr>
- +<tr><td>If your chest dies you die</td></tr>
- +<tr><td>Winners are all players who succesfully survived to the last chest</td></tr>
- +<tr><td>Event reward: 15 medals</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/4.htm
- ===================================================================
- --- data/html/eventinfo/4.htm (nonexistent)
- +++ data/html/eventinfo/4.htm (working copy)
- @@ -0,0 +1,20 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Last man standing<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>Free for all event</td></tr>
- +<tr><td>The last person to stay alive is the winner</td></tr>
- +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
- +<tr><td>Event reward: 25 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: sql/custom_npc.sql
- ===================================================================
- --- sql/custom_npc.sql (revision 1132)
- +++ sql/custom_npc.sql (working copy)
- @@ -51,3 +51,5 @@
- INSERT ignore INTO custom_npc
- values
- ('31228', '31228', 'Roy the Cat', '1', 'Classes Trader', '1', 'Monster.cat_the_cat', '9.00', '16.00', '70', 'male', 'L2ClassMaster', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '490', '10', '1335', '470', '780', '382', '278', '0', '333', '0', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
- +
- +INSERT INTO `custom_npc` VALUES ('50001', '31822', 'Event Manager', '1', 'L2Warcraft', '1', 'LineageMonster5.br_wooldie', '10', '16', '80', 'male', 'L2EventManager', '40', '20000000', '40', '8.5', '3', '40', '43', '30', '21', '20', '20', '0', '0', '8', '40', '5', '30', '253', '0', '333', '0', '0', '0', '25', '120', 'Null', '0', '0', '0', 'LAST_HIT');
- \ No newline at end of file
- Index: data/stats/skills/5200-5299.xml
- ===================================================================
- --- data/stats/skills/5200-5299.xml (revision 1132)
- +++ data/stats/skills/5200-5299.xml (working copy)
- @@ -298,7 +298,7 @@
- <set name="effectRange" val="900"/>
- </skill>
- <!-- Status:Fixed Pack:l2jfrozen author:Nefer -->
- - <skill id="5219" levels="1" name="Huge Pig Stun">
- + <!-- <skill id="5219" levels="1" name="Huge Pig Stun">
- <set name="magicLvl" val="95"/>
- <set name="lvlDepend" val="1"/>
- <set name="power" val="50"/>
- @@ -332,7 +332,31 @@
- <for>
- <effect count="5" name="Fear" time="6" val="0"/>
- </for>
- - </skill>
- + </skill> -->
- + <skill id="5219" levels="1" name="Capture">
- + <set name="mpInitialConsume" val="50" />
- + <set name="target" val="TARGET_ONE" />
- + <set name="reuseDelay" val="10000" />
- + <set name="hitTime" val="2000" />
- + <set name="staticReuse" val="true" />
- + <set name="staticHitTime" val="true" />
- + <set name="skillType" val="CAPTURE" />
- + <set name="operateType" val="OP_ACTIVE" />
- + <set name="castRange" val="85" />
- + <set name="effectRange" val="400" />
- + </skill>
- + <skill id="5220" levels="1" name="Bomb">
- + <set name="mpInitialConsume" val="50" />
- + <set name="target" val="TARGET_SELF" />
- + <set name="reuseDelay" val="10000" />
- + <set name="hitTime" val="1000" />
- + <set name="staticReuse" val="true" />
- + <set name="staticHitTime" val="true" />
- + <set name="skillType" val="BOMB" />
- + <set name="operateType" val="OP_ACTIVE" />
- + <set name="castRange" val="85" />
- + <set name="effectRange" val="400" />
- +</skill>
- <!-- Status:Fixed Pack:l2jfrozen author:Nefer -->
- <skill id="5267" levels="9" name="Trap Explosion">
- <table name="#magicLvl">28 36 44 48 52 56 60 68 74</table>
- Index: data/html/eventinfo/1.htm
- ===================================================================
- --- data/html/eventinfo/1.htm (nonexistent)
- +++ data/html/eventinfo/1.htm (working copy)
- @@ -0,0 +1,21 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Death Match<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All vs all event</td></tr>
- +<tr><td>the player with most kills wins</td></tr>
- +<tr><td>If there is more than 1 player with max score, then a random player wins</td></tr>
- +<tr><td>Players will get 1 medal for every kill</td></tr>
- +<tr><td>Event reward: 20 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: sql/phoenix.sql
- ===================================================================
- --- sql/phoenix.sql (nonexistent)
- +++ sql/phoenix.sql (working copy)
- @@ -0,0 +1,32 @@
- +CREATE TABLE IF NOT EXISTS `event_stats` (
- + `id` int(11) NOT NULL AUTO_INCREMENT,
- + `player` int(11) NOT NULL,
- + `event` int(2) NOT NULL,
- + `num` int(11) NOT NULL,
- + `wins` int(11) NOT NULL,
- + `losses` int(11) NOT NULL,
- + `kills` int(11) NOT NULL,
- + `deaths` int(11) NOT NULL,
- + `scores` int(11) NOT NULL,
- + PRIMARY KEY (`id`)
- +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
- +
- +CREATE TABLE IF NOT EXISTS `event_stats_full` (
- + `id` int(11) NOT NULL AUTO_INCREMENT,
- + `player` int(11) NOT NULL,
- + `num` int(11) NOT NULL,
- + `winpercent` int(11) NOT NULL,
- + `kdratio` double NOT NULL,
- + `wins` int(11) NOT NULL,
- + `losses` int(11) NOT NULL,
- + `kills` int(11) NOT NULL,
- + `deaths` int(11) NOT NULL,
- + `favevent` int(11) NOT NULL,
- + PRIMARY KEY (`id`)
- +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
- +
- +CREATE TABLE IF NOT EXISTS `event_buffs` (
- + `player` varchar(30) NOT NULL,
- + `buffs` varchar(200) NOT NULL,
- + PRIMARY KEY (`player`)
- +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- \ No newline at end of file
- Index: data/html/eventinfo/13.htm
- ===================================================================
- --- data/html/eventinfo/13.htm (nonexistent)
- +++ data/html/eventinfo/13.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Mutant<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>1 random player becomes a mutant</td></tr>
- +<tr><td>Mutant gets: 3x p.def/m.def 2x p.atk/m.atk/c.spd/atk.spd and 30% resist to debuffs</td></tr>
- +<tr><td>Only the mutant can score</td></tr>
- +<tr><td>Everyone else can kill mutant only</td></tr>
- +<tr><td>If 2 or more players get same score then a random player wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/stats/skills/9000-9099.xml
- ===================================================================
- --- data/stats/skills/9000-9099.xml (revision 1132)
- +++ data/stats/skills/9000-9099.xml (working copy)
- @@ -109,4 +109,20 @@
- <add order="0x10" stat="STR" val="#lvl"/>
- </for>
- </skill>
- + <skill id="9007" levels="1" name="Mutant">
- + <set name="target" val="TARGET_SELF" />
- + <set name="skillType" val="BUFF" />
- + <set name="operateType" val="OP_PASSIVE" />
- + <for>
- + <mul order="0x30" stat="pDef" val="5" />
- + <mul order="0x30" stat="mDef" val="5" />
- + <mul order="0x30" stat="mAtk" val="3" />
- + <mul order="0x30" stat="pAtk" val="3" />
- + <mul order="0x30" stat="mAtkSpd" val="2" />
- + <mul order="0x30" stat="pAtkSpd" val="2" />
- + <mul order="0x30" stat="rootVuln" val="0.7"/>
- + <mul order="0x30" stat="stunVuln" val="0.7"/>
- + <mul order="0x30" stat="paralyzeVuln" val="0.7"/>
- + </for>
- + </skill>
- </list>
- \ No newline at end of file
- Index: data/html/eventinfo/9.htm
- ===================================================================
- --- data/html/eventinfo/9.htm (nonexistent)
- +++ data/html/eventinfo/9.htm (working copy)
- @@ -0,0 +1,20 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Zombies<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>1 Random person turns into a zombie</td></tr>
- +<tr><td>zombie gets 2 medal for every "kill"</td></tr>
- +<tr><td>Last to stay human wins</td></tr>
- +<tr><td>Event reward: 2 apigas</td></tr>
- +<tr><td>Event duration: 4 minutes</td></tr>
- +<tr><td>Levels allowed: 40-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: None<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/8.htm
- ===================================================================
- --- data/html/eventinfo/8.htm (nonexistent)
- +++ data/html/eventinfo/8.htm (working copy)
- @@ -0,0 +1,22 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">VIP<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>The goal is to kill the enemy VIP</td></tr>
- +<tr><td>team get score for every VIP kill</td></tr>
- +<tr><td>If both teams has same score then a random team wins</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>team with most VIP kills wins</td></tr>
- +<tr><td>Reward per VIP kill: 3 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Self buff event</td></tr>
- +<tr><td>Ressurection time: 7 sec<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/eventinfo/14.htm
- ===================================================================
- --- data/html/eventinfo/14.htm (nonexistent)
- +++ data/html/eventinfo/14.htm (working copy)
- @@ -0,0 +1,23 @@
- +<html><body>
- +<table><tr><td><center><font color="FFFF00">Battlefield<br></font></center></td></tr>
- +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
- +<tr><td>All players get skill "Capture"</td></tr>
- +<tr><td>The goal is to capture as much bases as possible</td></tr>
- +<tr><td>For each base a team got they will get 1 point every second</td></tr>
- +<tr><td>Team with most score wins</td></tr>
- +<tr><td>If both teams got same score then a random team wins</td></tr>
- +<tr><td>Reward for every base capture: 2 medals</td></tr>
- +<tr><td>Event reward: 10 medals</td></tr>
- +<tr><td>Event duration: 5 minutes</td></tr>
- +<tr><td>Levels allowed: 70-80</td></tr>
- +<tr><td>Minimum players: 8</td></tr>
- +<tr><td>Full buff event</td></tr>
- +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
- +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
- +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
- +<tr><td>Dualboxing is not allowed during event</td></tr>
- +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
- +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
- +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
- +</table>
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/9103.htm
- ===================================================================
- --- data/html/default/9103.htm (nonexistent)
- +++ data/html/default/9103.htm (working copy)
- @@ -0,0 +1,7 @@
- +<html><body>
- +Instructions:<br>
- +Incase of Domination:<br>
- +The team must have more players near the Zone than the enemy in order to score.<br><br>
- +Incase of Double Domination:<br>
- +The team must have more players in both zones for 10 seconds than the enemy in order to score.
- +</body></html>
- \ No newline at end of file
Add Comment
Please, Sign In to add comment