diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg index 2ded593a625833ecec449293779906bfe150e792..bccfdbb5570fcf2772be45881b0b54897c1d6a29 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg +++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg @@ -14,6 +14,7 @@ handlers/MasterHandler.java ai/npc/DragonVortex/DragonVortex.java ai/npc/NpcBuffers/BirthdayCake.java ai/npc/NpcBuffers/CabaleBuffer.java +ai/npc/NpcBuffers/ChristmasTree.java ai/npc/NpcBuffers/Totems.java ai/npc/TerritoryManagers/TerritoryManagers.java ai/npc/Teleports/CrumaTower/CrumaTower.java diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java index 05bfb3f7aa0596719420daf9a32eb49353b238c9..d1c9e7d23a6e48e86290b16ae144fe8400a37573 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java @@ -109,7 +109,7 @@ public class BirthdayCake extends AbstractNpcAI } case BIRTHDAY_CAKE_24: { - final L2PcInstance player = (L2PcInstance) _npc.getSummoner(); + final L2PcInstance player = _npc.getSummoner().getActingPlayer(); if (player == null) { ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java new file mode 100644 index 0000000000000000000000000000000000000000..ddbecd6ea9bb3c3ec6ef2c053d995c27e2e1cf6f --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java @@ -0,0 +1,115 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ +package ai.npc.NpcBuffers; + +import ai.npc.AbstractNpcAI; + +import com.l2jserver.gameserver.ThreadPoolManager; +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.holders.SkillHolder; +import com.l2jserver.gameserver.model.skills.L2Skill; + +/** + * @author Drunkard Zabb0x + */ +public class ChristmasTree extends AbstractNpcAI +{ + private static final int CHRISTMAS_TREE = 13007; + + protected ChristmasTree(String name, String descr) + { + super(name, descr); + addFirstTalkId(CHRISTMAS_TREE); + addSpawnId(CHRISTMAS_TREE); + } + + @Override + public String onFirstTalk(L2Npc npc, L2PcInstance player) + { + return null; + } + + @Override + public String onSpawn(L2Npc npc) + { + addTask(npc); + return super.onSpawn(npc); + } + + private void addTask(L2Npc npc) + { + final SkillHolder holder = new SkillHolder(2139, 1); + ThreadPoolManager.getInstance().scheduleGeneral(new ChristmasTreeAI(npc, holder), 1000); + } + + protected class ChristmasTreeAI implements Runnable + { + private final L2Npc _npc; + private final SkillHolder _holder; + + protected ChristmasTreeAI(L2Npc npc, SkillHolder holder) + { + _npc = npc; + _holder = holder; + } + + @Override + public void run() + { + if ((_npc == null) || !_npc.isVisible() || (_holder == null) || (_holder.getSkill() == null)) + { + return; + } + + if (!_npc.isInsideZone(L2Character.ZONE_PEACE)) + { + L2Skill skill = _holder.getSkill(); + + final L2PcInstance player = _npc.getSummoner().getActingPlayer(); + if (player == null) + { + ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); + return; + } + + if (!player.isInParty()) + { + if (player.isInsideRadius(_npc, skill.getSkillRadius(), true, true)) + { + skill.getEffects(_npc, player); + } + } + else + { + for (L2PcInstance member : player.getParty().getMembers()) + { + if ((member != null) && member.isInsideRadius(_npc, skill.getSkillRadius(), true, true)) + { + skill.getEffects(_npc, member); + } + } + } + } + ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); + } + } + + public static void main(String[] args) + { + new ChristmasTree(ChristmasTree.class.getSimpleName(), "ai/npc"); + } +} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java index dec15a3d224cbc61893c241d348087cb6492f69d..50bb715c5cb22bfa71fa11d0966abcd889a706d1 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java @@ -20,7 +20,6 @@ */ package handlers.itemhandlers; -import java.util.Collection; import java.util.logging.Level; import com.l2jserver.gameserver.ThreadPoolManager; @@ -30,12 +29,10 @@ import com.l2jserver.gameserver.handler.IItemHandler; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Spawn; import com.l2jserver.gameserver.model.L2SummonItem; -import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Playable; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PetInstance; -import com.l2jserver.gameserver.model.actor.instance.L2XmassTreeInstance; import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate; import com.l2jserver.gameserver.model.entity.TvTEvent; import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; @@ -44,7 +41,6 @@ import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched; import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse; import com.l2jserver.gameserver.network.serverpackets.PetItemList; import com.l2jserver.gameserver.network.serverpackets.SetupGauge; -import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.util.Broadcast; /** * UnAfraid: TODO: Rewrite me :D @@ -117,18 +113,6 @@ public class SummonItems implements IItemHandler case 0: // static summons (like Christmas tree) try { - Collection<L2Character> characters = activeChar.getKnownList().getKnownCharactersInRadius(1200); - for (L2Character ch : characters) - { - if (ch instanceof L2XmassTreeInstance && npcTemplate.isSpecialTree()) - { - SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CANNOT_SUMMON_S1_AGAIN); - sm.addCharName(ch); - activeChar.sendPacket(sm); - return false; - } - } - if (activeChar.destroyItem("Summon", item.getObjectId(), 1, null, false)) { final L2Spawn spawn = new L2Spawn(npcTemplate); diff --git a/L2J_DataPack_BETA/dist/sql/game/npc.sql b/L2J_DataPack_BETA/dist/sql/game/npc.sql index 4ab1b627c9791f0972f2a1a11b09f96c787292f0..4fc616deb1aeccb8f35e8660393ccd223d242a83 100644 --- a/L2J_DataPack_BETA/dist/sql/game/npc.sql +++ b/L2J_DataPack_BETA/dist/sql/game/npc.sql @@ -266,7 +266,7 @@ INSERT INTO `npc` VALUES (13004, 13004, "Flame Control Tower", 0, "", 0, "LineageNPC.broadcasting_tower", 7, 35, 20, "etc", "L2FlameTower", 40, 342.5127, 192, 2.5, 1.2, 40, 43, 30, 21, 20, 10, 40, 10, 44.32863, 86.87049, 30.2707, 63.56806, 253, 4, 333, 0, 0, 0, 50, 1, 0, 1), (13005, 13005, "Flame Control Tower", 0, "", 0, "LineageNPC.dead_castle_aden_controltower_jewel", 7, 35, 20, "etc", "L2FlameTower", 40, 342.5127, 192, 2.5, 1.2, 40, 43, 30, 21, 20, 10, 40, 10, 44.32863, 86.87049, 30.2707, 63.56806, 253, 4, 333, 0, 0, 0, 50, 1, 0, 1), (13006, 13006, "Christmas Tree", 0, "", 0, "LineageDeco.x_mas_tree", 0.01, 0.01, 70, "male", "L2Npc", 40, 2444.46819, 1345.8, 7.5, 2.7, 40, 43, 30, 21, 20, 10, 490, 10, 688.86373, 295.91597, 470.40463, 216.53847, 253, 4, 333, 0, 0, 0, 30, 120, 0, 1), -(13007, 13007, "Special Christmas Tree", 0, "", 0, "LineageDeco.x_mas_tree_50_bi", 0.01, 0.01, 70, "male", "L2XmassTree", 40, 2444.46819, 1345.8, 7.5, 2.7, 40, 43, 30, 21, 20, 10, 490, 10, 688.86373, 295.91597, 470.40463, 216.53847, 253, 4, 333, 0, 0, 0, 30, 120, 0, 1), +(13007, 13007, "Special Christmas Tree", 0, "", 0, "LineageDeco.x_mas_tree_50_bi", 0.01, 0.01, 70, "male", "L2Npc", 40, 2444.46819, 1345.8, 7.5, 2.7, 40, 43, 30, 21, 20, 10, 490, 10, 688.86373, 295.91597, 470.40463, 216.53847, 253, 4, 333, 0, 0, 0, 30, 120, 0, 1), (13014, 13014, "", 0, "", 0, "LineageNPC.clear_npc", 0.1, 0.1, 85, "male", "L2Npc", 40, 3046.70947, 1846.8, 8.5, 3, 40, 43, 30, 21, 20, 10, 0, 0, 983.0479, 361.78814, 671.29428, 264.74086, 253, 4, 333, 0, 0, 0, 1, 160, 0, 1), (13015, 13015, "", 0, "", 0, "LineageMonster3.Evilate_weather", 16, 18.5, 85, "female", "L2Npc", 40, 3046.70947, 1846.8, 8.5, 3, 40, 43, 30, 21, 20, 20, 0, 0, 983.0479, 361.78814, 671.29428, 264.74086, 253, 4, 333, 0, 0, 0, 10, 1, 0, 1), (13016, 13016, "King Squash", 0, "", 0, "LineageNPC.drop_gourd", 23, 25, 1, "etc", "L2Npc", 40, 39.74519, 40, 2, 0.9, 40, 43, 30, 21, 20, 10, 0, 0, 8.47458, 44.44444, 5.78704, 32.52252, 253, 1, 333, 0, 0, 0, 50, 100, 0, 1),