All pastes #988208 Raw Edit

Miscellany

public text v1 · immutable
#988208 ·published 2008-04-17 11:36 UTC
rendered paste body
Index: L2NpcInstance.java
===================================================================
--- L2NpcInstance.java	(revision 3497)
+++ L2NpcInstance.java	(working copy)
@@ -23,6 +23,7 @@
 import javolution.util.FastList;
 import net.sf.l2j.Config;
 import net.sf.l2j.Config.CacheType;
+import net.sf.l2j.gameserver.GameTimeController;
 import net.sf.l2j.gameserver.Olympiad;
 import net.sf.l2j.gameserver.SevenSigns;
 import net.sf.l2j.gameserver.SevenSignsFestival;
@@ -45,6 +46,8 @@
 import net.sf.l2j.gameserver.instancemanager.TownManager;
 import net.sf.l2j.gameserver.instancemanager.games.Lottery;
 import net.sf.l2j.gameserver.instancemanager.grandbosses.BaiumManager;
+import net.sf.l2j.gameserver.instancemanager.SiegeManager;
+import net.sf.l2j.gameserver.model.entity.Siege;
 import net.sf.l2j.gameserver.model.L2Attackable;
 import net.sf.l2j.gameserver.model.L2Character;
 import net.sf.l2j.gameserver.model.L2Clan;
@@ -58,6 +61,7 @@
 import net.sf.l2j.gameserver.model.L2Summon;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.L2WorldRegion;
+import net.sf.l2j.gameserver.model.zone.L2Zone;
 import net.sf.l2j.gameserver.model.MobGroupTable;
 import net.sf.l2j.gameserver.model.NpcInventory;
 import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType;
@@ -88,6 +92,7 @@
 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
 import net.sf.l2j.gameserver.network.serverpackets.NpcInfo;
 import net.sf.l2j.gameserver.network.serverpackets.RadarControl;
+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
 import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
@@ -99,6 +104,7 @@
 import net.sf.l2j.gameserver.templates.L2NpcTemplate;
 import net.sf.l2j.gameserver.templates.L2Weapon;
 import net.sf.l2j.tools.random.Rnd;
+import net.sf.l2j.gameserver.util.Broadcast;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -1251,6 +1257,10 @@
             {
                 makeCPRecovery(player);
             }
+            else if (command.startsWith("gotolove"))
+            {
+                goToLove(player);
+            }
             else if (command.startsWith("SupportMagic"))
             {
                 makeSupportMagic(player);
@@ -2065,7 +2075,232 @@
         player.sendPacket(sm);
     }
 
+    private static class EscapeFinalizer implements Runnable
+    {
+        private L2PcInstance _activeChar;
+        private int _partnerx;
+        private int _partnery;
+        private int _partnerz;
+        private boolean _to7sDungeon;
+        
+        EscapeFinalizer(L2PcInstance activeChar, int x, int y, int z, boolean to7sDungeon)
+        {
+            _activeChar = activeChar;
+            _partnerx = x;
+            _partnery = y;
+            _partnerz = z;
+            _to7sDungeon = to7sDungeon;
+        }
+        
+        public void run()
+        {
+            if (_activeChar.isDead()) 
+                return; 
+            _activeChar.setIsIn7sDungeon(_to7sDungeon);
+            _activeChar.enableAllSkills();
 
+            try 
+            {
+                _activeChar.teleToLocation(_partnerx, _partnery, _partnerz);
+            }
+            catch (Throwable e) { _log.error(e.getMessage(),e); }
+        }
+    }
+
+    public boolean goToLove(L2PcInstance activeChar)
+    {
+        if (activeChar.isCastingNow() || activeChar.isMovementDisabled() 
+                || activeChar.isMuted() || activeChar.isAlikeDead())
+            return false;
+
+        Siege siege = SiegeManager.getInstance().getSiege(activeChar);
+
+        if(!activeChar.isMaried())
+        {
+            activeChar.sendMessage("You're not married."); 
+            return false;
+        }
+        else if (activeChar.getPartnerId()==0)
+        {
+            activeChar.sendMessage("Couldn't find your fiance in Database - Inform a Gamemaster.");
+            _log.error("Married but couldn't find partner for "+activeChar.getName());
+            return false;
+        }
+        // Check to see if the player is in olympiad.
+        else if (activeChar.isInOlympiadMode())
+        {
+            activeChar.sendMessage("You are in Olympiad!");
+            return false;
+        }
+        // Check to see if the player is in observer mode
+        else if (activeChar.inObserverMode())
+        {
+            activeChar.sendMessage("You are in observer mode.");
+            return false;
+        }
+        // Check to see if the player is in an event
+        else if (activeChar.isInFunEvent())
+        {
+            activeChar.sendMessage("You are in event now.");
+            return false;
+        }
+        // Check to see if the player is in a festival.
+        else if (activeChar.isFestivalParticipant()) 
+        {
+            activeChar.sendMessage("You can't escape from a festival.");
+            return false;
+        }
+         // Check to see if the player is in dimensional rift.
+        else if (activeChar.isInParty() && activeChar.getParty().isInDimensionalRift())
+        {
+            activeChar.sendMessage("You are in the dimensional rift.");
+            return false;
+        }
+        // Check to see if player is in jail
+        else if (activeChar.isInJail() || activeChar.isInsideZone(L2Zone.FLAG_JAIL))
+        {
+            activeChar.sendMessage("You can't escape from jail.");
+            return false;
+        }
+        // Check if player is in Siege
+        else if(siege != null && siege.getIsInProgress())
+        {
+            activeChar.sendMessage("You are in siege, you can't go to your partner.");
+            return false;
+        }
+        // Check if player is in Duel
+        else if (activeChar.isInDuel())
+        {
+            activeChar.sendMessage("You are in a duel!");
+            return false;
+        }
+        // Check if player is a Cursed Weapon owner
+        else if (activeChar.isCursedWeaponEquipped())
+        {
+            activeChar.sendMessage("You are currently holding a cursed weapon.");
+            return false;
+        }
+        // Check if player is in a Monster Derby Track
+        else if (activeChar.isInsideZone(L2Zone.FLAG_NOESCAPE))
+        {
+            activeChar.sendMessage("You cannot escape from here.");
+            return false;
+        }
+
+        L2PcInstance partner;
+        partner = (L2PcInstance)L2World.getInstance().findObject(activeChar.getPartnerId());
+        if(partner != null)
+        {
+            siege = SiegeManager.getInstance().getSiege(partner);
+        }
+        else
+        {
+            activeChar.sendMessage("Your partner is not online.");
+            return false;
+        }
+
+        if (partner.isInJail() || partner.isInsideZone(L2Zone.FLAG_JAIL))
+        {
+            activeChar.sendMessage("Your partner is in jail.");
+            return false;
+        }
+        else if (partner.isInOlympiadMode())
+        {
+            activeChar.sendMessage("Your partner is in Olympiad now.");
+            return false;
+        }
+        else if (partner.inObserverMode())
+        {
+            activeChar.sendMessage("Your partner is in observer mode.");
+            return false;
+        }
+        else if (partner.isInDuel())
+        {
+            activeChar.sendMessage("Your partner is in a duel.");
+            return false;
+        }
+        else if (partner.isInFunEvent())
+        {
+            activeChar.sendMessage("Your partner is in an event.");
+            return false;
+        }
+        else if (DimensionalRiftManager.getInstance().checkIfInRiftZone
+                (partner.getX(), partner.getY(), partner.getZ(), false))
+        {
+            activeChar.sendMessage("Your partner is in dimensional rift.");
+            return false;
+        }
+        else if (partner.isFestivalParticipant())
+        {
+            activeChar.sendMessage("Your partner is in a festival.");
+            return false;
+        }
+        else if(siege != null && siege.getIsInProgress())
+        {
+            if (partner.getAppearance().getSex())
+                activeChar.sendMessage("Your partner is in siege, you can't go to her.");
+            else
+                activeChar.sendMessage("Your partner is in siege, you can't go to him.");
+            return false;
+        }
+        else if (partner.isCursedWeaponEquipped())
+        {
+            activeChar.sendMessage("Your partner is currently holding a cursed weapon.");
+            return false;
+        }
+        else if (partner.isInsideZone(L2Zone.FLAG_NOESCAPE))
+        {
+            activeChar.sendMessage("Your partner is in a unsuitable area for teleporting.");
+            return false;
+        }
+        else if (partner.isIn7sDungeon() && !activeChar.isIn7sDungeon())
+        {
+            int playerCabal = SevenSigns.getInstance().getPlayerCabal(activeChar);
+            boolean isSealValidationPeriod = SevenSigns.getInstance().isSealValidationPeriod();
+            int compWinner = SevenSigns.getInstance().getCabalHighestScore();
+            
+            if (isSealValidationPeriod)
+            {
+                if (playerCabal != compWinner)
+                {
+                    activeChar.sendMessage("Your Partner is in a Seven Signs Dungeon and you are not in the winner Cabal!");
+                    return false;
+                }
+            }
+            else
+            {
+                if (playerCabal == SevenSigns.CABAL_NULL)
+                {
+                    activeChar.sendMessage("Your Partner is in a Seven Signs Dungeon and you are not registered!");
+                    return false;
+                }
+            }
+        }
+        
+        int teleportTimer = Config.WEDDING_TELEPORT_INTERVAL*1000;
+        
+        activeChar.sendMessage("After " + teleportTimer/60000 + " min. you will be teleported to your fiance.");
+        activeChar.getInventory().reduceAdena("Wedding", Config.WEDDING_TELEPORT_PRICE, activeChar, null);
+        
+        activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
+        //SoE Animation section
+        activeChar.setTarget(activeChar);
+        activeChar.disableAllSkills();
+
+        MagicSkillUse msk = new MagicSkillUse(activeChar, 1050, 1, teleportTimer, 0);
+        Broadcast.toSelfAndKnownPlayersInRadius(activeChar, msk, 810000/*900*/);
+        SetupGauge sg = new SetupGauge(0, teleportTimer);
+        activeChar.sendPacket(sg);
+        //End SoE Animation section
+
+        EscapeFinalizer ef = new EscapeFinalizer(activeChar,partner.getX(),partner.getY(),partner.getZ(),partner.isIn7sDungeon());
+        // continue execution later
+        activeChar.setSkillCast(ThreadPoolManager.getInstance().scheduleGeneral(ef, teleportTimer));
+        activeChar.setSkillCastEndTime(10+GameTimeController.getGameTicks()+teleportTimer/GameTimeController.MILLIS_IN_TICK);
+        
+        return true;
+    }
+
     /**
      * Add Newbie helper buffs to L2Player according to its level.<BR><BR>
      *