Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Mensajes recientes

#81
L2 | Apartado de Soporte / Re:Eliminar puertas y murallas
Último mensaje por Swarlog - Nov 05, 2025, 11:13 PM
No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.Hola, me gustaria eliminar las puertas de los Clan Halls y murallas de los castillos.

¿Cómo puedo hacerlo? Utilizo L2J-Frozen

En el archivo "Doors" localizado en tu data, lo abres con el block de notas.

1.- Buscas la ID de la puerta o muralla a modificar.

2.- En donde dice "hp", cambiale la vida y ponle "0". Así aparecerá eliminada.

Y listo.
#82
L2 | Apartado de Soporte / Re:Wyvern de mascota
Último mensaje por Swarlog - Nov 05, 2025, 11:12 PM
Cita de: JacopMe gustaria tener el Wyvern como mascota para los donantes del servidor, mi pregunta es la siguiente:

¿Tengo que crearlo custom o ya viene creado?

Mira con la ID del item "8663"
#83
L2 | Apartado de Soporte / Re:legendary of tales evento 7...
Último mensaje por Swarlog - Nov 05, 2025, 11:11 PM
Crónica? Versión? Por favor, especifica para poder ayudarte ;)

De todos modos, aqui te dejo la quest funcionando y retail:

/*
 * Copyright (C) 2004-2015 L2J DataPack
 * 
 * This file is part of L2J DataPack.
 * 
 * L2J DataPack 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.
 * 
 * L2J DataPack 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 quests.Q00254_LegendaryTales;

import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;

/**
 * Legendary Tales (254)
 * @author nonom
 */
public class Q00254_LegendaryTales extends Quest
{
	// NPC
	private static final int GILMORE = 30754;
	
	// Monsters
	public enum Bosses
	{
		EMERALD_HORN(25718),
		DUST_RIDER(25719),
		BLEEDING_FLY(25720),
		BLACK_DAGGER(25721),
		SHADOW_SUMMONER(25722),
		SPIKE_SLASHER(25723),
		MUSCLE_BOMBER(25724);
		
		private final int _bossId;
		private final int _mask;
		
		private Bosses(int bossId)
		{
			_bossId = bossId;
			_mask = 1 << ordinal();
		}
		
		public int getId()
		{
			return _bossId;
		}
		
		public int getMask()
		{
			return _mask;
		}
		
		public static Bosses valueOf(int npcId)
		{
			for (Bosses val : values())
			{
				if (val.getId() == npcId)
				{
					return val;
				}
			}
			return null;
		}
	}
	
	// @formatter:off
	private static final int[] MONSTERS =
	{
		Bosses.EMERALD_HORN.getId(), Bosses.DUST_RIDER.getId(), Bosses.BLEEDING_FLY.getId(), 
		Bosses.BLACK_DAGGER.getId(), Bosses.SHADOW_SUMMONER.getId(), Bosses.SPIKE_SLASHER.getId(), 
		Bosses.MUSCLE_BOMBER.getId()
	};
	// @formatter:on
	
	// Items
	private static final int LARGE_DRAGON_SKULL = 17249;
	
	// Misc
	private static final int MIN_LEVEL = 80;
	
	public Q00254_LegendaryTales()
	{
		super(254, Q00254_LegendaryTales.class.getSimpleName(), "Legendary Tales");
		addStartNpc(GILMORE);
		addTalkId(GILMORE);
		addKillId(MONSTERS);
		registerQuestItems(LARGE_DRAGON_SKULL);
	}
	
	@Override
	public String onTalk(L2Npc npc, L2PcInstance player)
	{
		String htmltext = getNoQuestMsg(player);
		final QuestState st = getQuestState(player, true);
		if (st == null)
		{
			return htmltext;
		}
		
		switch (st.getState())
		{
			case State.CREATED:
				htmltext = (player.getLevel() < MIN_LEVEL) ? "30754-00.htm" : "30754-01.htm";
				break;
			case State.STARTED:
				long count = getQuestItemsCount(player, LARGE_DRAGON_SKULL);
				if (st.isCond(1))
				{
					htmltext = ((count > 0) ? "30754-14.htm" : "30754-06.html");
				}
				else if (st.isCond(2))
				{
					htmltext = ((count < 7) ? "30754-12.htm" : "30754-07.html");
				}
				break;
			case State.COMPLETED:
				htmltext = "30754-29.html";
				break;
		}
		return htmltext;
	}
	
	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		String htmltext = getNoQuestMsg(player);
		final QuestState st = getQuestState(player, false);
		
		if (st == null)
		{
			return htmltext;
		}
		
		switch (event)
		{
			case "30754-05.html":
				st.startQuest();
			case "30754-02.html":
			case "30754-03.html":
			case "30754-04.htm":
			case "30754-08.html":
			case "30754-15.html":
			case "30754-20.html":
			case "30754-21.html":
				htmltext = event;
				break;
			case "25718": // Emerald Horn
				htmltext = (checkMask(st, Bosses.EMERALD_HORN) ? "30754-22.html" : "30754-16.html");
				break;
			case "25719": // Dust Rider
				htmltext = (checkMask(st, Bosses.DUST_RIDER) ? "30754-23.html" : "30754-17.html");
				break;
			case "25720": // Bleeding Fly
				htmltext = (checkMask(st, Bosses.BLEEDING_FLY) ? "30754-24.html" : "30754-18.html");
				break;
			case "25721": // Black Dagger Wing
				htmltext = (checkMask(st, Bosses.BLACK_DAGGER) ? "30754-25.html" : "30754-19.html");
				break;
			case "25722": // Shadow Summoner
				htmltext = (checkMask(st, Bosses.SHADOW_SUMMONER) ? "30754-26.html" : "30754-16.html");
				break;
			case "25723": // Spike Slasher
				htmltext = (checkMask(st, Bosses.SPIKE_SLASHER) ? "30754-27.html" : "30754-17.html");
				break;
			case "25724": // Muscle Bomber
				htmltext = (checkMask(st, Bosses.MUSCLE_BOMBER) ? "30754-28.html" : "30754-18.html");
				break;
			case "13467": // Vesper Thrower
			case "13466": // Vesper Singer
			case "13465": // Vesper Caster
			case "13464": // Vesper Retributer
			case "13463": // Vesper Avenger
			case "13457": // Vesper Cutter
			case "13458": // Vesper Slasher
			case "13459": // Vesper Buster
			case "13460": // Vesper Sharper
			case "13461": // Vesper Fighter
			case "13462": // Vesper Stormer
				if (st.isCond(2) && (getQuestItemsCount(player, LARGE_DRAGON_SKULL) >= 7))
				{
					htmltext = "30754-09.html";
					rewardItems(player, Integer.parseInt(event), 1);
					st.exitQuest(false, true);
				}
				break;
		}
		return htmltext;
	}
	
	@Override
	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
	{
		if (player.isInParty())
		{
			for (L2PcInstance partyMember : player.getParty().getMembers())
			{
				actionForEachPlayer(partyMember, npc, false);
			}
		}
		else
		{
			actionForEachPlayer(player, npc, false);
		}
		return super.onKill(npc, player, isPet);
	}
	
	@Override
	public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
	{
		final QuestState st = player.getQuestState(Q00254_LegendaryTales.class.getSimpleName());
		
		if ((st != null) && st.isCond(1))
		{
			int raids = st.getInt("raids");
			Bosses boss = Bosses.valueOf(npc.getId());
			
			if (!checkMask(st, boss))
			{
				st.set("raids", raids | boss.getMask());
				st.giveItems(LARGE_DRAGON_SKULL, 1);
				
				if (st.getQuestItemsCount(LARGE_DRAGON_SKULL) < 7)
				{
					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
				}
				else
				{
					st.setCond(2, true);
				}
			}
		}
	}
	
	private static boolean checkMask(QuestState qs, Bosses boss)
	{
		int pos = boss.getMask();
		return ((qs.getInt("raids") & pos) == pos);
	}
}
#84
L2 | Apartado de Soporte / Re:Se transfiere el PK
Último mensaje por Swarlog - Nov 05, 2025, 11:11 PM
Cita de: lvchinBuenas, tengo un problema con el karma y pk.

cuando un pj X mata a un pj que esta PK, se le transfiere el PK al pj X, lo cual no debería de pasar, alguno tendrá la solución ? utilizo el ultimo l2jserver máster, gracias.

Prueben este fix:

diff --git a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index f73ce49..e378894 100644
--- a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -5110,6 +5110,14 @@
     @Override
     public boolean doDie(L2Character killer)
     {
+        // Kill the L2PcInstance
+        if (!super.doDie(killer))
+        {
+            return false;
+        }
+        
+        setExpBeforeDeath(getExp());
+        
         if (killer != null)
         {
             final L2PcInstance pk = killer.getActingPlayer();
@@ -5127,7 +5135,7 @@
             
             broadcastStatusUpdate();
             // Clear resurrect xp calculation
-            setExpBeforeDeath(0);
+            // setExpBeforeDeath(0);
             
             // Issues drop of Cursed Weapon.
             if (isCursedWeaponEquipped())
@@ -5192,12 +5200,6 @@
                     }
                 }
             }
-        }
-        
-        // Kill the L2PcInstance
-        if (!super.doDie(killer))
-        {
-            return false;
         }
         
         if (isMounted())
@@ -5585,8 +5587,6 @@
         {
             lostExp /= 4.0;
         }
-        
-        setExpBeforeDeath(getExp());
         
         getStat().addExp(-lostExp);
     }
#85
L2 | Apartado de Soporte / Re:Error Quest seven signs
Último mensaje por Swarlog - Nov 05, 2025, 11:09 PM
Lo ideal es que vallas a esa clase y revises el texto. Hace poco que cambiaron los de L2J-Server algunos textos para hacerlos más retail/visualmente mejor. De todos modos, aqui tienes este otro:

/*
 * Copyright (C) 2004-2015 L2J DataPack
 * 
 * This file is part of L2J DataPack.
 * 
 * L2J DataPack 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.
 * 
 * L2J DataPack 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 instances.MonasteryOfSilence2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import quests.Q10294_SevenSignsToTheMonasteryOfSilence.Q10294_SevenSignsToTheMonasteryOfSilence;
import quests.Q10295_SevenSignsSolinasTomb.Q10295_SevenSignsSolinasTomb;
import quests.Q10296_SevenSignsPowerOfTheSeal.Q10296_SevenSignsPowerOfTheSeal;
import ai.npc.AbstractNpcAI;

import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.instancemanager.InstanceManager;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.Instance;
import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.NpcSay;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;

public class MonasteryOfSilence2 extends AbstractNpcAI
{
    // Values
    private static final int INSTANCE_ID = 151;
    // NPC's
    private static final int OddGlobe = 32815;
    private static final int Elcadia_First_Room = 32787;
    private static final int Elcadia_Support = 32785;
    private static final int ErissEvilThoughts = 32792;
    private static final int SolinasEvilThoughts = 32793;
    private static final int RelicGuardian = 32803;
    private static final int WestRelicWatcher = 32804;
    private static final int NorthRelicWatcher = 32805;
    private static final int EastRelicWatcher = 32806;
    private static final int SouthRelicWatcher = 32807;
    private static final int EtisVanEtina = 32808;
    private static final int WestTeleportControlDevice = 32816;
    private static final int NorthTeleportControlDevice = 32817;
    private static final int EastTeleportControlDevice = 32818;
    private static final int SouthTeleportControlDevice = 32819;
    private static final int JudeVanEtinasEvilThoughts = 32888;
    private static final int TeleportControlDevice1 = 32837;
    private static final int TeleportControlDevice2 = 32842;
    private static final int TombOfTheSaintess = 32843;
    private static final int AltarOfHallows_Staff = 32857;
    private static final int AltarOfHallows_Sword = 32858;
    private static final int AltarOfHallows_Scroll = 32859;
    private static final int AltarOfHallows_Shield = 32860;
    // Teleport's
    private static final int ENTER = 0;
    private static final int HOLYGRAL = 1;
    private static final int EXIT = 2;
    private static final int TW = 3;
    private static final int TN = 4;
    private static final int TE = 5;
    private static final int TS = 6;
    private static final int RTE = 7;
    private static final int RTG = 8;
    private static final int ENTER1 = 9;
    private static final int MTS = 10;
    private static final int MTS2 = 11;
    private static final int EE = 12;
    private static final int[][] TELEPORTS =
    {
        {
            120664,
            -86968,
            -3392
        }, // Enter
        {
            85937,
            -249618,
            -8320
        }, // HolyBurailOpen
        {
            115944,
            -86952,
            -3392
        }, // ExitInstance
        {
            82434,
            -249546,
            -8320
        }, // TeleWest
        {
            85691,
            -252426,
            -8320
        }, // TeleNorth
        {
            88573,
            -249556,
            -8320
        }, // TeleEast
        {
            85675,
            -246630,
            -8320
        }, // TeleSouth
        {
            120727,
            -86868,
            -3392
        }, // ReturnToEris
        {
            85937,
            -249618,
            -8320
        }, // ReturnToGuardian
        {
            45545,
            -249423,
            -6760
        }, // Enter1
        {
            56033,
            -252944,
            -6760
        }, // MoveToSaintness
        {
            55955,
            -250394,
            -6760
        }, // MoveToSaintness2
        {
            76707,
            -241022,
            -10832
        }
    // EtisEtina
    };
    
    private static final int[] TALK =
    {
        OddGlobe,
        Elcadia_Support,
        WestTeleportControlDevice,
        NorthTeleportControlDevice,
        EastTeleportControlDevice,
        SouthTeleportControlDevice,
        RelicGuardian,
        WestRelicWatcher,
        NorthRelicWatcher,
        EastRelicWatcher,
        SouthRelicWatcher,
        ErissEvilThoughts,
        EtisVanEtina,
        JudeVanEtinasEvilThoughts,
        SolinasEvilThoughts,
        TeleportControlDevice1,
        TeleportControlDevice2,
        TombOfTheSaintess,
        AltarOfHallows_Staff,
        AltarOfHallows_Sword,
        AltarOfHallows_Scroll,
        AltarOfHallows_Shield
    };
    
    private static final int[] MageBuff =
    {
        6725,
        6721,
        6722,
        6717
    };
    private static final int[] FighterBuff =
    {
        6714,
        6715,
        6716,
        6717
    };
    
    private final HashMap<Integer, InstanceHolder> instanceWorlds = new HashMap<>();
    
    public static class InstanceHolder
    {
        List<L2Npc> mobs = new ArrayList<>();
    }
    
    private class MoSWorld2 extends InstanceWorld
    {
        public MoSWorld2()
        {
        }
    }
    
    public MonasteryOfSilence2()
    {
        super(MonasteryOfSilence2.class.getSimpleName(), "instances");
        addStartNpc(OddGlobe);
        addStartNpc(WestTeleportControlDevice);
        addStartNpc(NorthTeleportControlDevice);
        addStartNpc(EastTeleportControlDevice);
        addStartNpc(SouthTeleportControlDevice);
        for (int NPC : TALK)
        {
            addTalkId(NPC);
        }
    }
    
    private void teleportPlayer(L2Npc npc, L2PcInstance player, int[] coords, int instanceId)
    {
        for (L2Character cha : player.getKnownList().getKnownCharacters())
        {
            if (cha.isNpc() && ((((L2Npc) cha).getId() == Elcadia_Support) || (((L2Npc) cha).getId() == Elcadia_First_Room)))
            {
                cha.deleteMe();
            }
        }
        
        InstanceHolder holder = instanceWorlds.get(instanceId);
        if ((holder == null) && (instanceId > 0))
        {
            holder = new InstanceHolder();
            this.instanceWorlds.put(Integer.valueOf(instanceId), holder);
        }
        player.stopAllEffectsExceptThoseThatLastThroughDeath();
        player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
        player.setInstanceId(instanceId);
        player.teleToLocation(coords[0], coords[1], coords[2], false);
        cancelQuestTimer("check_follow", npc, player);
        if (holder != null)
        {
            for (L2Npc h : holder.mobs)
            {
                h.deleteMe();
            }
            holder.mobs.clear();
        }
        
        if ((holder != null) && (instanceId > 0))
        {
            L2Npc support = addSpawn(Elcadia_Support, player.getX(), player.getY(), player.getZ(), 0, false, 0L, false, player.getInstanceId());
            holder.mobs.add(support);
            startQuestTimer("check_follow", 3000, support, player);
        }
    }
    
    protected void enterInstance(L2Npc npc, L2PcInstance player)
    {
        InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
        if (world != null)
        {
            if (!(world instanceof MoSWorld2))
            {
                player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_ENTERED_ANOTHER_INSTANT_ZONE_THEREFORE_YOU_CANNOT_ENTER_CORRESPONDING_DUNGEON));
                return;
            }
            Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
            if (inst != null)
            {
                teleportPlayer(npc, player, TELEPORTS[ENTER], world.getInstanceId());
            }
            return;
        }
        final int instanceId = InstanceManager.getInstance().createDynamicInstance("MonasteryOfSilence.xml");
        
        world = new MoSWorld2();
        world.setInstanceId(instanceId);
        world.setTemplateId(INSTANCE_ID);
        world.setStatus(0);
        InstanceManager.getInstance().addWorld(world);
        
        world.addAllowed(player.getObjectId());
        
        teleportPlayer(npc, player, TELEPORTS[ENTER], instanceId);
        return;
    }
    
    @Override
    public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
    {
        String htmltext = getNoQuestMsg(player);
        QuestState st = player.getQuestState(MonasteryOfSilence2.class.getSimpleName());
        QuestState qs = player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
        QuestState qs1 = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
        if (st == null)
        {
            st = newQuestState(player);
        }
        if ("check_follow".equals(event))
        {
            cancelQuestTimer("check_follow", npc, player);
            npc.getAI().stopFollow();
            npc.setIsRunning(true);
            npc.getAI().startFollow(player);
            if ((qs != null) && (qs.getCond() == 2))
            {
                if (getRandom(10) < 1)
                {
                    npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.IT_SEEMS_THAT_YOU_CANNOT_REMEMBER_TO_THE_ROOM_OF_THE_WATCHER_WHO_FOUND_THE_BOOK));
                }
                else
                {
                    npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CANT_TAKE_THEM_OUT_WITH_YOU));
                }
            }
            if ((qs != null) && (qs.getCond() == 3))
            {
                if (getRandom(8) < 1)
                {
                    npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.YOUR_WORK_HERE_IS_DONE_SO_RETURN_TO_THE_CENTRAL_GUARDIAN));
                }
            }
            if ((qs1 != null) && (qs1.getCond() == 1))
            {
                if (getRandom(5) < 1)
                {
                    if (getRandom(10) < 1)
                    {
                        npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.TO_REMOVE_THE_BARRIER_YOU_MUST_FIND_THE_RELICS_THAT_FIT_THE_BARRIER_AND_ACTIVATE_THE_DEVICE));
                    }
                    else if (getRandom(15) < 1)
                    {
                        npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.THE_GUARDIAN_OF_THE_SEAL_DOESNT_SEEM_TO_GET_INJURED_AT_ALL_UNTIL_THE_BARRIER_IS_DESTROYED));
                    }
                    else
                    {
                        npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.THE_DEVICE_LOCATED_IN_THE_ROOM_IN_FRONT_OF_THE_GUARDIAN_OF_THE_SEAL_IS_DEFINITELY_THE_BARRIER_THAT_CONTROLS_THE_GUARDIANS_POWER));
                    }
                }
            }
            if (player.getCurrentHp() < (player.getMaxHp() * 0.8D))
            {
                npc.setTarget(player);
                npc.doSimultaneousCast(SkillData.getInstance().getSkill(6724, 1));
            }
            if (player.getCurrentMp() < (player.getMaxMp() * 0.5D))
            {
                npc.setTarget(player);
                npc.doSimultaneousCast(SkillData.getInstance().getSkill(6728, 1));
            }
            startQuestTimer("check_follow", 20000, npc, player);
            return "";
        }
        else if ("enter".equals(event))
        {
            enterInstance(npc, player);
            return null;
        }
        if (npc.getId() == ErissEvilThoughts)
        {
            if ("Enter1".equals(event))
            {
                if (qs1.getInt("seal_removed") != 1)
                {
                    qs1.startQuestTimer("StartMovie", 1000);
                    teleportPlayer(npc, player, TELEPORTS[ENTER1], player.getInstanceId());
                }
                else
                {
                    teleportPlayer(npc, player, TELEPORTS[MTS2], player.getInstanceId());
                }
                return null;
            }
            if ("Enter3".equals(event))
            {
                if ((qs.getInt("book_" + 32821) + qs.getInt("book_" + 32828) + qs.getInt("book_" + 32831) + qs.getInt("book_" + 32834)) != 4)
                {
                    qs.startQuestTimer("OpenMovie", 4000);
                }
                teleportPlayer(npc, player, TELEPORTS[HOLYGRAL], player.getInstanceId());
                return null;
            }
            else if ("video".equals(event))
            {
                player.showQuestMovie(29);
                startQuestTimer("teleport", 60000, npc, player);
                cancelQuestTimer("check_follow", npc, player);
                InstanceHolder holder = instanceWorlds.get(player.getInstanceId());
                if (holder != null)
                {
                    for (L2Npc h : holder.mobs)
                    {
                        h.deleteMe();
                    }
                    holder.mobs.clear();
                }
                return null;
            }
            else if ("teleport".equals(event))
            {
                teleportPlayer(npc, player, TELEPORTS[EE], player.getInstanceId());
                return null;
            }
        }
        else if ("buff".equals(event))
        {
            if (player.isMageClass())
            {
                for (int h : MageBuff)
                {
                    npc.setTarget(player);
                    npc.doSimultaneousCast(SkillData.getInstance().getSkill(h, 1));
                }
            }
            else
            {
                for (int h : FighterBuff)
                {
                    npc.setTarget(player);
                    npc.doSimultaneousCast(SkillData.getInstance().getSkill(h, 1));
                }
            }
            return null;
        }
        else if ("Exit".equals(event))
        {
            cancelQuestTimer("check_follow", npc, player);
            InstanceHolder holder = instanceWorlds.get(player.getInstanceId());
            if (holder != null)
            {
                for (L2Npc h : holder.mobs)
                {
                    h.deleteMe();
                }
                holder.mobs.clear();
            }
            teleportPlayer(npc, player, TELEPORTS[EXIT], 0);
            return null;
        }
        else if ("TeleWest".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[TW], player.getInstanceId());
            return null;
        }
        else if (event.equalsIgnoreCase("TeleNorth"))
        {
            teleportPlayer(npc, player, TELEPORTS[TN], player.getInstanceId());
            return null;
        }
        else if ("TeleEast".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[TE], player.getInstanceId());
            return null;
        }
        else if ("TeleSouth".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[TS], player.getInstanceId());
            return null;
        }
        else if ("ReturnToEris".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[RTE], player.getInstanceId());
            return null;
        }
        else if ("ReturnToGuardian".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[RTG], player.getInstanceId());
            return null;
        }
        else if ("MoveToSaintess".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[MTS], player.getInstanceId());
            return null;
        }
        else if ("MoveToSaintess2".equals(event))
        {
            teleportPlayer(npc, player, TELEPORTS[MTS2], player.getInstanceId());
            return null;
        }
        return htmltext;
    }
    
    @Override
    public String onTalk(L2Npc npc, L2PcInstance player)
    {
        String htmltext = getNoQuestMsg(player);
        QuestState st = player.getQuestState(MonasteryOfSilence2.class.getSimpleName());
        if (st == null)
        {
            st = newQuestState(player);
        }
        int npcId = npc.getId();
        if (npcId == OddGlobe)
        {
            if ((player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()) != null) && (player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()).getState() == State.STARTED))
            {
                enterInstance(npc, player);
                return null;
            }
            if ((player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()) != null) && (player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()).getState() == State.COMPLETED) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) == null))
            {
                enterInstance(npc, player);
                return null;
            }
            if ((player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) != null) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()).getState() != State.COMPLETED))
            {
                enterInstance(npc, player);
                return null;
            }
            if ((player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) != null) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()).getState() == State.COMPLETED) && (player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()) == null))
            {
                enterInstance(npc, player);
                return null;
            }
            if ((player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()) != null) && (player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()).getState() != State.COMPLETED))
            {
                enterInstance(npc, player);
                return null;
            }
            htmltext = "<html><body>Odd Globe:<br>The huge mechanism in the form of the globe. Around silent cottons are heard and in air presence of any unknown energy, which which in a way doesn't come under to your influence is felt.</body></html>";
        }
        return htmltext;
    }
    
    public static void main(String[] args)
    {
        new MonasteryOfSilence2();
    }
}
#86
L2 | Apartado de Soporte / Re:Cumpleaños todos los dias (...
Último mensaje por Swarlog - Nov 05, 2025, 11:09 PM
Pasa solucionarlo, debemos cambiar lo siguiente:

1.- Abrimos:

L2J_Server/java/com/l2jserver/gameserver/taskmanager/tasks/TaskBirthday.java

2.- Editamos:

{
 	private static final String NAME = "birthday";
 	private static final String NAME = "birthday";
 	/** Get all players that have had a birthday since last check. */
 	/** Get all players that have had a birthday since last check. */
-	private static final String SELECT_PENDING_BIRTHDAY_GIFTS = "SELECT charId, char_name, createDate, (YEAR(NOW()) - YEAR(createDate)) AS age " //
+	private static final String SELECT_PENDING_BIRTHDAY_GIFTS = "SELECT charId, char_name, createDate, (YEAR(NOW()) - YEAR(createDate)) AS age FROM characters WHERE (YEAR(NOW()) - YEAR(createDate) > 0) AND ((DATE_ADD(createDate, INTERVAL (YEAR(NOW()) - YEAR(createDate)) YEAR)) BETWEEN FROM_UNIXTIME(?) AND NOW())";
-		+ "FROM characters WHERE (YEAR(NOW()) - YEAR(createDate) > 0) AND (DATE_FORMAT(createDate, '%m-%d') > DATE_FORMAT(FROM_UNIXTIME(?), '%m-%d'))";
 	
 	
 	@Override
 	@Override
 	public String getName()
 	public String getName()

Y listo!
#87
L2 | Apartado de Soporte / Re:L2J-Event Engine: Error al ...
Último mensaje por Swarlog - Nov 05, 2025, 11:09 PM
Bueno ya te lo he resuelto, con tiempo crearé la guía del engine. Pero la cosa quedaría muy resumida en...

1.- Importamos el proyecto java en el eclipse mars.
2.- Luego exportamos >> boton derecho >> exportar >> java/jar >> añadir ruta en donde se creara el jar y todo next.
3.- Luego ese jar, lo pegamos en las librerias de l2jserver (server/dist/libs) y las añadimos al path del proyecto.

#88
L2 | Apartado de Soporte / Re:Multifunction zone -No da p...
Último mensaje por Swarlog - Nov 05, 2025, 11:08 PM
Solo tiene añadido la reward creo, tienes q añadirle el code para dar puntos pvp.

En el foro ya hay un apartado de ello ^^

Cita de: heladitoHola swarlog, es el mismo codigo que el del foro. Solo que al poner la zona de pvp como Giran Town, no te los suma :/ pero si la cambias, si lo hace.

Claro, tienes q decharar dicha zona como pvp (coliseum y tal). En los xml de las zonas puedes ponerlo, si no modificando el codigo para q cuando mates a alguien te de puntos pvp.

player.setPvpKills(player.getPvpKills() + 1);

#89
L2 | Apartado de Soporte / Re:Eclipse Git - Error al impo...
Último mensaje por Swarlog - Nov 05, 2025, 11:07 PM
Me pasaba lo mismo hace bastante tiempo, es debido a que el nombre del core esta cambiado.

Por defecto es "L2J_Server", así que tenemos que cambiarlo y poner el que pusimos. Para ello editamos los archivos "build" y "settings", y en donde dice "L2J_Server" lo cambias por el nombre indicado. En el caso de la imagen es el de "server_x10_core". Y solucionado!
#90
L2 | Apartado de Soporte / Re:No se ejecuta dbinst_gs.jar
Último mensaje por Swarlog - Nov 05, 2025, 11:06 PM
Cita de: djjoseinstala el JDK de java

Para ejecutar los *.jar no hace falta tener el JDK, con tener instalado JAVA es suficiente.

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.Hola, creo que tiene que ver con mi desconfiguración de java.

Quiero instalar una base de datos vacia, pero al pulsar sobre el instalador no se ejecuta. ¿Alguna solución? Gracias.

Para ejecutar el jar, puedes optar por crear un ejecutable. Para ello haz lo siguiente:

1.- Crea un documento de texto, de nombre instalador.

2.- Dale a guardar con ese nombre pero añadele lo siguiente ".bat", se te cambiara el formato del archivo.

3.- Editalo y añadele lo siguiente:

@echo off
color 2
TITLE U3Games - Instalador Externo
SET PATH=C:\Program Files\Java\jdk1.8.0_60\bin
java -jar dbinst_gs.jar

PAUSE

- Cambiale la version de java que tengas en el home, en mi caso "C:\Program Files\Java\jdk1.8.0_60\bin".
- Cambiale el archivo *.jar a ejecutar, en donde dice "dbinst_gs.jar".

Y listo ;)