Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P aCis_gameserver
- Index: java/net/sf/l2j/gameserver/model/actor/Player.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/Player.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/Player.java (working copy)
- @@ -124,6 +124,7 @@
- import net.sf.l2j.gameserver.model.craft.ManufactureList;
- import net.sf.l2j.gameserver.model.entity.Castle;
- import net.sf.l2j.gameserver.model.entity.Duel.DuelState;
- +import net.sf.l2j.gameserver.model.entity.events.impl.Event;
- import net.sf.l2j.gameserver.model.entity.Siege;
- import net.sf.l2j.gameserver.model.group.CommandChannel;
- import net.sf.l2j.gameserver.model.group.Party;
- @@ -356,6 +357,7 @@
- private boolean _isSitting;
- private final Location _savedLocation = new Location(0, 0, 0);
- + private Location _originalCoordinates;
- private int _recomHave;
- private int _recomLeft;
- @@ -457,6 +459,7 @@
- private final BlockList _blockList = new BlockList(this);
- private TeamType _team = TeamType.NONE;
- + private Event _event;
- private int _alliedVarkaKetra; // lvl of alliance with ketra orcs or varka silenos, used in quests and aggro checks [-5,-1] varka, 0 neutral, [1,5] ketra
- @@ -3505,39 +3508,54 @@
- {
- Player pk = killer.getActingPlayer();
- - // Clear resurrect xp calculation
- - setExpBeforeDeath(0);
- + if (pk != null)
- + {
- + // Player is in event and killed
- + Event event = pk.getEvent();
- + if (event != null && event.isStarted())
- + event.onKill(pk, this);
- + }
- - if (isCursedWeaponEquipped())
- - CursedWeaponManager.getInstance().drop(_cursedWeaponEquippedId, killer);
- + // Player is in event and died
- + Event event = getEvent();
- + if (event != null && event.isStarted())
- + event.onDie(this);
- else
- {
- - if (pk == null || !pk.isCursedWeaponEquipped())
- + // Clear resurrect xp calculation
- + setExpBeforeDeath(0);
- +
- + if (isCursedWeaponEquipped())
- + CursedWeaponManager.getInstance().drop(_cursedWeaponEquippedId, killer);
- + else
- {
- - onDieDropItem(killer); // Check if any item should be dropped
- -
- - // if the area isn't an arena
- - if (!isInArena())
- + if (pk == null || !pk.isCursedWeaponEquipped())
- {
- - // if both victim and attacker got clans & aren't academicians
- - if (pk != null && pk.getClan() != null && getClan() != null && !isAcademyMember() && !pk.isAcademyMember())
- + onDieDropItem(killer); // Check if any item should be dropped
- +
- + // if the area isn't an arena
- + if (!isInArena())
- {
- - // if clans got mutual war, then use the reputation calcul
- - if (_clan.isAtWarWith(pk.getClanId()) && pk.getClan().isAtWarWith(_clan.getClanId()))
- + // if both victim and attacker got clans & aren't academicians
- + if (pk != null && pk.getClan() != null && getClan() != null && !isAcademyMember() && !pk.isAcademyMember())
- {
- - // when your reputation score is 0 or below, the other clan cannot acquire any reputation points
- - if (getClan().getReputationScore() > 0)
- - pk.getClan().addReputationScore(1);
- - // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease
- - if (pk.getClan().getReputationScore() > 0)
- - _clan.takeReputationScore(1);
- + // if clans got mutual war, then use the reputation calcul
- + if (_clan.isAtWarWith(pk.getClanId()) && pk.getClan().isAtWarWith(_clan.getClanId()))
- + {
- + // when your reputation score is 0 or below, the other clan cannot acquire any reputation points
- + if (getClan().getReputationScore() > 0)
- + pk.getClan().addReputationScore(1);
- + // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease
- + if (pk.getClan().getReputationScore() > 0)
- + _clan.takeReputationScore(1);
- + }
- }
- }
- +
- + // Reduce player's xp and karma.
- + if (Config.ALT_GAME_DELEVEL && (!hasSkill(L2Skill.SKILL_LUCKY) || getStat().getLevel() > 9))
- + deathPenalty(pk != null && getClan() != null && pk.getClan() != null && (getClan().isAtWarWith(pk.getClanId()) || pk.getClan().isAtWarWith(getClanId())), pk != null, killer instanceof SiegeGuard);
- }
- -
- - // Reduce player's xp and karma.
- - if (Config.ALT_GAME_DELEVEL && (!hasSkill(L2Skill.SKILL_LUCKY) || getStat().getLevel() > 9))
- - deathPenalty(pk != null && getClan() != null && pk.getClan() != null && (getClan().isAtWarWith(pk.getClanId()) || pk.getClan().isAtWarWith(getClanId())), pk != null, killer instanceof SiegeGuard);
- }
- }
- }
- @@ -4597,6 +4615,12 @@
- return false;
- }
- + if (getEvent() != null)
- + {
- + sendMessage("Cannot mount while in event.");
- + return false;
- + }
- +
- if (!MathUtil.checkIfInRange(200, this, summon, true))
- {
- sendPacket(SystemMessageId.TOO_FAR_AWAY_FROM_STRIDER_TO_MOUNT);
- @@ -7136,6 +7172,16 @@
- return !_isInOlympiadMode && !_savedLocation.equals(Location.DUMMY_LOC);
- }
- + public Location getOriginalCoordinates()
- + {
- + return _originalCoordinates;
- + }
- +
- + public void setOriginalCoordinates(Location originalCoordinates)
- + {
- + _originalCoordinates = originalCoordinates;
- + }
- +
- public int getTeleMode()
- {
- return _teleMode;
- @@ -7387,6 +7433,17 @@
- return _lvlJoinedAcademy > 0;
- }
- + @Override
- + public Event getEvent()
- + {
- + return _event;
- + }
- +
- + public void setEvent(Event event)
- + {
- + _event = event;
- + }
- +
- public void setTeam(TeamType team)
- {
- _team = team;
- @@ -8137,11 +8200,16 @@
- GameTimeTaskManager.getInstance().remove(this);
- ShadowItemTaskManager.getInstance().remove(this);
- + // Player is in event
- + Event event = getEvent();
- + if (event != null)
- + event.removePlayer(this);
- +
- // Cancel the cast of eventual fusion skill users on this target.
- for (Creature character : getKnownType(Creature.class))
- if (character.getFusionSkill() != null && character.getFusionSkill().getTarget() == this)
- character.abortCast();
- -
- +
- // Stop signets & toggles effects.
- for (L2Effect effect : getAllEffects())
- {
- Index: java/net/sf/l2j/gameserver/model/actor/instance/SchemeBuffer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/SchemeBuffer.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/SchemeBuffer.java (working copy)
- @@ -31,7 +31,13 @@
- {
- StringTokenizer st = new StringTokenizer(command, " ");
- String currentCommand = st.nextToken();
- -
- +
- + if (player.getEvent() != null)
- + {
- + player.sendMessage("Cheater wait for the event to buff you.");
- + return;
- + }
- +
- if (currentCommand.startsWith("menu"))
- {
- final NpcHtmlMessage html = new NpcHtmlMessage(0);
- Index: java/net/sf/l2j/gameserver/model/actor/instance/WeddingManagerNpc.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/WeddingManagerNpc.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/WeddingManagerNpc.java (working copy)
- @@ -13,6 +13,7 @@
- import net.sf.l2j.gameserver.model.actor.Npc;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- import net.sf.l2j.gameserver.network.serverpackets.ConfirmDlg;
- import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
- @@ -120,7 +121,8 @@
- }
- // Simple checks to avoid exploits
- - if (partner.isInJail() || partner.isInOlympiadMode() || partner.isInDuel() || partner.isFestivalParticipant() || (partner.isInParty() && partner.getParty().isInDimensionalRift()) || partner.isInObserverMode())
- + Event event = partner.getEvent();
- + if (event != null && event.isStarted() || partner.isInJail() || partner.isInOlympiadMode() || partner.isInDuel() || partner.isFestivalParticipant() || (partner.isInParty() && partner.getParty().isInDimensionalRift()) || partner.isInObserverMode())
- {
- player.sendMessage("Due to the current partner's status, the teleportation failed.");
- return;
- Index: java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java (working copy)
- @@ -14,6 +14,7 @@
- import net.sf.l2j.gameserver.model.actor.instance.ChristmasTree;
- import net.sf.l2j.gameserver.model.actor.instance.Pet;
- import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- import net.sf.l2j.gameserver.model.spawn.L2Spawn;
- @@ -45,6 +46,13 @@
- if (player.isAllSkillsDisabled() || player.isCastingNow())
- return;
- + Event event = player.getEvent();
- + if (event != null && event.isStarted())
- + {
- + player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
- + return;
- + }
- +
- final IntIntHolder sitem = SummonItemData.getInstance().getSummonItem(item.getItemId());
- if ((player.getSummon() != null || player.isMounted()) && sitem.getValue() > 0)
- Index: java/net/sf/l2j/gameserver/model/entity/event/TvTEvent.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/entity/event/TvTEvent.java (revision 0)
- +++ java/net/sf/l2j/gameserver/model/entity/event/TvTEvent.java (working copy)
- @@ -0,0 +1,657 @@
- +package net.sf.l2j.gameserver.model.entity.event;
- +
- +import java.util.List;
- +import java.util.concurrent.CopyOnWriteArrayList;
- +import java.util.concurrent.ScheduledFuture;
- +import java.util.logging.Logger;
- +
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- +import net.sf.l2j.commons.random.Rnd;
- +
- +import net.sf.l2j.Config;
- +import net.sf.l2j.gameserver.data.sql.SpawnTable;
- +import net.sf.l2j.gameserver.data.xml.DoorData;
- +import net.sf.l2j.gameserver.data.xml.MapRegionData;
- +import net.sf.l2j.gameserver.data.xml.NpcData;
- +import net.sf.l2j.gameserver.enums.EventState;
- +import net.sf.l2j.gameserver.enums.MessageType;
- +import net.sf.l2j.gameserver.enums.TeamType;
- +import net.sf.l2j.gameserver.model.World;
- +import net.sf.l2j.gameserver.model.actor.Creature;
- +import net.sf.l2j.gameserver.model.actor.Npc;
- +import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.actor.Summon;
- +import net.sf.l2j.gameserver.model.actor.instance.Door;
- +import net.sf.l2j.gameserver.model.actor.instance.Pet;
- +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import net.sf.l2j.gameserver.model.entity.Duel.DuelState;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- +import net.sf.l2j.gameserver.model.group.Party;
- +import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- +import net.sf.l2j.gameserver.model.location.Location;
- +import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
- +import net.sf.l2j.gameserver.model.spawn.L2Spawn;
- +import net.sf.l2j.gameserver.network.serverpackets.ChangeWaitType;
- +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
- +import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
- +
- +/**
- + * @author DnR
- + */
- +public class TvTEvent extends Event
- +{
- + protected static Logger _log = Logger.getLogger(TvTEvent.class.getName());
- +
- + // TvT related lists
- + private List<Player> _registered = new CopyOnWriteArrayList<>();
- + private List<Player> _blueTeam = new CopyOnWriteArrayList<>();
- + private List<Player> _redTeam = new CopyOnWriteArrayList<>();
- +
- + private Npc _npcManager;
- +
- + public ScheduledFuture<?> _registrationTask = null;
- +
- + /**
- + * Loads all configuration settings and started event if needed.
- + */
- + private TvTEvent()
- + {
- + // Event has already started, so do not reload anything
- + if (_state == EventState.STARTED)
- + return;
- +
- + // Clean up
- + _registered.clear();
- + _redTeam.clear();
- + _blueTeam.clear();
- +
- + if (Config.TVT_ENABLE)
- + {
- + _log.info("TvT Event: Initialized Event");
- +
- + if (_state == EventState.INITIAL || _state == EventState.SCHEDULED_NEXT)
- + {
- + _state = EventState.INITIAL;
- + scheduleRegistration();
- + }
- + }
- + }
- +
- + /**
- + * Schedules event registration.
- + */
- + private void scheduleRegistration()
- + {
- + // If registration task is currently running, cancel it now
- + if (_registrationTask != null)
- + {
- + _registrationTask.cancel(false);
- + _registrationTask = null;
- + }
- +
- + // Delete registration NPC if spawned
- + if (_npcManager != null)
- + {
- + if (_npcManager.isVisible())
- + _npcManager.deleteMe();
- + }
- +
- + // Start task
- + if (Config.TVT_ENABLE)
- + {
- + if (_state != EventState.SCHEDULED_NEXT)
- + {
- + // Set state
- + _state = EventState.SCHEDULED_NEXT;
- +
- + World.announceToOnlinePlayers("TvT Event: Next event in " + (Config.EVENT_DELAY / 60) + " minute(s)", true);
- + _log.info("TvT Event: Next event in " + (Config.EVENT_DELAY / 60) + " minute(s)");
- + _registrationTask = ThreadPool.schedule(new RegistrationTask(), Config.EVENT_DELAY * 1000L);
- + }
- + }
- + }
- +
- + /**
- + * Starts event cycle.
- + */
- + protected void scheduleEvent()
- + {
- + // Set state
- + _state = EventState.REGISTER;
- +
- + // Spawn TvT manager NPC
- + try
- + {
- + final NpcTemplate template = NpcData.getInstance().getTemplate(Config.TVT_NPC_ID);
- + final L2Spawn spawn = new L2Spawn(template);
- + spawn.setLoc(Config.TVT_NPC_LOCATION.getX(), Config.TVT_NPC_LOCATION.getY(), Config.TVT_NPC_LOCATION.getZ(), 0);
- + spawn.setRespawnDelay(60000);
- + spawn.setRespawnState(false);
- +
- + SpawnTable.getInstance().addSpawn(spawn, false);
- +
- + _npcManager = spawn.doSpawn(false);
- + _npcManager.broadcastPacket(new MagicSkillUse(_npcManager, _npcManager, 1034, 1, 1, 1));
- + }
- + catch (Exception e)
- + {
- + return;
- + }
- +
- + World.announceToOnlinePlayers("TvT Event: Registration opened for " + (Config.PARTICIPATION_TIME / 60) + " minute(s).", true);
- + World.announceToOnlinePlayers("TvT Event: Recruiting levels: " + Config.MIN_LEVEL + " to " + Config.MAX_LEVEL + ".", true);
- + World.announceToOnlinePlayers("TvT Event: Max players in team: "+ Config.MAX_PARTICIOANTS +".", true);
- + World.announceToOnlinePlayers("TvT Event: Commands /register /unregister.", true);
- +
- + for (IntIntHolder reward: Config.TVT_REWARDS)
- + World.announceToOnlinePlayers("TvT Event: Reward "+reward.getId() +","+reward.getValue(), true);
- +
- + // Start timer
- + eventTimer(Config.PARTICIPATION_TIME);
- +
- + if ((_registered.size() >= Config.MIN_PARTICIOANTS) && (_state != EventState.INITIAL))
- + {
- + // Close doors
- + toggleArenaDoors(false);
- +
- + // Port players and start event
- + World.announceToOnlinePlayers("TvT Event: Event has started!", true);
- + portTeamsToArena();
- + eventTimer(Config.EVENT_DURATION);
- +
- + if (_state == EventState.INITIAL)
- + World.announceToOnlinePlayers("TvT Event: Event was cancelled.", true);
- + else
- + World.announceToOnlinePlayers("TvT Event: Blue Team kills: " + _blueTeamKills + " , Red Team kills: " + _redTeamKills + ".", true);
- +
- + // Shutting down event
- + eventRemovals();
- + }
- + else
- + {
- + if (_state == EventState.INITIAL)
- + World.announceToOnlinePlayers("TvT Event: Event was cancelled.", true);
- + else
- + World.announceToOnlinePlayers("TvT Event: Event was cancelled due to lack of participation.", true);
- +
- + _registered.clear();
- + }
- +
- + // Open doors
- + toggleArenaDoors(true);
- +
- + _state = EventState.INITIAL;
- +
- + // Schedule next registration
- + scheduleRegistration();
- + }
- +
- + /**
- + * Handles arena doors open state.
- + * @param open
- + */
- + private static void toggleArenaDoors(boolean open)
- + {
- + for (int doorId : Config.TVT_DOOR_IDS)
- + {
- + final Door door = DoorData.getInstance().getDoor(doorId);
- + if (door != null)
- + {
- + if (open)
- + door.openMe();
- + else
- + door.closeMe();
- + }
- + }
- + }
- +
- + /**
- + * Cleans up and finishes event.
- + */
- + private void eventRemovals()
- + {
- + // Blue team
- + for (Player blue : _blueTeam)
- + {
- + if (blue == null)
- + continue;
- +
- + // Give rewards
- + if (_state != EventState.INITIAL && (_blueTeamKills > _redTeamKills || _blueTeamKills == _redTeamKills && Config.REWARD_DIE))
- + {
- + for (IntIntHolder reward : Config.TVT_REWARDS)
- + {
- + if (reward == null)
- + continue;
- +
- + blue.addItem("TvTReward", reward.getId(), reward.getValue(), null, true);
- + }
- + }
- +
- + if (blue.isDead())
- + blue.doRevive();
- +
- + removePlayer(blue);
- + blue.teleToLocation(blue.getOriginalCoordinates());
- + }
- +
- + // Red team
- + for (Player red : _redTeam)
- + {
- + if (red == null)
- + continue;
- +
- + // Give rewards
- + if (_state != EventState.INITIAL && (_blueTeamKills < _redTeamKills || _blueTeamKills == _redTeamKills && Config.REWARD_DIE))
- + {
- + for (IntIntHolder reward : Config.TVT_REWARDS)
- + {
- + if (reward == null)
- + continue;
- +
- + red.addItem("TvTReward", reward.getId(), reward.getValue(), null, true);
- + }
- + }
- +
- + if (red.isDead())
- + red.doRevive();
- +
- + removePlayer(red);
- + red.teleToLocation(red.getOriginalCoordinates());
- + }
- +
- + // Event ended in a tie and no rewards will be given
- + if (_blueTeamKills == _redTeamKills && !Config.REWARD_DIE)
- + World.announceToOnlinePlayers("TvT Event: Event ended in a Tie. No rewards will be given!", true);
- +
- + _blueTeam.clear();
- + _redTeam.clear();
- + _blueTeamKills = 0;
- + _redTeamKills = 0;
- + }
- +
- + /**
- + * Event timer.
- + *
- + * @param time
- + */
- + private void eventTimer(int time)
- + {
- + for (int seconds = time; (seconds > 0 && _state != EventState.INITIAL); seconds--)
- + {
- + switch (seconds)
- + {
- + case 3600:
- + if (_state == EventState.STARTED)
- + World.announceToOnlinePlayers("TvT Event: " + (seconds / 60) + " hour(s) until event is finished!", true);
- + else
- + World.announceToOnlinePlayers("TvT Event: " + (seconds / 60) + " hour(s) until registration is closed!", true);
- + break;
- +
- + case 1800: // 30 minutes left
- + case 900: // 15 minutes left
- + case 600: // 10 minutes left
- + case 300: // 5 minutes left
- + case 240: // 4 minutes left
- + case 180: // 3 minutes left
- + case 120: // 2 minutes left
- + case 60: // 1 minute left
- + if (_state == EventState.STARTED)
- + World.announceToOnlinePlayers("TvT Event: " + (seconds / 60) + " minute(s) until event is finished!", true);
- + else
- + World.announceToOnlinePlayers("TvT Event: " + (seconds / 60) + " minute(s) until registration is closed!", true);
- + break;
- + case 30: // 30 seconds left
- + case 15: // 15 seconds left
- + case 5:// 5 seconds left
- + if (_state == EventState.STARTED)
- + World.announceToOnlinePlayers("TvT Event: " + seconds + " second(s) until event is finished!", true);
- + else
- + World.announceToOnlinePlayers("TvT Event: " + seconds + " second(s) until registration is closed!", true);
- + break;
- + }
- +
- + long oneSecWaitStart = System.currentTimeMillis();
- + while ((oneSecWaitStart + 1000L) > System.currentTimeMillis())
- + {
- + try
- + {
- + Thread.sleep(1);
- + }
- + catch (InterruptedException ie)
- + {
- + }
- + }
- + }
- + }
- +
- + /**
- + * Ports teams to arena.
- + */
- + private void portTeamsToArena()
- + {
- + while (_registered.size() > 0)
- + {
- + Player player = _registered.get(Rnd.get(_registered.size()));
- +
- + // First create 2 event teams
- + if (_blueTeam.size() > _redTeam.size())
- + {
- + _redTeam.add(player);
- + player.setTeam(TeamType.RED);
- + }
- + else
- + {
- + _blueTeam.add(player);
- + player.setTeam(TeamType.BLUE);
- + }
- +
- + // Abort casting if player casting
- + if (player.isCastingNow())
- + player.abortCast();
- +
- + player.getAppearance().setVisible();
- +
- + if (player.isDead())
- + player.doRevive();
- + else
- + {
- + player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
- + player.setCurrentCp(player.getMaxCp());
- + }
- +
- + // Remove Buffs
- + player.stopAllEffectsExceptThoseThatLastThroughDeath();
- +
- + // stop any cubic that has been given by other player.
- + player.stopCubicsByOthers();
- +
- + // Dismount player, if mounted.
- + if (player.isMounted())
- + player.dismount();
- + // Test summon existence, if any.
- + else
- + {
- + final Summon summon = player.getSummon();
- +
- + // Unsummon pets directly.
- + if (summon instanceof Pet)
- + summon.unSummon(player);
- + // Remove servitor buffs and cancel animations.
- + else if (summon != null)
- + {
- + summon.stopAllEffectsExceptThoseThatLastThroughDeath();
- + summon.abortAttack();
- + summon.abortCast();
- + }
- + }
- +
- + // Remove player from his party
- + if (player.getParty() != null)
- + {
- + Party party = player.getParty();
- + party.removePartyMember(player, MessageType.EXPELLED);
- + }
- +
- + // Remove Duel State
- + if (player.isInDuel())
- + player.setDuelState(DuelState.INTERRUPTED);
- +
- + Location playerCoordinates = new Location(player.getPosition());
- + player.setOriginalCoordinates(playerCoordinates);
- + player.sendMessage("You have been teleported.");
- +
- + _registered.remove(player);
- + }
- +
- + _state = EventState.STARTED;
- +
- + // Port teams
- + for (Player blue : _blueTeam)
- + {
- + if (blue == null)
- + continue;
- +
- + blue.teleToLocation(Config.TVT_BLUE_SPAWN_LOCATION);
- + }
- +
- + for (Player red : _redTeam)
- + {
- + if (red == null)
- + continue;
- +
- + red.teleToLocation(Config.TVT_RED_SPAWN_LOCATION);
- + }
- + }
- +
- + /**
- + * Registers player to event.
- + *
- + * @param player
- + */
- + @Override
- + public void registerPlayer(Player player)
- + {
- + if (_state != EventState.REGISTER)
- + {
- + player.sendMessage("TvT Registration is not in progress.");
- + return;
- + }
- +
- + if (player.isFestivalParticipant())
- + {
- + player.sendMessage("Festival participants cannot register to the event.");
- + return;
- + }
- +
- + if (player.isInJail())
- + {
- + player.sendMessage("Jailed players cannot register to the event.");
- + return;
- + }
- +
- + if (player.isDead())
- + {
- + player.sendMessage("Dead players cannot register to the event.");
- + return;
- + }
- +
- + if (OlympiadManager.getInstance().isRegisteredInComp(player))
- + {
- + player.sendMessage("Grand Olympiad participants cannot register to the event.");
- + return;
- + }
- +
- + if ((player.getLevel() < Config.MIN_LEVEL) || (player.getLevel() > Config.MAX_LEVEL))
- + {
- + player.sendMessage("You have not reached the appropriate level to join the event.");
- + return;
- + }
- +
- + if (_registered.size() == Config.MAX_PARTICIOANTS)
- + {
- + player.sendMessage("There is no more room for you to register to the event.");
- + return;
- + }
- +
- + for (Player registered : _registered)
- + {
- + if (registered == null)
- + continue;
- +
- + if (registered.getObjectId() == player.getObjectId())
- + {
- + player.sendMessage("You are already registered in the TvT event.");
- + return;
- + }
- +
- + // Check if dual boxing is not allowed
- + if (!Config.DUAL_BOX)
- + {
- + if ((registered.getClient() == null) || (player.getClient() == null))
- + continue;
- +
- + String ip1 = player.getClient().getConnection().getInetAddress().getHostAddress();
- + String ip2 = registered.getClient().getConnection().getInetAddress().getHostAddress();
- + if ((ip1 != null) && (ip2 != null) && ip1.equals(ip2))
- + {
- + player.sendMessage("Your IP is already registered in the TvT event.");
- + return;
- + }
- + }
- + }
- +
- + _registered.add(player);
- +
- + player.sendMessage("You have registered to participate in the TvT Event.");
- +
- + super.registerPlayer(player);
- + }
- +
- + /**
- + * Removes player from event.
- + *
- + * @param player
- + */
- + @Override
- + public void removePlayer(Player player)
- + {
- + if (_registered.contains(player))
- + {
- + _registered.remove(player);
- + player.sendMessage("You have been removed from the TvT Event registration list.");
- + }
- + else if (player.getTeam() == TeamType.BLUE)
- + _blueTeam.remove(player);
- + else if (player.getTeam() == TeamType.RED)
- + _redTeam.remove(player);
- +
- + // If no participants left, abort event
- + if ((player.getTeam().getId() > 0) && (_blueTeam.size() == 0) && (_redTeam.size() == 0))
- + _state = EventState.INITIAL;
- +
- + // Now, remove team status
- + player.setTeam(TeamType.NONE);
- +
- + super.removePlayer(player);
- + }
- +
- + @Override
- + public boolean isRegistered(Player player)
- + {
- + return _registered.contains(player);
- + }
- +
- + public List<Player> getBlueTeam()
- + {
- + return _blueTeam;
- + }
- +
- + public List<Player> getRedTeam()
- + {
- + return _redTeam;
- + }
- +
- + public List<Player> getRegistered()
- + {
- + return _registered;
- + }
- +
- + class RegistrationTask implements Runnable
- + {
- + public RegistrationTask()
- + {
- + }
- +
- + @Override
- + public void run()
- + {
- + if (Config.TVT_ENABLE)
- + scheduleEvent();
- + else
- + _state = EventState.INITIAL; // Default state
- + }
- + }
- +
- + @Override
- + public void onDie(Creature creature)
- + {
- + if (creature == null)
- + return;
- +
- + if (creature instanceof Player)
- + {
- + final Player player = ((Player) creature);
- +
- + player.broadcastPacket(new ChangeWaitType(player, ChangeWaitType.WT_START_FAKEDEATH));
- +
- + player.sendMessage("You will be respawned in " + Config.PLAYER_RESPAWN_DELAY + " seconds.");
- + ThreadPool.schedule(new Runnable()
- + {
- + @Override
- + public void run()
- + {
- + if (!player.isDead())
- + return;
- +
- + player.doRevive();
- +
- + if (player.getTeam() == TeamType.BLUE)
- + player.teleToLocation(Config.TVT_BLUE_SPAWN_LOCATION);
- + else if (player.getTeam() == TeamType.RED)
- + player.teleToLocation(Config.TVT_RED_SPAWN_LOCATION);
- + // Player has probably left event for some reason
- + else
- + player.teleportTo(MapRegionData.TeleportType.TOWN);
- + }
- + }, Config.PLAYER_RESPAWN_DELAY * 1000L);
- + }
- + }
- +
- + @Override
- + public void onKill(Player player, Player target)
- + {
- + if (player == null || target == null)
- + return;
- +
- + // Increase kills only if victim belonged to enemy team
- + if (player.getTeam() == TeamType.BLUE && target.getTeam() == TeamType.RED)
- + _blueTeamKills++;
- + else if (player.getTeam() == TeamType.RED && target.getTeam() == TeamType.BLUE)
- + _redTeamKills++;
- +
- + player.sendPacket(new PlaySound(0, "ItemSound.quest_itemget"));
- + player.broadcastTitleInfo();
- + player.broadcastUserInfo();
- + }
- +
- + @Override
- + public void onRevive(Creature creature)
- + {
- + if (creature == null)
- + return;
- +
- + // Heal Player fully
- + creature.setCurrentHpMp(creature.getMaxHp(), creature.getMaxMp());
- + creature.setCurrentCp(creature.getMaxCp());
- +
- + ChangeWaitType revive = new ChangeWaitType(creature, ChangeWaitType.WT_STOP_FAKEDEATH);
- + creature.broadcastPacket(revive);
- + }
- +
- + @Override
- + public boolean canTarget(Player player, Player target)
- + {
- + return true;
- + }
- +
- + public static final TvTEvent getInstance()
- + {
- + return SingletonHolder.INSTANCE;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final TvTEvent INSTANCE = new TvTEvent();
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/model/actor/Creature.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/Creature.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/Creature.java (working copy)
- @@ -50,6 +50,7 @@
- import net.sf.l2j.gameserver.model.actor.stat.CreatureStat;
- import net.sf.l2j.gameserver.model.actor.status.CreatureStatus;
- import net.sf.l2j.gameserver.model.actor.template.CreatureTemplate;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.group.Party;
- import net.sf.l2j.gameserver.model.holder.SkillUseHolder;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- @@ -372,6 +373,12 @@
- {
- // default implementation
- }
- +
- + public Event getEvent()
- + {
- + // Overridden in Player
- + return null;
- + }
- /**
- * Instantly teleport this {@link Creature} to defined coordinates X/Y/Z.<br>
- @@ -1469,6 +1476,10 @@
- setIsDead(true);
- }
- +
- + Event event = getEvent();
- + if (event != null && event.isStarted())
- + event.onDie(this);
- // Set target to null and cancel Attack or Cast
- setTarget(null);
- @@ -1488,7 +1499,7 @@
- // Notify Creature AI
- if (hasAI())
- getAI().notifyEvent(AiEventType.DEAD, null);
- -
- +
- return true;
- }
- @@ -1519,6 +1530,10 @@
- // Start broadcast status
- broadcastPacket(new Revive(this));
- +
- + Event event = getEvent();
- + if (event != null && event.isStarted())
- + event.onRevive(this);
- }
- /**
- Index: java/net/sf/l2j/gameserver/data/manager/DimensionalRiftManager.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/data/manager/DimensionalRiftManager.java (revision 1)
- +++ java/net/sf/l2j/gameserver/data/manager/DimensionalRiftManager.java (working copy)
- @@ -175,7 +175,13 @@
- showHtmlFile(player, "data/html/seven_signs/rift/NoParty.htm", npc);
- return;
- }
- -
- +
- + if (player.getEvent() != null)
- + {
- + player.sendMessage("Somebody among the party members has registered to participate in an event.");
- + return;
- + }
- +
- // Player isn't the party leader.
- if (!party.isLeader(player))
- {
- Index: java/net/sf/l2j/gameserver/model/actor/Playable.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/Playable.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/Playable.java (working copy)
- @@ -13,6 +13,7 @@
- import net.sf.l2j.gameserver.model.actor.stat.PlayableStat;
- import net.sf.l2j.gameserver.model.actor.status.PlayableStatus;
- import net.sf.l2j.gameserver.model.actor.template.CreatureTemplate;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- import net.sf.l2j.gameserver.network.serverpackets.Revive;
- @@ -132,6 +133,10 @@
- // Notify Creature AI
- getAI().notifyEvent(AiEventType.DEAD);
- +
- + Event event = getEvent();
- + if (event != null && event.isStarted())
- + event.onDie(this);
- // Notify Quest of L2Playable's death
- final Player actingPlayer = getActingPlayer();
- @@ -141,7 +146,7 @@
- if (killer != null)
- {
- final Player player = killer.getActingPlayer();
- - if (player != null)
- + if (player != null && (player.getEvent() == null || !player.getEvent().isStarted()))
- player.onKillUpdatePvPKarma(this);
- }
- @@ -168,6 +173,10 @@
- // Start broadcast status
- broadcastPacket(new Revive(this));
- +
- + Event event = getEvent();
- + if (event != null && event.isStarted())
- + event.onRevive(this);
- }
- public boolean checkIfPvP(Playable target)
- Index: java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (working copy)
- @@ -7,6 +7,7 @@
- import net.sf.l2j.gameserver.enums.skills.AbnormalEffect;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.Summon;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
- public class UserInfo extends L2GameServerPacket
- @@ -171,8 +172,13 @@
- writeD(_player.getAppearance().getFace());
- writeD((_player.isGM()) ? 1 : 0);
- - writeS((_player.getPolyType() != PolyType.DEFAULT) ? "Morphed" : _player.getTitle());
- + String name = ((_player.getPolyType() != PolyType.DEFAULT) ? "Morphed" : _player.getTitle());
- +
- + Event event = _player.getEvent();
- + if (event != null && event.isStarted())
- + name = ((_player.getTeam() == TeamType.BLUE) ? "Kills: " + _player.getEvent().getBlueTeamKills() : (_player.getTeam() == TeamType.RED) ? "Kills: " + _player.getEvent().getRedTeamKills() : _player.getTitle());
- + writeS(name);
- writeD(_player.getClanId());
- writeD(_player.getClanCrestId());
- writeD(_player.getAllyId());
- @@ -207,11 +213,21 @@
- writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA)) ? 1 : 0);
- writeC((_player.isFishing()) ? 1 : 0);
- writeLoc(_player.getFishingStance().getLoc());
- - writeD(_player.getAppearance().getNameColor());
- +
- + int Namecolor = (_player.getAppearance().getNameColor());
- + if (event != null && event.isStarted())
- + Namecolor = (_player.getTeam() == TeamType.BLUE ? Integer.decode("0xDF0101") : _player.getTeam() == TeamType.RED ? Integer.decode("0x0000FF") : _player.getAppearance().getNameColor());
- +
- + writeD(Namecolor);
- writeC((_player.isRunning()) ? 0x01 : 0x00);
- writeD(_player.getPledgeClass());
- writeD(_player.getPledgeType());
- - writeD(_player.getAppearance().getTitleColor());
- +
- + int Titlecolor = (_player.getAppearance().getTitleColor());
- + if (event != null && event.isStarted())
- + Titlecolor = (_player.getTeam() == TeamType.BLUE ? Integer.decode("0xDF0101") : _player.getTeam() == TeamType.RED ? Integer.decode("0x0000FF") : _player.getAppearance().getTitleColor());
- +
- + writeD(Titlecolor);
- writeD(CursedWeaponManager.getInstance().getCurrentStage(_player.getCursedWeaponEquippedId()));
- }
- }
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/enums/EventState.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/enums/EventState.java (revision 0)
- +++ java/net/sf/l2j/gameserver/enums/EventState.java (working copy)
- @@ -0,0 +1,13 @@
- +package net.sf.l2j.gameserver.enums;
- +
- +/**
- + * @author Williams
- + *
- + */
- +public enum EventState
- +{
- + INITIAL,
- + REGISTER,
- + SCHEDULED_NEXT,
- + STARTED
- +}
- \ No newline at end of file
- Index: config/events.properties
- ===================================================================
- --- config/events.properties (revision 1)
- +++ config/events.properties (working copy)
- @@ -1,4 +1,64 @@
- #=============================================================
- +# TvT Event
- +#=============================================================
- +# Enable TvT Event
- +TvTEventEnable = True
- +
- +# TvT Event maximum participants
- +TvTMaxParticipants = 40
- +
- +# TvT Event minimum participants
- +TvTMinParticipants = 2
- +
- +# TvT Event minimum level
- +TvTEventMinLevel = 60
- +
- +# TvT Event maximum level
- +TvTEventMaxLevel = 80
- +
- +# Delay between TvT Events (in seconds)
- +# Default: 1 hours
- +TvTEventDelay = 120
- +
- +# TvT event registration NPC ID
- +# It can be anything since core changes npc type to L2TvTManager
- +TvTNpcManager = 50002
- +
- +# TvT registration NPC coords
- +TvTRegisterLocation = 83358,148879,-3405
- +
- +# TvT doors settings
- +TvTArenaDoors = 24190002;24190003
- +
- +# Time that TvT registration is open (in seconds)
- +# Default: 5 minutes
- +TvTEventParticipationTime = 120
- +
- +# Time that TvT event lasts (in seconds)
- +# Default: 5 minutes
- +TvTEventDuration = 120
- +
- +# TvT event blue team spawn coords
- +TvTBlueTeamLocation = 148476,46061,-3411
- +
- +# TvT event red team spawn coords
- +TvTRedTeamLocation = 150480,47444,-3411
- +
- +# TvT player respawn delay upon death (in seconds)
- +# Default: 10 seconds
- +TvTPlayerRespawnDelay = 10
- +
- +# TvT dual box protection
- +TvTAllowDualBoxing = True
- +
- +# TvT Event reward list
- +# Format: itemId1-itemNum1;itemId2-itemNum2...
- +TvTEventRewardList = 57-1000000;6393-50;5592-20
- +
- +# Give rewards to both teams on tie
- +TvTGiveRewardsOnTie = False
- +
- +#=============================================================
- # Olympiad
- #=============================================================
- # Olympiad start time hour, default 18 (6PM).
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java (working copy)
- @@ -3,6 +3,7 @@
- import net.sf.l2j.gameserver.data.manager.FestivalOfDarknessManager;
- import net.sf.l2j.gameserver.enums.ZoneId;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.GameClient;
- import net.sf.l2j.gameserver.network.GameClient.GameClientState;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- @@ -23,7 +24,15 @@
- final Player player = getClient().getPlayer();
- if (player == null)
- return;
- -
- +
- + Event event = player.getEvent();
- + if (event != null && event.isStarted())
- + {
- + player.sendMessage("You cannot restart while in event.");
- + sendPacket(RestartResponse.valueOf(false));
- + return;
- + }
- +
- if (player.getActiveEnchantItem() != null || player.isLocked() || player.isInStoreMode())
- {
- sendPacket(RestartResponse.valueOf(false));
- Index: java/net/sf/l2j/gameserver/network/serverpackets/Die.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/serverpackets/Die.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/serverpackets/Die.java (working copy)
- @@ -6,6 +6,7 @@
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.instance.Monster;
- import net.sf.l2j.gameserver.model.entity.Siege;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.pledge.Clan;
- public class Die extends L2GameServerPacket
- @@ -13,7 +14,7 @@
- private final Creature _activeChar;
- private final int _charObjId;
- private final boolean _fake;
- -
- + private boolean _inEvent;
- private boolean _sweepable;
- private boolean _allowFixedRes;
- private Clan _clan;
- @@ -29,7 +30,8 @@
- Player player = (Player) cha;
- _allowFixedRes = player.getAccessLevel().allowFixedRes();
- _clan = player.getClan();
- -
- + Event event = player.getEvent();
- + _inEvent = event != null && event.isStarted();
- }
- else if (cha instanceof Monster)
- _sweepable = ((Monster) cha).isSpoiled();
- @@ -38,7 +40,7 @@
- @Override
- protected final void writeImpl()
- {
- - if (_fake)
- + if (_fake || _inEvent)
- return;
- writeC(0x06);
- Index: java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (working copy)
- @@ -18,6 +18,7 @@
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditNpc;
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEffects;
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEnchant;
- +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEventEngine;
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminExpSp;
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGeoEngine;
- import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGm;
- @@ -68,6 +69,7 @@
- registerHandler(new AdminEditNpc());
- registerHandler(new AdminEffects());
- registerHandler(new AdminEnchant());
- + registerHandler(new AdminEventEngine());
- registerHandler(new AdminExpSp());
- registerHandler(new AdminGeoEngine());
- registerHandler(new AdminGm());
- Index: java/net/sf/l2j/gameserver/model/olympiad/OlympiadManager.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/olympiad/OlympiadManager.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/olympiad/OlympiadManager.java (working copy)
- @@ -11,6 +11,7 @@
- import net.sf.l2j.Config;
- import net.sf.l2j.gameserver.enums.OlympiadType;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
- @@ -130,7 +131,14 @@
- player.sendPacket(SystemMessageId.GAME_REQUEST_CANNOT_BE_MADE);
- return false;
- }
- -
- +
- + Event event = player.getEvent();
- + if (event != null && event.isStarted())
- + {
- + player.sendMessage("Event Participants cannot register to the Grand Olympiad Games.");
- + return false;
- + }
- +
- switch (type)
- {
- case CLASSED:
- Index: java/net/sf/l2j/gameserver/handler/usercommandhandlers/EventCommands.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/usercommandhandlers/EventCommands.java (revision 0)
- +++ java/net/sf/l2j/gameserver/handler/usercommandhandlers/EventCommands.java (working copy)
- @@ -0,0 +1,39 @@
- +package net.sf.l2j.gameserver.handler.usercommandhandlers;
- +
- +import net.sf.l2j.gameserver.handler.IUserCommandHandler;
- +import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.TvTEvent;
- +
- +/**
- + * @author Williams
- + *
- + */
- +public class EventCommands implements IUserCommandHandler
- +{
- + private static final int[] COMMAND_IDS =
- + {
- + 114, 115
- + };
- +
- + @Override
- + public boolean useUserCommand(int id, Player activeChar)
- + {
- + if (id == 114)
- + TvTEvent.getInstance().registerPlayer(activeChar);
- + else if (id == 115)
- + {
- + if (TvTEvent.getInstance().isRegistered(activeChar))
- + TvTEvent.getInstance().removePlayer(activeChar);
- + else
- + activeChar.sendMessage("You are not registered for the TvT Event.");
- + }
- +
- + return true;
- + }
- +
- + @Override
- + public int[] getUserCommandList()
- + {
- + return COMMAND_IDS;
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/Config.java
- ===================================================================
- --- java/net/sf/l2j/Config.java (revision 1)
- +++ java/net/sf/l2j/Config.java (working copy)
- @@ -17,6 +17,7 @@
- import net.sf.l2j.commons.math.MathUtil;
- import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- +import net.sf.l2j.gameserver.model.location.Location;
- /**
- * This class contains global server configuration.<br>
- @@ -117,6 +118,26 @@
- // Events settings
- // --------------------------------------------------
- + /** TvTEvent */
- + public static boolean TVT_ENABLE;
- + public static int MIN_PARTICIOANTS;
- + public static int MAX_PARTICIOANTS;
- + public static byte MIN_LEVEL;
- + public static byte MAX_LEVEL;
- + public static int EVENT_DELAY;
- + public static int PARTICIPATION_TIME;
- + public static int EVENT_DURATION;
- + public static int PLAYER_RESPAWN_DELAY;
- + public static boolean DUAL_BOX;
- + public static boolean REWARD_DIE;
- + public static Location TVT_BLUE_SPAWN_LOCATION;
- + public static Location TVT_RED_SPAWN_LOCATION;
- + public static Location TVT_NPC_LOCATION;
- + public static IntIntHolder[] TVT_REWARDS;
- + public static String TVT_DOOR_LIST;
- + public static int[] TVT_DOOR_IDS;
- + public static int TVT_NPC_ID;
- +
- /** Olympiad */
- public static int ALT_OLY_START_TIME;
- public static int ALT_OLY_MIN;
- @@ -738,6 +773,34 @@
- private static final void loadEvents()
- {
- final ExProperties events = initProperties(EVENTS_FILE);
- + TVT_ENABLE = events.getProperty("TvTEventEnable", false);
- + MIN_PARTICIOANTS = events.getProperty("TvTMinParticipants", 6);
- + MAX_PARTICIOANTS = events.getProperty("TvTMaxParticipants", 40);
- + MIN_LEVEL = (byte) events.getProperty("TvTEventMinLevel", 60);
- + MAX_LEVEL = (byte) events.getProperty("TvTEventMaxLevel", 78);
- + EVENT_DELAY = events.getProperty("TvTEventDelay", 18000);
- + PARTICIPATION_TIME = events.getProperty("TvTEventParticipationTime", 1200);
- + EVENT_DURATION = events.getProperty("TvTEventDuration", 1800);
- + PLAYER_RESPAWN_DELAY = events.getProperty("TvTPlayerRespawnDelay", 20);
- + DUAL_BOX = events.getProperty("TvTAllowDualBoxing", false);
- + REWARD_DIE = events.getProperty("TvTGiveRewardsOnTie", false);
- + TVT_BLUE_SPAWN_LOCATION = events.parseLocation("TvTBlueTeamLocation", "48476,46061,-3411");
- + TVT_RED_SPAWN_LOCATION = events.parseLocation("TvTRedTeamLocation", "150480,47444,-3411");
- + TVT_NPC_LOCATION = events.parseLocation("TvTRegisterLocation", "151808,46864,-3408");
- + TVT_REWARDS = events.parseIntIntList("TvTEventRewardList", "1-268");
- + TVT_NPC_ID = events.getProperty("TvTNpcManager", 18);
- + TVT_DOOR_LIST = events.getProperty("TvTArenaDoors", "24190002;24190003");
- +
- + String[] array = TVT_DOOR_LIST.split(";");
- +
- + TVT_DOOR_IDS = new int[array.length];
- +
- + for (int i = 0; i < array.length; i++)
- + TVT_DOOR_IDS[i] = Integer.parseInt(array[i]);
- +
- + // sorting so binarySearch can be used later
- + Arrays.sort(TVT_DOOR_IDS);
- +
- ALT_OLY_START_TIME = events.getProperty("AltOlyStartTime", 18);
- ALT_OLY_MIN = events.getProperty("AltOlyMin", 0);
- ALT_OLY_CPERIOD = events.getProperty("AltOlyCPeriod", 21600000);
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
- @@ -14,6 +14,7 @@
- import net.sf.l2j.gameserver.model.actor.Npc;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.instance.OlympiadManagerNpc;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
- import net.sf.l2j.gameserver.network.FloodProtectors;
- import net.sf.l2j.gameserver.network.FloodProtectors.Action;
- @@ -181,7 +182,14 @@
- player.sendPacket(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME);
- return;
- }
- -
- +
- + Event event = player.getEvent();
- + if (event != null && event.isStarted())
- + {
- + player.sendMessage("You can not observe games while registered for an event!");
- + return;
- + }
- +
- final int arenaId = Integer.parseInt(_command.substring(12).trim());
- player.enterOlympiadObserverMode(arenaId);
- }
- Index: java/net/sf/l2j/gameserver/model/actor/player/Punishment.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/player/Punishment.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/player/Punishment.java (working copy)
- @@ -8,6 +8,7 @@
- import net.sf.l2j.gameserver.enums.PunishmentType;
- import net.sf.l2j.gameserver.enums.ZoneId;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
- import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
- import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- @@ -129,7 +130,12 @@
- if (OlympiadManager.getInstance().isRegisteredInComp(_owner))
- OlympiadManager.getInstance().removeDisconnectedCompetitor(_owner);
- -
- +
- + // Remove participant of event
- + Event event = _owner.getEvent();
- + if (event != null)
- + event.removePlayer(_owner);
- +
- // Open a Html message to inform the player
- final NpcHtmlMessage html = new NpcHtmlMessage(0);
- html.setFile("data/html/jail_in.htm");
- Index: java/net/sf/l2j/gameserver/GameServer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/GameServer.java (revision 1)
- +++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
- @@ -84,6 +84,7 @@
- import net.sf.l2j.gameserver.model.boat.BoatInnadrilTour;
- import net.sf.l2j.gameserver.model.boat.BoatRunePrimeval;
- import net.sf.l2j.gameserver.model.boat.BoatTalkingGludin;
- +import net.sf.l2j.gameserver.model.entity.event.TvTEvent;
- import net.sf.l2j.gameserver.model.olympiad.Olympiad;
- import net.sf.l2j.gameserver.model.olympiad.OlympiadGameManager;
- import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoomList;
- @@ -260,6 +261,7 @@
- }
- StringUtil.printSection("Events");
- + TvTEvent.getInstance();
- DerbyTrackManager.getInstance();
- LotteryManager.getInstance();
- Index: java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (working copy)
- @@ -6,6 +6,7 @@
- import net.sf.l2j.gameserver.enums.skills.AbnormalEffect;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.Summon;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
- public class CharInfo extends L2GameServerPacket
- @@ -117,8 +118,13 @@
- writeD(_player.getAppearance().getHairColor());
- writeD(_player.getAppearance().getFace());
- - writeS((canSeeInvis) ? "Invisible" : _player.getTitle());
- + String name = (canSeeInvis) ? "Invisible" : _player.getTitle();
- +
- + Event event = _player.getEvent();
- + if (event != null && event.isStarted())
- + name = ((_player.getTeam() == TeamType.BLUE) ? "Kills: " + _player.getEvent().getBlueTeamKills() : (_player.getTeam() == TeamType.RED) ? "Kills: " + _player.getEvent().getRedTeamKills() : _player.getTitle());
- + writeS(name);
- writeD(_player.getClanId());
- writeD(_player.getClanCrestId());
- writeD(_player.getAllyId());
- @@ -153,11 +159,19 @@
- writeC((_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA)) ? 1 : 0);
- writeC((_player.isFishing()) ? 1 : 0);
- writeLoc(_player.getFishingStance().getLoc());
- - writeD(_player.getAppearance().getNameColor());
- + int Namecolor = (_player.getAppearance().getNameColor());
- + if (event != null && event.isStarted())
- + Namecolor = (_player.getTeam() == TeamType.BLUE ? Integer.decode("0xDF0101") : _player.getTeam() == TeamType.RED ? Integer.decode("0x0000FF") : _player.getAppearance().getNameColor());
- +
- + writeD(Namecolor);
- writeD(_player.getHeading());
- writeD(_player.getPledgeClass());
- writeD(_player.getPledgeType());
- - writeD(_player.getAppearance().getTitleColor());
- + int Titlecolor = (_player.getAppearance().getTitleColor());
- + if (event != null && event.isStarted())
- + Titlecolor = (_player.getTeam() == TeamType.BLUE ? Integer.decode("0xDF0101") : _player.getTeam() == TeamType.RED ? Integer.decode("0x0000FF") : _player.getAppearance().getTitleColor());
- +
- + writeD(Titlecolor);
- writeD(CursedWeaponManager.getInstance().getCurrentStage(_player.getCursedWeaponEquippedId()));
- }
- }
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/handler/UserCommandHandler.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/UserCommandHandler.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/UserCommandHandler.java (working copy)
- @@ -10,6 +10,7 @@
- import net.sf.l2j.gameserver.handler.usercommandhandlers.ClanWarsList;
- import net.sf.l2j.gameserver.handler.usercommandhandlers.DisMount;
- import net.sf.l2j.gameserver.handler.usercommandhandlers.Escape;
- +import net.sf.l2j.gameserver.handler.usercommandhandlers.EventCommands;
- import net.sf.l2j.gameserver.handler.usercommandhandlers.Loc;
- import net.sf.l2j.gameserver.handler.usercommandhandlers.Mount;
- import net.sf.l2j.gameserver.handler.usercommandhandlers.OlympiadStat;
- @@ -30,6 +31,7 @@
- registerHandler(new ClanWarsList());
- registerHandler(new DisMount());
- registerHandler(new Escape());
- + registerHandler(new EventCommands());
- registerHandler(new Loc());
- registerHandler(new Mount());
- registerHandler(new OlympiadStat());
- Index: java/net/sf/l2j/gameserver/network/clientpackets/Logout.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/Logout.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/Logout.java (working copy)
- @@ -3,6 +3,7 @@
- import net.sf.l2j.gameserver.data.manager.FestivalOfDarknessManager;
- import net.sf.l2j.gameserver.enums.ZoneId;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- import net.sf.l2j.gameserver.taskmanager.AttackStanceTaskManager;
- @@ -20,7 +21,15 @@
- final Player player = getClient().getPlayer();
- if (player == null)
- return;
- -
- +
- + Event event = player.getEvent();
- + if (event != null && event.isStarted())
- + {
- + player.sendMessage("You cannot logout while in event.");
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + return;
- + }
- +
- if (player.getActiveEnchantItem() != null || player.isLocked())
- {
- player.sendPacket(ActionFailed.STATIC_PACKET);
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestGiveNickName.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestGiveNickName.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestGiveNickName.java (working copy)
- @@ -3,6 +3,7 @@
- import net.sf.l2j.commons.lang.StringUtil;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.pledge.Clan;
- import net.sf.l2j.gameserver.model.pledge.ClanMember;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- @@ -27,6 +28,13 @@
- if (activeChar == null)
- return;
- + Event event = activeChar.getEvent();
- + if (event != null && event.isStarted())
- + {
- + activeChar.sendMessage("You cannot change title while in event.");
- + return;
- + }
- +
- if (!StringUtil.isValidString(_title, "^[a-zA-Z0-9 !@#$&()\\-`.+,/\"]*{0,16}$"))
- {
- activeChar.sendPacket(SystemMessageId.NOT_WORKING_PLEASE_TRY_AGAIN_LATER);
- Index: java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java (working copy)
- @@ -4,6 +4,7 @@
- import net.sf.l2j.gameserver.enums.ZoneId;
- import net.sf.l2j.gameserver.handler.IUserCommandHandler;
- import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
- @@ -22,7 +23,14 @@
- activeChar.sendPacket(SystemMessageId.NO_UNSTUCK_PLEASE_SEND_PETITION);
- return false;
- }
- -
- +
- + Event event = activeChar.getEvent();
- + if (event != null && event.isStarted())
- + {
- + activeChar.sendMessage("You may not use an escape in events.");
- + return false;
- + }
- +
- activeChar.stopMove(null);
- // Official timer 5 minutes, for GM 1 second
- Index: java/net/sf/l2j/gameserver/model/entity/event/imp/Event.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/entity/event/imp/Event.java (revision 0)
- +++ java/net/sf/l2j/gameserver/model/entity/event/imp/Event.java (working copy)
- @@ -0,0 +1,64 @@
- +package net.sf.l2j.gameserver.model.entity.event.imp;
- +
- +import net.sf.l2j.gameserver.enums.EventState;
- +import net.sf.l2j.gameserver.model.actor.Creature;
- +import net.sf.l2j.gameserver.model.actor.Player;
- +
- +/**
- + * @author DnR
- + *
- + */
- +public abstract class Event
- +{
- + // Event Kills
- + public int _blueTeamKills = 0;
- + public int _redTeamKills = 0;
- +
- + // Event default state
- + public EventState _state = EventState.INITIAL;
- +
- + public boolean isStarted()
- + {
- + return _state == EventState.STARTED;
- + }
- +
- + public EventState getEventState()
- + {
- + return _state;
- + }
- +
- + public void setEventState(EventState state)
- + {
- + _state = state;
- + }
- +
- + public int getBlueTeamKills()
- + {
- + return _blueTeamKills;
- + }
- +
- + public int getRedTeamKills()
- + {
- + return _redTeamKills;
- + }
- +
- + public abstract boolean isRegistered(Player player);
- +
- + public abstract void onDie(Creature player);
- +
- + public abstract void onKill(Player player, Player target);
- +
- + public abstract void onRevive(Creature player);
- +
- + public abstract boolean canTarget(Player player, Player target);
- +
- + public void registerPlayer(Player player)
- + {
- + player.setEvent(this);
- + }
- +
- + public void removePlayer(Player player)
- + {
- + player.setEvent(null);
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/model/actor/instance/TvTManager.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/TvTManager.java (revision 0)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/TvTManager.java (working copy)
- @@ -0,0 +1,85 @@
- +package net.sf.l2j.gameserver.model.actor.instance;
- +
- +import net.sf.l2j.Config;
- +import net.sf.l2j.gameserver.data.cache.HtmCache;
- +import net.sf.l2j.gameserver.enums.EventState;
- +import net.sf.l2j.gameserver.model.actor.Player;
- +import net.sf.l2j.gameserver.model.actor.instance.Folk;
- +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import net.sf.l2j.gameserver.model.entity.event.TvTEvent;
- +import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +/**
- + * @author DnR
- + *
- + */
- +public class TvTManager extends Folk
- +{
- + public TvTManager(int objectId, NpcTemplate template)
- + {
- + super(objectId, template);
- + }
- +
- + @Override
- + public void onBypassFeedback(Player player, String command)
- + {
- + if (command.equals("tvt_event_participation"))
- + TvTEvent.getInstance().registerPlayer(player);
- + else if (command.equals("tvt_event_remove_participation"))
- + TvTEvent.getInstance().removePlayer(player);
- + }
- +
- + @Override
- + public void showChatWindow(Player player, int val)
- + {
- + if (player == null)
- + return;
- +
- + if (TvTEvent.getInstance().getEventState() == EventState.REGISTER)
- + {
- + String htmFile = "data/html/event/";
- +
- + if (!TvTEvent.getInstance().isRegistered(player))
- + htmFile += "TvTEventParticipation";
- + else
- + htmFile += "TvTEventRemoveParticipation";
- +
- + htmFile += ".htm";
- +
- + String htmContent = HtmCache.getInstance().getHtm(htmFile);
- + if (htmContent != null)
- + {
- + NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
- +
- + npcHtmlMessage.setHtml(htmContent);
- + npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId()));
- + npcHtmlMessage.replace("%registeredcount%", String.valueOf(TvTEvent.getInstance().getRegistered().size()));
- + npcHtmlMessage.replace("%minimumplayers%", String.valueOf(Config.MIN_PARTICIOANTS));
- + npcHtmlMessage.replace("%maximumplayers%", String.valueOf(Config.MAX_PARTICIOANTS));
- + npcHtmlMessage.replace("%minimumlevel%", String.valueOf(Config.MIN_LEVEL));
- + npcHtmlMessage.replace("%maximumlevel%", String.valueOf(Config.MAX_LEVEL));
- + player.sendPacket(npcHtmlMessage);
- + }
- + }
- + else
- + {
- + String htmContent = HtmCache.getInstance().getHtm("data/html/event/TvTEventStatus.htm");
- +
- + if (htmContent != null)
- + {
- +
- + NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
- +
- + npcHtmlMessage.setHtml(htmContent);
- + npcHtmlMessage.replace("%team1playercount%", String.valueOf(TvTEvent.getInstance().getBlueTeam().size()));
- + npcHtmlMessage.replace("%team1points%", String.valueOf(TvTEvent.getInstance().getBlueTeamKills()));
- + npcHtmlMessage.replace("%team2playercount%", String.valueOf(TvTEvent.getInstance().getRedTeam().size()));
- + npcHtmlMessage.replace("%team2points%", String.valueOf(TvTEvent.getInstance().getRedTeamKills()));
- + player.sendPacket(npcHtmlMessage);
- + }
- + }
- +
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/handler/itemhandlers/ItemSkills.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/itemhandlers/ItemSkills.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/itemhandlers/ItemSkills.java (working copy)
- @@ -8,6 +8,7 @@
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.instance.Pet;
- import net.sf.l2j.gameserver.model.actor.instance.Servitor;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- @@ -27,6 +28,13 @@
- final boolean isPet = playable instanceof Pet;
- final Player activeChar = playable.getActingPlayer();
- +
- + Event event = activeChar.getEvent();
- + if (event != null && event.isStarted())
- + {
- + activeChar.sendMessage("You cannot use this item in events.");
- + return;
- + }
- // Pets can only use tradable items.
- if (isPet && !item.isTradable())
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java (working copy)
- @@ -1,9 +1,11 @@
- package net.sf.l2j.gameserver.network.clientpackets;
- import net.sf.l2j.gameserver.enums.LootRule;
- +import net.sf.l2j.gameserver.enums.TeamType;
- import net.sf.l2j.gameserver.model.World;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.actor.player.BlockList;
- +import net.sf.l2j.gameserver.model.entity.event.imp.Event;
- import net.sf.l2j.gameserver.model.group.Party;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.AskJoinParty;
- @@ -34,6 +36,18 @@
- requestor.sendPacket(SystemMessageId.FIRST_SELECT_USER_TO_INVITE_TO_PARTY);
- return;
- }
- +
- + Event targetEvent = target.getEvent();
- + Event requestorEvent = requestor.getEvent();
- +
- + if (targetEvent != null && targetEvent.isStarted() && target.getTeam() == TeamType.NONE || target.getTeam().getId() > 0 && target.getTeam() != requestor.getTeam())
- + return;
- +
- + if (requestorEvent != null && requestorEvent.isStarted() && requestor.getTeam() == TeamType.NONE || requestor.getTeam().getId() > 0 && requestor.getTeam() != target.getTeam())
- + {
- + requestor.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
- + return;
- + }
- if (BlockList.isBlocked(target, requestor))
- {
- ### Eclipse Workspace Patch 1.0
- #P aCis_gameserver
- Index: java/net/sf/l2j/commons/config/ExProperties.java
- ===================================================================
- --- java/net/sf/l2j/commons/config/ExProperties.java (revision 1)
- +++ java/net/sf/l2j/commons/config/ExProperties.java (working copy)
- @@ -9,6 +9,7 @@
- import net.sf.l2j.commons.logging.CLogger;
- import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- +import net.sf.l2j.gameserver.model.location.Location;
- public class ExProperties extends Properties
- {
- @@ -215,4 +216,44 @@
- }
- return result;
- }
- +
- + /**
- + * x,y,z
- + * @param line
- + * @param defaultValue
- + * @return an array consisting of parsed items.
- + */
- + public final Location parseLocation(String line, String defaultValue)
- + {
- + final String[] propertySplit = getProperty(line, defaultValue).split(",");
- + if (propertySplit.length < 3)
- + return null;
- +
- + int i = 0;
- + final int[] result = new int[propertySplit.length];
- + for (String value : propertySplit)
- + {
- + try
- + {
- + result[i] = Integer.parseInt(value);
- + }
- + catch (NumberFormatException e)
- + {
- + LOGGER.warn("Config: Error parsing coordinate -> \"" + value + "\"");
- + return null;
- + }
- +
- + i++;
- + }
- +
- + if (result.length < 3)
- + {
- + LOGGER.warn("Config: Error parsing location -> size: \"" + result.length + "\"");
- + return null;
- + }
- +
- + final Location loc = new Location(result[0], result[1], result[2]);
- +
- + return loc;
- + }
- }
- \ No newline at end of file
- #P aCis_datapack
- Index: data/xml/adminCommands.xml
- ===================================================================
- --- data/xml/adminCommands.xml (revision 1)
- +++ data/xml/adminCommands.xml (working copy)
- @@ -334,4 +334,7 @@
- <!-- ZONE -->
- <aCar name="admin_zone_check" accessLevel="7"/>
- <aCar name="admin_zone_visual" accessLevel="7"/>
- +
- + <!-- TVT -->
- + <aCar name="admin_tvt_abort" accessLevel="7"/>
- </list>
- \ No newline at end of file
- Index: data/html/event/TvTEventRemoveParticipation.htm
- ===================================================================
- --- data/html/event/TvTEventRemoveParticipation.htm (revision 0)
- +++ data/html/event/TvTEventRemoveParticipation.htm (working copy)
- @@ -0,0 +1,11 @@
- +<html><title>TvT Event</title><br><body>
- +Cancel Registration yourself for TvT Event:<br1><br>
- +<center>Registered:(%registeredcount% players in)<br1>
- +Minimum players required:%minimumplayers%<br1>
- +Maximum players allowed:%maximumplayers%<br>
- +Minimum level:%minimumlevel%<br1>
- +Maximum level:%maximumlevel%</center><br><br>
- +You are already registered for this event. Do you wish to cancel your participation in this Event?<br><br><center>
- +<button value="Yes" action="bypass -h npc_%objectId%_tvt_event_remove_participation" width=40 height=15 back="sek.cbui94" fore="sek.cbui92">
- +<button value="No" action="bypass -h npc_%objectId%_Close" width=40 height=15 back="sek.cbui94" fore="sek.cbui92">
- +</center></body></html>
- Index: data/html/event/TvTEventStatus.htm
- ===================================================================
- --- data/html/event/TvTEventStatus.htm (revision 0)
- +++ data/html/event/TvTEventStatus.htm (working copy)
- @@ -0,0 +1,7 @@
- +<html><title>TvT Event</title><br>
- +<body>Status:<br>
- +<br>
- +<center>Blue Team with %team1playercount% players and %team1points% points.<br1>
- +Red Team with %team2playercount% players and %team2points% points.<br>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/html/event/TvTEventParticipation.htm
- ===================================================================
- --- data/html/event/TvTEventParticipation.htm (revision 0)
- +++ data/html/event/TvTEventParticipation.htm (working copy)
- @@ -0,0 +1,10 @@
- +<html><title>TvT Event</title><br><body>
- +Registration for TvT Event:<br><br><center>
- +Registered: %registeredcount%, players in)<br1>
- +Minimum players required;%minimumplayers%<br1>
- +Maximum players allowed:%maximumplayers%<br>
- +Minimum level:%minimumlevel%<br1>
- +Maximum level:%maximumlevel%<br>
- +<button value="Participate" action="bypass -h npc_%objectId%_tvt_event_participation" width=50 height=15 back="sek.cbui94" fore="sek.cbui92">
- +<button value="Close" action="bypass -h npc_%objectId%_Close" width=50 height=15 back="sek.cbui94" fore="sek.cbui92">
- +</center></body></html>
- Index: data/xml/npcs/50000-50999.xml
- ===================================================================
- --- data/xml/npcs/50000-50999.xml (revision 1)
- +++ data/xml/npcs/50000-50999.xml (working copy)
- @@ -1,5 +1,79 @@
- <?xml version="1.0" encoding="utf-8"?>
- <list>
- +<npc id="50002" idTemplate="35322" name="Event" title="TvT Manager">
- + <set name="usingServerSideName" val="true" />
- + <set name="usingServerSideTitle" val="true" />
- + <set name="level" val="20"/>
- + <set name="radius" val="34"/>
- + <set name="height" val="65"/>
- + <set name="rHand" val="0"/>
- + <set name="lHand" val="0"/>
- + <set name="type" val="TvTManager"/>
- + <set name="exp" val="0"/>
- + <set name="sp" val="10"/>
- + <set name="hp" val="342.5127"/>
- + <set name="mp" val="192"/>
- + <set name="hpRegen" val="2.5"/>
- + <set name="mpRegen" val="1.2"/>
- + <set name="pAtk" val="44.32863"/>
- + <set name="pDef" val="86.87049"/>
- + <set name="mAtk" val="30.2707"/>
- + <set name="mDef" val="63.56806"/>
- + <set name="crit" val="4"/>
- + <set name="atkSpd" val="253"/>
- + <set name="str" val="40"/>
- + <set name="int" val="21"/>
- + <set name="dex" val="30"/>
- + <set name="wit" val="20"/>
- + <set name="con" val="43"/>
- + <set name="men" val="20"/>
- + <set name="corpseTime" val="7"/>
- + <set name="walkSpd" val="50"/>
- + <set name="runSpd" val="120"/>
- + <set name="dropHerbGroup" val="0"/>
- + <ai type="DEFAULT" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="false" seedable="false"/>
- + <skills>
- + <skill id="4045" level="1"/>
- + <skill id="4416" level="19"/>
- + </skills>
- + </npc>
- <npc id="50006" idTemplate="31228" name="Roy the Cat" title="Class Manager">
- <set name="usingServerSideName" val="true"/>
- <set name="usingServerSideTitle" val="true"/>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement