diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg index 5095922d241755789587c8e029370893e2dd381e..304219a667f46a9de16d5f3543d3d52ed2685671 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg +++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg @@ -36,10 +36,8 @@ ai/npc/MercenaryCaptain/MercenaryCaptain.java ai/npc/Minigame/Minigame.java ai/npc/MonumentOfHeroes/MonumentOfHeroes.java ai/npc/Nottingale/Nottingale.java -ai/npc/NpcBuffers/BirthdayCake.java -ai/npc/NpcBuffers/CabaleBuffer.java -ai/npc/NpcBuffers/ChristmasTree.java -ai/npc/NpcBuffers/Totems.java +ai/npc/NpcBuffers/NpcBuffers.java +ai/npc/NpcBuffers/impl/CabaleBuffer.java ai/npc/PriestOfBlessing/PriestOfBlessing.java ai/npc/Rafforty/Rafforty.java ai/npc/SubclassCertification/SubclassCertification.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 deleted file mode 100644 index c2ca84179735be84db9cf95e6393d2dcd55570ba..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 ai.npc.NpcBuffers; - -import ai.npc.AbstractNpcAI; - -import com.l2jserver.gameserver.ThreadPoolManager; -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; -import com.l2jserver.gameserver.model.zone.ZoneId; - -/** - * @author UnAfraid - */ -public class BirthdayCake extends AbstractNpcAI -{ - private static final int BIRTHDAY_CAKE_24 = 106; - private static final int BIRTHDAY_CAKE = 139; - - protected BirthdayCake(String name, String descr) - { - super(name, descr); - addFirstTalkId(BIRTHDAY_CAKE, BIRTHDAY_CAKE_24); - addSpawnId(BIRTHDAY_CAKE, BIRTHDAY_CAKE_24); - } - - @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; - switch (npc.getId()) - { - case BIRTHDAY_CAKE: - { - holder = new SkillHolder(22035, 1); - break; - } - case BIRTHDAY_CAKE_24: - { - holder = new SkillHolder(22250, 1); - break; - } - default: - { - return; - } - } - - ThreadPoolManager.getInstance().scheduleGeneral(new BirthdayCakeAI(npc, holder), 1000); - } - - protected class BirthdayCakeAI implements Runnable - { - private final L2Npc _npc; - private final SkillHolder _holder; - - protected BirthdayCakeAI(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(ZoneId.PEACE)) - { - L2Skill skill = _holder.getSkill(); - switch (_npc.getId()) - { - case BIRTHDAY_CAKE: - { - for (L2PcInstance player : _npc.getKnownList().getKnownPlayersInRadius(skill.getAffectRange())) - { - skill.getEffects(_npc, player); - } - break; - } - case BIRTHDAY_CAKE_24: - { - final L2PcInstance player = _npc.getSummoner().getActingPlayer(); - if (player == null) - { - ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); - return; - } - - if (!player.isInParty()) - { - if (player.isInsideRadius(_npc, skill.getAffectRange(), true, true)) - { - skill.getEffects(_npc, player); - } - } - else - { - for (L2PcInstance member : player.getParty().getMembers()) - { - if ((member != null) && member.isInsideRadius(_npc, skill.getAffectRange(), true, true)) - { - skill.getEffects(_npc, member); - } - } - } - break; - } - } - } - ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); - } - } - - public static void main(String[] args) - { - new BirthdayCake(BirthdayCake.class.getSimpleName(), "ai/npc"); - } -} 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 deleted file mode 100644 index a1e117ef482d7002c6150d2a24c8d9757fdb9734..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 ai.npc.NpcBuffers; - -import ai.npc.AbstractNpcAI; - -import com.l2jserver.gameserver.ThreadPoolManager; -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; -import com.l2jserver.gameserver.model.zone.ZoneId; - -/** - * @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(ZoneId.PEACE)) - { - L2Skill skill = _holder.getSkill(); - - if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer()) - { - ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); - return; - } - - final L2PcInstance player = _npc.getSummoner().getActingPlayer(); - - if (!player.isInParty()) - { - if (player.isInsideRadius(_npc, skill.getAffectRange(), true, true)) - { - skill.getEffects(_npc, player); - } - } - else - { - for (L2PcInstance member : player.getParty().getMembers()) - { - if ((member != null) && member.isInsideRadius(_npc, skill.getAffectRange(), 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/ai/npc/NpcBuffers/NpcBufferAI.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java new file mode 100644 index 0000000000000000000000000000000000000000..8fb3ab1d8c3c7c018c8ff2c32bffd6e041d12d4e --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2004-2013 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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 Server 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 com.l2jserver.Config; +import com.l2jserver.gameserver.ThreadPoolManager; +import com.l2jserver.gameserver.model.L2Party; +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.skills.L2Skill; +import com.l2jserver.gameserver.util.Util; + +/** + * @author UnAfraid + */ +public class NpcBufferAI implements Runnable +{ + private final L2Npc _npc; + private final NpcBufferSkillData _skillData; + + protected NpcBufferAI(L2Npc npc, NpcBufferSkillData skill) + { + _npc = npc; + _skillData = skill; + } + + @Override + public void run() + { + if ((_npc == null) || !_npc.isVisible() || _npc.isDecayed() || _npc.isDead() || (_skillData == null) || (_skillData.getSkill() == null)) + { + return; + } + + final L2Skill skill = _skillData.getSkill(); + if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer()) + { + return; + } + final L2PcInstance player = _npc.getSummoner().getActingPlayer(); + switch (_skillData.getAffectScope()) + { + case PARTY: + { + if (!player.isInParty()) + { + if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, player, true)) + { + skill.getEffects(player, player); + } + } + else + { + for (L2PcInstance member : player.getParty().getMembers()) + { + if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, member, true)) + { + skill.getEffects(player, member); + } + } + } + break; + } + case RANGE: + { + for (L2Character target : _npc.getKnownList().getKnownCharactersInRadius(skill.getAffectRange())) + { + switch (_skillData.getAffectObject()) + { + case FRIEND: + { + if (isFriendly(player, target)) + { + skill.getEffects(target, target); + } + break; + } + case NOT_FRIEND: + { + if (!isFriendly(player, target)) + { + skill.getEffects(target, target); + } + break; + } + } + } + break; + } + } + ThreadPoolManager.getInstance().scheduleGeneral(this, _skillData.getDelay()); + } + + private boolean isFriendly(L2PcInstance player, L2Character target) + { + if (target.isPlayable()) + { + final L2PcInstance targetPlayer = target.getActingPlayer(); + if (targetPlayer == null) + { + return false; + } + + if (player.isInParty()) + { + final L2Party party = player.getParty(); + + // Same party. + if (party.containsPlayer(targetPlayer)) + { + return true; + } + + // Same command channel. + if (party.isInCommandChannel() && party.getCommandChannel().containsPlayer(targetPlayer)) + { + return true; + } + } + + // Same clan. + if ((player.getClanId() > 0) && (player.getClanId() == target.getClanId())) + { + return true; + } + + // Same ally. + if ((player.getAllyId() > 0) && (player.getAllyId() == target.getAllyId())) + { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java new file mode 100644 index 0000000000000000000000000000000000000000..c0421e04fd1e8b735316dff67b1d0c99232fa3bd --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2004-2013 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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 Server 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 java.util.ArrayList; +import java.util.List; + +/** + * @author UnAfraid + */ +public class NpcBufferData +{ + private final int _id; + private final List<NpcBufferSkillData> _skills = new ArrayList<>(); + + public NpcBufferData(int id) + { + _id = id; + } + + public int getId() + { + return _id; + } + + public void addSkill(NpcBufferSkillData skill) + { + _skills.add(skill); + } + + public List<NpcBufferSkillData> getSkills() + { + return _skills; + } +} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java new file mode 100644 index 0000000000000000000000000000000000000000..209433c33b005df307d3d2f947188dddc7b8e577 --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2004-2013 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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 Server 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 com.l2jserver.gameserver.model.StatsSet; +import com.l2jserver.gameserver.model.holders.SkillHolder; +import com.l2jserver.gameserver.model.skills.L2Skill; +import com.l2jserver.gameserver.model.skills.targets.AffectObject; +import com.l2jserver.gameserver.model.skills.targets.AffectScope; + +/** + * @author UnAfraid + */ +public class NpcBufferSkillData +{ + private final SkillHolder _skill; + private final int _initialDelay; + private final int _delay; + private final AffectScope _affectScope; + private final AffectObject _affectObject; + + public NpcBufferSkillData(StatsSet set) + { + _skill = new SkillHolder(set.getInt("id"), set.getInt("level")); + _initialDelay = set.getInt("skillInitDelay", 0) * 1000; + _delay = set.getInt("delay") * 1000; + _affectScope = set.getEnum("affectScope", AffectScope.class); + _affectObject = set.getEnum("affectObject", AffectObject.class); + } + + public L2Skill getSkill() + { + return _skill.getSkill(); + } + + public int getInitialDelay() + { + return _initialDelay; + } + + public int getDelay() + { + return _delay; + } + + public AffectScope getAffectScope() + { + return _affectScope; + } + + public AffectObject getAffectObject() + { + return _affectObject; + } +} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java new file mode 100644 index 0000000000000000000000000000000000000000..e017fe3f64d85327697a9021dc8d5bc80277c290 --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2004-2013 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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 Server 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.L2Npc; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; + +/** + * @author UnAfraid + */ +public final class NpcBuffers extends AbstractNpcAI +{ + private final NpcBuffersData _npcBuffers = new NpcBuffersData(); + + private NpcBuffers(String name, String descr) + { + super(name, descr); + + for (int npcId : _npcBuffers.getNpcBufferIds()) + { + // TODO: Cleanup once npc rework is finished and default html is configurable. + addFirstTalkId(npcId); + addSpawnId(npcId); + } + } + + // TODO: Cleanup once npc rework is finished and default html is configurable. + @Override + public String onFirstTalk(L2Npc npc, L2PcInstance player) + { + return null; + } + + @Override + public String onSpawn(L2Npc npc) + { + final NpcBufferData data = _npcBuffers.getNpcBuffer(npc.getId()); + for (NpcBufferSkillData skill : data.getSkills()) + { + ThreadPoolManager.getInstance().scheduleAi(new NpcBufferAI(npc, skill), skill.getInitialDelay()); + } + return super.onSpawn(npc); + } + + public static void main(String[] args) + { + new NpcBuffers(NpcBuffers.class.getSimpleName(), "npc"); + } +} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java new file mode 100644 index 0000000000000000000000000000000000000000..44200980f2d98c6c51197ad3c738c662bcd03c2f --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2004-2013 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 ai.npc.NpcBuffers; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; + +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; + +import com.l2jserver.gameserver.engines.DocumentParser; +import com.l2jserver.gameserver.model.StatsSet; + +/** + * @author UnAfraid + */ +public class NpcBuffersData extends DocumentParser +{ + private final Map<Integer, NpcBufferData> _npcBuffers = new HashMap<>(); + + protected NpcBuffersData() + { + load(); + } + + @Override + public void load() + { + parseDatapackFile("data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml"); + _log.log(Level.INFO, getClass().getSimpleName() + ": Loaded: " + _npcBuffers.size() + " buffers data."); + } + + @Override + protected void parseDocument() + { + StatsSet set; + Node attr; + NamedNodeMap attrs; + for (Node n = getCurrentDocument().getFirstChild(); n != null; n = n.getNextSibling()) + { + if ("list".equalsIgnoreCase(n.getNodeName())) + { + for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) + { + if ("npc".equalsIgnoreCase(d.getNodeName())) + { + attrs = d.getAttributes(); + final int npcId = parseInt(attrs, "id"); + final NpcBufferData npc = new NpcBufferData(npcId); + for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) + { + switch (c.getNodeName()) + { + case "skill": + { + attrs = c.getAttributes(); + set = new StatsSet(); + for (int i = 0; i < attrs.getLength(); i++) + { + attr = attrs.item(i); + set.set(attr.getNodeName(), attr.getNodeValue()); + } + npc.addSkill(new NpcBufferSkillData(set)); + break; + } + } + } + _npcBuffers.put(npcId, npc); + } + } + } + } + } + + public NpcBufferData getNpcBuffer(int npcId) + { + return _npcBuffers.get(npcId); + } + + public Collection<NpcBufferData> getNpcBuffers() + { + return _npcBuffers.values(); + } + + public Set<Integer> getNpcBufferIds() + { + return _npcBuffers.keySet(); + } +} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml new file mode 100644 index 0000000000000000000000000000000000000000..6bc5566ec7abb5f3e2b76fb8bd945b4a047e14f3 --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml @@ -0,0 +1,101 @@ +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NpcBuffersData.xsd"> + <npc id="106"> <!-- Birthday Cake --> + <skill id="22250" level="1" initialDelay="1" delay="60" affectScope="PARTY" affectObject="FRIEND" /> <!-- Birthday Cake Vitality Buff --> + </npc> + <npc id="139"> <!-- Birthday Cake --> + <skill id="22035" level="1" initialDelay="1" delay="60" affectScope="PARTY" affectObject="FRIEND" /> <!-- Birthday Cake Vitality Buff --> + </npc> + <npc id="143"> <!-- Totem of Body --> + <skill id="23308" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Body --> + </npc> + <npc id="144"> <!-- Totem of Spirit --> + <skill id="23309" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Spirit --> + </npc> + <npc id="145"> <!-- Totem of Bravery --> + <skill id="23310" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Courage --> + </npc> + <npc id="146"> <!-- Totem of Fortitude --> + <skill id="23311" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Fortitude --> + </npc> + <npc id="13007"> <!-- Special Christmas Tree --> + <skill id="2139" level="1" initialDelay="1" delay="10" affectScope="RANGE" affectObject="FRIEND" /> <!-- Special Tree Recovery Bonus --> + </npc> + <npc id="13018"> + <skill id="5123" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Defense --> + </npc> + <npc id="13019"> + <skill id="5124" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Anti-Music --> + </npc> + <npc id="13020"> + <skill id="5125" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Resist Status --> + </npc> + <npc id="13021"> + <skill id="5126" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Recovery --> + </npc> + <npc id="13022"> + <skill id="5127" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Recover Force --> + </npc> + <npc id="13023"> + <skill id="5128" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximize long-range weapon use --> + </npc> + <npc id="13024"> + <skill id="5129" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Smokescreen --> + </npc> + <npc id="13025"> + <skill id="5145" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Day of Doom --> + </npc> + <npc id="13030"> + <skill id="5134" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Anti-Summoning Field --> + </npc> + <npc id="13071"> <!-- Virtual Image --> + <skill id="5272" level="1" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13072"> <!-- Virtual Image --> + <skill id="5272" level="2" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13073"> <!-- Virtual Image --> + <skill id="5272" level="3" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13074"> <!-- Virtual Image --> + <skill id="5272" level="4" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13075"> <!-- Virtual Image --> + <skill id="5272" level="5" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13076"> <!-- Virtual Image --> + <skill id="5272" level="6" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13257"> <!-- Virtual Image --> + <skill id="5272" level="7" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13258"> <!-- Virtual Image --> + <skill id="5272" level="8" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13259"> <!-- Virtual Image --> + <skill id="5272" level="9" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13260"> <!-- Virtual Image --> + <skill id="5272" level="10" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13261"> <!-- Virtual Image --> + <skill id="5272" level="11" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13262"> <!-- Virtual Image --> + <skill id="5272" level="12" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13263"> <!-- Virtual Image --> + <skill id="5272" level="13" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13264"> <!-- Virtual Image --> + <skill id="5272" level="14" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13265"> <!-- Virtual Image --> + <skill id="5272" level="15" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13266"> <!-- Virtual Image --> + <skill id="5272" level="16" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> + <npc id="13267"> <!-- Virtual Image --> + <skill id="5272" level="17" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation --> + </npc> +</list> \ No newline at end of file diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd new file mode 100644 index 0000000000000000000000000000000000000000..4d7f9ae9a406d0f2a626d4988033e615b101b9ec --- /dev/null +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd @@ -0,0 +1,25 @@ +<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:element name="list"> + <xs:complexType> + <xs:sequence> + <xs:element name="npc" maxOccurs="unbounded" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="skill"> + <xs:complexType> + <xs:attribute type="xs:positiveInteger" name="id" use="required" /> + <xs:attribute type="xs:short" name="level" use="required" /> + <xs:attribute type="xs:positiveInteger" name="initialDelay" use="optional" /> + <xs:attribute type="xs:positiveInteger" name="delay" use="required" /> + <xs:attribute type="xs:string" name="affectScope" use="optional" /> + <xs:attribute type="xs:string" name="affectObject" use="optional" /> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute type="xs:positiveInteger" name="id" use="required" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> \ No newline at end of file diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java deleted file mode 100644 index d132cca552af6ba42306530803085f9c471ab9f2..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 ai.npc.NpcBuffers; - -import ai.npc.AbstractNpcAI; - -import com.l2jserver.gameserver.ThreadPoolManager; -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 UnAfraid - */ -public class Totems extends AbstractNpcAI -{ - private static final int TOTEM_OF_BODY = 143; - private static final int TOTEM_OF_SPIRIT = 144; - private static final int TOTEM_OF_BRAVERY = 145; - private static final int TOTEM_OF_FORTITUDE = 146; - - protected Totems(String name, String descr) - { - super(name, descr); - addFirstTalkId(TOTEM_OF_BODY, TOTEM_OF_SPIRIT, TOTEM_OF_BRAVERY, TOTEM_OF_FORTITUDE); - addSpawnId(TOTEM_OF_BODY, TOTEM_OF_SPIRIT, TOTEM_OF_BRAVERY, TOTEM_OF_FORTITUDE); - } - - @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; - switch (npc.getId()) - { - case TOTEM_OF_BODY: - { - holder = new SkillHolder(23308, 1); - break; - } - case TOTEM_OF_SPIRIT: - { - holder = new SkillHolder(23309, 1); - break; - } - case TOTEM_OF_BRAVERY: - { - holder = new SkillHolder(23310, 1); - break; - } - case TOTEM_OF_FORTITUDE: - { - holder = new SkillHolder(23311, 1); - break; - } - default: - { - return; - } - } - - ThreadPoolManager.getInstance().scheduleGeneral(new TotemAI(npc, holder), 1000); - } - - protected class TotemAI implements Runnable - { - private final L2Npc _npc; - private final SkillHolder _holder; - - protected TotemAI(L2Npc npc, SkillHolder holder) - { - _npc = npc; - _holder = holder; - } - - @Override - public void run() - { - if ((_npc == null) || !_npc.isVisible() || (_holder == null) || (_holder.getSkill() == null)) - { - return; - } - - L2Skill skill = _holder.getSkill(); - for (L2PcInstance player : _npc.getKnownList().getKnownPlayersInRadius(skill.getAffectRange())) - { - if (player.getFirstEffect(skill.getId()) == null) - { - skill.getEffects(player, player); - } - } - ThreadPoolManager.getInstance().scheduleGeneral(this, 1000); - } - } - - public static void main(String[] args) - { - new Totems(Totems.class.getSimpleName(), "ai/npc"); - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java similarity index 96% rename from L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java rename to L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java index 260f4471b21140ef52aceedc6a33c74cc3856e42..d1b38359928c3068e6d0d8755a9210f47362173e 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java @@ -16,7 +16,7 @@ * 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; +package ai.npc.NpcBuffers.impl; import java.util.Collection; diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java index 0738a5e71909757550ee3efdcdad955baae47e3e..10e0cfd68aabe1edf2b9b795b4e1432e9865eb8c 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -94,7 +94,6 @@ public final class EffectMasterHandler Flag.class, FocusMaxEnergy.class, FocusSouls.class, - Fusion.class, GetAgro.class, GiveSp.class, Grow.class, @@ -147,10 +146,6 @@ public final class EffectMasterHandler Root.class, ServitorShare.class, SetSkill.class, - Signet.class, - SignetAntiSummon.class, - SignetMDam.class, - SignetNoise.class, SilentMove.class, SkillTurning.class, Sleep.class, diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java deleted file mode 100644 index eb2eb9b6614b4fe706b1d7d762d8c5b11fb6e939..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 handlers.effecthandlers; - -import com.l2jserver.gameserver.datatables.SkillTable; -import com.l2jserver.gameserver.model.effects.EffectTemplate; -import com.l2jserver.gameserver.model.effects.L2Effect; -import com.l2jserver.gameserver.model.effects.L2EffectType; -import com.l2jserver.gameserver.model.stats.Env; - -/** - * Fusion effect implementation. - * @author Kerberos - */ -public class Fusion extends L2Effect -{ - public int _effect; - public int _maxEffect; - - public Fusion(Env env, EffectTemplate template) - { - super(env, template); - _effect = getSkill().getLevel(); - _maxEffect = SkillTable.getInstance().getMaxLevel(getSkill().getId()); - } - - @Override - public void decreaseForce() - { - _effect--; - if (_effect < 1) - { - exit(); - } - else - { - updateBuff(); - } - } - - @Override - public L2EffectType getEffectType() - { - return L2EffectType.FUSION; - } - - @Override - public void increaseEffect() - { - if (_effect < _maxEffect) - { - _effect++; - updateBuff(); - } - } - - private void updateBuff() - { - exit(); - SkillTable.getInstance().getInfo(getSkill().getId(), _effect).getEffects(getEffector(), getEffected()); - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java deleted file mode 100644 index 32319d989654c448d41252be46458cb8446aa3dc..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 handlers.effecthandlers; - -import java.util.ArrayList; -import java.util.List; - -import com.l2jserver.gameserver.datatables.SkillTable; -import com.l2jserver.gameserver.model.actor.L2Character; -import com.l2jserver.gameserver.model.effects.EffectTemplate; -import com.l2jserver.gameserver.model.effects.L2Effect; -import com.l2jserver.gameserver.model.effects.L2EffectType; -import com.l2jserver.gameserver.model.skills.L2Skill; -import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignet; -import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignetCasttime; -import com.l2jserver.gameserver.model.stats.Env; -import com.l2jserver.gameserver.model.zone.ZoneId; -import com.l2jserver.gameserver.network.SystemMessageId; -import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse; - -/** - * Signet effect implementation. - * @author Forsaiken, Sami - */ -public class Signet extends L2Effect -{ - private L2Skill _skill; - private boolean _srcInArena; - - public Signet(Env env, EffectTemplate template) - { - super(env, template); - } - - @Override - public L2EffectType getEffectType() - { - return L2EffectType.SIGNET_EFFECT; - } - - @Override - public boolean onActionTime() - { - if (_skill == null) - { - return false; - } - - int mpConsume = _skill.getMpConsume(); - if (mpConsume > getEffector().getCurrentMp()) - { - getEffector().sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP); - return false; - } - getEffector().reduceCurrentMp(mpConsume); - - List<L2Character> targets = new ArrayList<>(); - for (L2Character cha : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange())) - { - if (cha == null) - { - continue; - } - - if (_skill.isBad() && !L2Skill.checkForAreaOffensiveSkills(getEffector(), cha, _skill, _srcInArena)) - { - continue; - } - - getEffected().broadcastPacket(new MagicSkillUse(getEffected(), cha, _skill.getId(), _skill.getLevel(), 0, 0)); - targets.add(cha); - } - - if (!targets.isEmpty()) - { - getEffector().callSkill(_skill, targets.toArray(new L2Character[targets.size()])); - } - return false; - } - - @Override - public void onExit() - { - if (getEffected() != null) - { - getEffected().deleteMe(); - } - } - - @Override - public boolean onStart() - { - if (getSkill() instanceof L2SkillSignet) - { - _skill = SkillTable.getInstance().getInfo(getSkill().getEffectId(), getSkill().getLevel()); - } - else if (getSkill() instanceof L2SkillSignetCasttime) - { - _skill = SkillTable.getInstance().getInfo(getSkill().getEffectId(), getSkill().getLevel()); - } - _srcInArena = (getEffector().isInsideZone(ZoneId.PVP) && !getEffector().isInsideZone(ZoneId.SIEGE)); - return true; - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java deleted file mode 100644 index 80a11b82da20e99df5defbaaf5aa1c6ee8cb15ea..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 handlers.effecthandlers; - -import com.l2jserver.gameserver.ai.CtrlEvent; -import com.l2jserver.gameserver.model.actor.L2Character; -import com.l2jserver.gameserver.model.actor.L2Summon; -import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; -import com.l2jserver.gameserver.model.effects.EffectTemplate; -import com.l2jserver.gameserver.model.effects.L2Effect; -import com.l2jserver.gameserver.model.effects.L2EffectType; -import com.l2jserver.gameserver.model.stats.Env; -import com.l2jserver.gameserver.network.SystemMessageId; - -/** - * Signet Anti Summon effect implementation. - * @author Forsaiken - */ -public class SignetAntiSummon extends L2Effect -{ - public SignetAntiSummon(Env env, EffectTemplate template) - { - super(env, template); - } - - @Override - public L2EffectType getEffectType() - { - return L2EffectType.SIGNET_GROUND; - } - - @Override - public boolean onActionTime() - { - int mpConsume = getSkill().getMpConsume(); - L2PcInstance caster = getEffector().getActingPlayer(); - for (L2Character cha : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange())) - { - if (cha == null) - { - continue; - } - - if (cha.isPlayable()) - { - if (caster.canAttackCharacter(cha)) - { - L2PcInstance owner = null; - if (cha.isSummon()) - { - owner = ((L2Summon) cha).getOwner(); - } - else - { - owner = cha.getActingPlayer(); - } - - if ((owner != null) && owner.hasSummon()) - { - if (mpConsume > getEffector().getCurrentMp()) - { - getEffector().sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP); - return false; - } - - getEffector().reduceCurrentMp(mpConsume); - owner.getSummon().unSummon(owner); - owner.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, getEffector()); - } - } - } - } - return false; - } - - @Override - public void onExit() - { - if (getEffected() != null) - { - getEffected().deleteMe(); - } - } - - @Override - public boolean onStart() - { - return true; - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java deleted file mode 100644 index d20d97dced34bc391854755130b07f6bca47ff91..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (C) 2004-2013 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/>. - */ - -/** - * @author Forsaiken - */ -package handlers.effecthandlers; - -import java.util.ArrayList; -import java.util.List; - -import com.l2jserver.gameserver.ai.CtrlEvent; -import com.l2jserver.gameserver.datatables.NpcTable; -import com.l2jserver.gameserver.enums.ShotType; -import com.l2jserver.gameserver.idfactory.IdFactory; -import com.l2jserver.gameserver.model.actor.L2Character; -import com.l2jserver.gameserver.model.actor.instance.L2EffectPointInstance; -import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; -import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jserver.gameserver.model.effects.EffectTemplate; -import com.l2jserver.gameserver.model.effects.L2Effect; -import com.l2jserver.gameserver.model.effects.L2EffectType; -import com.l2jserver.gameserver.model.skills.targets.L2TargetType; -import com.l2jserver.gameserver.model.stats.Env; -import com.l2jserver.gameserver.model.stats.Formulas; -import com.l2jserver.gameserver.network.SystemMessageId; -import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched; -import com.l2jserver.gameserver.util.Point3D; - -/** - * Signet MDam effect implementation. - */ -public class SignetMDam extends L2Effect -{ - private L2EffectPointInstance _actor; - - public SignetMDam(Env env, EffectTemplate template) - { - super(env, template); - } - - @Override - public L2EffectType getEffectType() - { - return L2EffectType.SIGNET_GROUND; - } - - @Override - public boolean onActionTime() - { - if (_actor == null) - { - return false; - } - - final int mpConsume = getSkill().getMpConsume(); - final L2PcInstance activeChar = getEffector().getActingPlayer(); - activeChar.rechargeShots(getSkill().useSoulShot(), getSkill().useSpiritShot()); - boolean sps = getSkill().useSpiritShot() && getEffector().isChargedShot(ShotType.SPIRITSHOTS); - boolean bss = getSkill().useSpiritShot() && getEffector().isChargedShot(ShotType.BLESSED_SPIRITSHOTS); - final List<L2Character> targets = new ArrayList<>(); - for (L2Character cha : _actor.getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange())) - { - if ((cha == null) || (cha == activeChar)) - { - continue; - } - - if (cha.isL2Attackable() || cha.isPlayable()) - { - if (cha.isAlikeDead()) - { - continue; - } - - if (mpConsume > activeChar.getCurrentMp()) - { - activeChar.sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP); - return false; - } - - activeChar.reduceCurrentMp(mpConsume); - if (cha.isPlayable()) - { - if (activeChar.canAttackCharacter(cha)) - { - targets.add(cha); - activeChar.updatePvPStatus(cha); - } - } - else - { - targets.add(cha); - } - } - } - - if (!targets.isEmpty()) - { - activeChar.broadcastPacket(new MagicSkillLaunched(activeChar, getSkill().getId(), getSkill().getLevel(), targets.toArray(new L2Character[targets.size()]))); - for (L2Character target : targets) - { - final boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, getSkill())); - final byte shld = Formulas.calcShldUse(activeChar, target, getSkill()); - final int mdam = (int) Formulas.calcMagicDam(activeChar, target, getSkill(), shld, sps, bss, mcrit); - - if (target.isSummon()) - { - target.broadcastStatusUpdate(); - } - - if (mdam > 0) - { - if (!target.isRaid() && Formulas.calcAtkBreak(target, mdam)) - { - target.breakAttack(); - target.breakCast(); - } - activeChar.sendDamageMessage(target, mdam, mcrit, false, false); - target.reduceCurrentHp(mdam, activeChar, getSkill()); - target.notifyDamageReceived(mdam, activeChar, getSkill(), mcrit); - } - target.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, activeChar); - } - } - activeChar.setChargedShot(bss ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS, false); - return false; - } - - @Override - public void onExit() - { - if (_actor != null) - { - _actor.deleteMe(); - } - } - - @Override - public boolean onStart() - { - final L2NpcTemplate template = NpcTable.getInstance().getTemplate(getSkill().getNpcId()); - _actor = new L2EffectPointInstance(IdFactory.getInstance().getNextId(), template, getEffector()); - _actor.setCurrentHp(_actor.getMaxHp()); - _actor.setCurrentMp(_actor.getMaxMp()); - int x = getEffector().getX(); - int y = getEffector().getY(); - int z = getEffector().getZ(); - if (getEffector().isPlayer() && (getSkill().getTargetType() == L2TargetType.GROUND)) - { - final Point3D wordPosition = getEffector().getActingPlayer().getCurrentSkillWorldPosition(); - if (wordPosition != null) - { - x = wordPosition.getX(); - y = wordPosition.getY(); - z = wordPosition.getZ(); - } - } - _actor.setIsInvul(true); - _actor.spawnMe(x, y, z); - return true; - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java deleted file mode 100644 index 3b52a6a95d1cd7c9a7e076646cca41685765ffaa..0000000000000000000000000000000000000000 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2004-2013 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 handlers.effecthandlers; - -import com.l2jserver.gameserver.model.actor.L2Character; -import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; -import com.l2jserver.gameserver.model.effects.EffectTemplate; -import com.l2jserver.gameserver.model.effects.L2Effect; -import com.l2jserver.gameserver.model.effects.L2EffectType; -import com.l2jserver.gameserver.model.stats.Env; - -/** - * Signet Noise effect implementation. - * @author Forsaiken, Sami - */ -public class SignetNoise extends L2Effect -{ - public SignetNoise(Env env, EffectTemplate template) - { - super(env, template); - } - - @Override - public L2EffectType getEffectType() - { - return L2EffectType.SIGNET_GROUND; - } - - @Override - public boolean onActionTime() - { - L2PcInstance caster = getEffector().getActingPlayer(); - for (L2Character target : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange())) - { - if ((target == null) || (target == caster)) - { - continue; - } - - if (caster.canAttackCharacter(target)) - { - for (L2Effect effect : target.getAllEffects()) - { - if (effect.getSkill().isDance()) - { - effect.exit(); - } - } - } - } - return false; - } - - @Override - public void onExit() - { - if (getEffected() != null) - { - getEffected().deleteMe(); - } - } - - @Override - public boolean onStart() - { - return true; - } -} diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java index 7adb7ac764c042a86a9edde441c1c1cd5f6c7364..3c43260e7d867e0e93cef19864a5a32874618bd0 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java @@ -104,6 +104,7 @@ public class SummonNpc extends L2Effect decoy.setCurrentMp(decoy.getMaxMp()); decoy.setHeading(player.getHeading()); decoy.setInstanceId(player.getInstanceId()); + decoy.setSummoner(player); decoy.spawnMe(player.getX(), player.getY(), player.getZ()); player.setDecoy(decoy); break; @@ -127,9 +128,13 @@ public class SummonNpc extends L2Effect z = wordPosition.getZ(); } } - getSkill().getEffects(player, effectPoint); effectPoint.setIsInvul(true); + effectPoint.setSummoner(player); effectPoint.spawnMe(x, y, z); + if (_despawnDelay > 0) + { + effectPoint.scheduleDespawn(_despawnDelay); + } break; } default: @@ -160,9 +165,9 @@ public class SummonNpc extends L2Effect spawn.stopRespawn(); final L2Npc npc = spawn.doSpawn(_isSummonSpawn); + npc.setSummoner(player); npc.setName(npcTemplate.getName()); npc.setTitle(npcTemplate.getName()); - npc.setSummoner(player); if (_despawnDelay > 0) { npc.scheduleDespawn(_despawnDelay); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java index f6a972b4fe644f3bd70e16c2a2941b274906989f..204089357259fe95728fa500924abc2b2e44f4d0 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java @@ -20,7 +20,6 @@ package handlers.skillhandlers; import java.util.List; -import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.enums.ShotType; import com.l2jserver.gameserver.handler.ISkillHandler; import com.l2jserver.gameserver.instancemanager.DuelManager; @@ -43,7 +42,6 @@ public class Continuous implements ISkillHandler L2SkillType.BUFF, L2SkillType.DEBUFF, L2SkillType.CONT, - L2SkillType.FUSION }; @Override @@ -57,16 +55,6 @@ public class Continuous implements ISkillHandler player = activeChar.getActingPlayer(); } - if (skill.getEffectId() != 0) - { - L2Skill sk = SkillTable.getInstance().getInfo(skill.getEffectId(), skill.getEffectLvl() == 0 ? 1 : skill.getEffectLvl()); - - if (sk != null) - { - skill = sk; - } - } - boolean ss = skill.useSoulShot() && activeChar.isChargedShot(ShotType.SOULSHOTS); boolean sps = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS); boolean bss = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java index 1742c2e814de19363ce554b217e85dc2841e394d..33fec0b10a08283672fe061fec8640e1b51d64e9 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java @@ -21,10 +21,10 @@ package handlers.targethandlers; import java.util.ArrayList; import java.util.List; +import com.l2jserver.Config; import com.l2jserver.gameserver.handler.ITargetTypeHandler; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.actor.L2Character; -import com.l2jserver.gameserver.model.actor.L2Summon; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.skills.L2Skill; import com.l2jserver.gameserver.model.skills.targets.L2TargetType; @@ -38,46 +38,29 @@ public class PartyNotMe implements ITargetTypeHandler @Override public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target) { - List<L2Character> targetList = new ArrayList<>(); - if (onlyFirst) - { - return new L2Character[] - { - activeChar - }; - } - - L2PcInstance player = null; - - if (activeChar.isSummon()) - { - player = ((L2Summon) activeChar).getOwner(); - targetList.add(player); - } - else if (activeChar.isPlayer()) - { - player = activeChar.getActingPlayer(); - if (activeChar.getSummon() != null) - { - targetList.add(activeChar.getSummon()); - } - } - + final List<L2Character> targetList = new ArrayList<>(); if (activeChar.getParty() != null) { - List<L2PcInstance> partyList = activeChar.getParty().getMembers(); - + final List<L2PcInstance> partyList = activeChar.getParty().getMembers(); for (L2PcInstance partyMember : partyList) { - if (partyMember == null) + if ((partyMember == null) || partyMember.isDead()) + { + continue; + } + else if (partyMember == activeChar) + { + continue; + } + else if (!Util.checkIfInRange(Config.ALT_PARTY_RANGE, activeChar, partyMember, true)) { continue; } - else if (partyMember == player) + else if ((skill.getAffectRange() > 0) && !Util.checkIfInRange(skill.getAffectRange(), activeChar, partyMember, true)) { continue; } - else if (!partyMember.isDead() && Util.checkIfInRange(skill.getAffectRange(), activeChar, partyMember, true)) + else { targetList.add(partyMember); diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml index 8b81423f4084e69ffb14a8c688984a87d62a8a2c..c9d5032a9ffc6d30b45d53beb839015895ef21b9 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml @@ -1140,22 +1140,34 @@ <skill id="426" levels="1" name="Battle Force"> <!-- Not Used Anymore --> <set name="effectPoint" val="1" /> + <set name="channelingSkillId" val="5104" /> + <set name="castRange" val="400" /> + <set name="effectPoint" val="1" /> + <set name="effectRange" val="600" /> <set name="icon" val="icon.skill0426" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="77" /> + <set name="mpPerChanneling" val="15" /> + <set name="reuseDelay" val="30000" /> + <set name="hitTime" val="15000" /> <set name="operateType" val="CA5" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="PARTY_NOTME" /> </skill> <skill id="427" levels="1" name="Spell Force"> <!-- Not Used Anymore --> <set name="effectPoint" val="1" /> + <set name="channelingSkillId" val="5105" /> + <set name="castRange" val="400" /> + <set name="effectPoint" val="1" /> + <set name="effectRange" val="600" /> <set name="icon" val="icon.skill0427" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="77" /> + <set name="mpPerChanneling" val="15" /> + <set name="reuseDelay" val="30000" /> + <set name="hitTime" val="15000" /> <set name="operateType" val="CA5" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="PARTY_NOTME" /> </skill> <skill id="428" levels="1" name="Inner Rhythm" enchantGroup1="5"> <table name="#ench1DanceMpConsumeRate"> 0.89 0.89 0.89 0.89 0.89 0.89 0.89 0.88 0.88 0.88 0.88 0.88 0.88 0.88 0.87 </table> @@ -1851,8 +1863,6 @@ </for> </skill> <skill id="454" levels="1" name="Symbol of Defense"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5123" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0454" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1861,24 +1871,21 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="455" levels="1" name="Symbol of Noise"> - <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5124" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0455" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1887,23 +1894,20 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13025" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="6" name="SignetNoise" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13025" npcCount="1" /> + </effect> </for> </skill> <skill id="456" levels="1" name="Symbol of Resistance"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5125" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0456" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1912,23 +1916,20 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="457" levels="1" name="Symbol of Honor"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5126" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0457" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1937,23 +1938,20 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="458" levels="1" name="Symbol of Energy"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5127" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0458" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1962,23 +1960,20 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="459" levels="1" name="Symbol of the Sniper"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5128" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0459" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -1987,23 +1982,20 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="460" levels="1" name="Symbol of the Assassin"> - <set name="affectRange" val="180" /> - <set name="effectId" val="5129" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill0460" /> <set name="isMagic" val="2" /> <!-- Static Skill --> @@ -2012,18 +2004,17 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="44" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13018" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="targetType" val="SELF" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Remove ticks from here --> - <effect ticks="24" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13018" npcCount="1" /> + </effect> </for> </skill> <skill id="461" levels="2" name="Break Duress"> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml index 8a0c6fa90f22909dc28dc53021bfb84590cc8c45..2196d0740ca74f778d68a2eba6c856f82dda6a1c 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml @@ -975,8 +975,9 @@ </for> </skill> <skill id="847" levels="1" name="Ward Transport"> - <set name="castRange" val="100" /> - <set name="effectRange" val="600" /> + <set name="castRange" val="85" /> + <set name="effectPoint" val="0" /> + <set name="effectRange" val="400" /> <set name="hitTime" val="180000" /> <set name="icon" val="icon.weapon_fort_flag_i00" /> <set name="isMagic" val="2" /> <!-- Static Skill --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml index 45962e900f9399dcac02f754e592b497d779e25f..4ee570986f922cb3bd10f21261a6d8f9e8c1535e 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml @@ -648,7 +648,6 @@ <set name="affectLimit" val="15-25" /> <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5130" /> <set name="effectPoint" val="-676" /> <set name="element" val="0" /> <!-- Fire --> <set name="elementPower" val="20" /> @@ -660,26 +659,24 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="36" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13025" /> + <set name="mpPerChanneling" val="80" /> + <set name="channelingTickInterval" val="2" /> <set name="operateType" val="CA1" /> <set name="power" val="500" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET_CASTTIME" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> - <for> - <!-- FIXME: Removed ticks from here --> - <effect self="1" ticks="9" name="SignetMDam" val="0" /> - </for> + <channelingEffects> + <effect name="MagicalAttack" noicon="1" val="0" /> + </channelingEffects> </skill> <skill id="1420" levels="1" name="Cyclone"> <set name="affectLimit" val="15-25" /> <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5132" /> <set name="effectPoint" val="-676" /> <set name="element" val="2" /> <!-- Wind --> <set name="elementPower" val="20" /> @@ -691,26 +688,24 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="36" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13025" /> + <set name="mpPerChanneling" val="80" /> + <set name="channelingTickInterval" val="2" /> <set name="operateType" val="CA1" /> <set name="power" val="500" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET_CASTTIME" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> - <for> - <!-- FIXME: Removed ticks from here --> - <effect self="1" ticks="9" name="SignetMDam" val="0" /> - </for> + <channelingEffects> + <effect name="MagicalAttack" noicon="1" val="0" /> + </channelingEffects> </skill> <skill id="1421" levels="1" name="Raging Waves"> <set name="affectLimit" val="15-25" /> <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5131" /> <set name="effectPoint" val="-676" /> <set name="element" val="1" /> <!-- Water --> <set name="elementPower" val="20" /> @@ -722,25 +717,22 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="36" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13025" /> + <set name="mpPerChanneling" val="80" /> + <set name="channelingTickInterval" val="2" /> <set name="operateType" val="CA1" /> <set name="power" val="500" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET_CASTTIME" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> - <for> - <!-- FIXME: Removed ticks from here --> - <effect self="1" ticks="9" name="SignetMDam" val="0" /> - </for> + <channelingEffects> + <effect name="MagicalAttack" noicon="1" val="0" /> + </channelingEffects> </skill> <skill id="1422" levels="1" name="Day of Doom"> - <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5145" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill1422" /> <set name="isMagic" val="1" /> <!-- Magic Skill --> @@ -749,25 +741,23 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="58" /> <set name="mpInitialConsume" val="15" /> - <set name="npcId" val="13025" /> <set name="operateType" val="A1" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Removed ticks from here --> - <effect ticks="5" name="Signet" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13028" npcCount="1" /> + </effect> </for> </skill> <skill id="1423" levels="1" name="Gehenna"> <set name="affectLimit" val="15-25" /> <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5133" /> <set name="effectPoint" val="-676" /> <set name="element" val="5" /> <!-- Dark --> <set name="elementPower" val="20" /> @@ -779,25 +769,22 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="36" /> <set name="mpInitialConsume" val="36" /> - <set name="npcId" val="13025" /> + <set name="mpPerChanneling" val="80" /> + <set name="channelingTickInterval" val="2" /> <set name="operateType" val="CA1" /> <set name="power" val="500" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET_CASTTIME" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> - <for> - <!-- FIXME: Removed ticks from here --> - <effect self="1" ticks="9" name="SignetMDam" val="0" /> - </for> + <channelingEffects> + <effect name="MagicalAttack" noicon="1" val="0" /> + </channelingEffects> </skill> <skill id="1424" levels="1" name="Anti-Summoning Field"> - <set name="affectRange" val="180" /> <set name="castRange" val="900" /> - <set name="effectId" val="5134" /> <set name="hitTime" val="5000" /> <set name="icon" val="icon.skill1424" /> <set name="isMagic" val="1" /> <!-- Magic Skill --> @@ -806,19 +793,18 @@ <set name="magicLvl" val="80" /> <set name="mpConsume" val="70" /> <set name="mpInitialConsume" val="70" /> - <set name="npcId" val="13020" /> <set name="operateType" val="A1" /> <set name="power" val="200" /> <set name="reuseDelay" val="1800000" /> - <set name="skillType" val="SIGNET" /> <set name="staticReuse" val="true" /> <set name="targetType" val="GROUND" /> <cond msgId="1509"> <player olympiad="false" /> </cond> <for> - <!-- FIXME: Removed ticks from here --> - <effect ticks="6" name="SignetAntiSummon" val="0" /> + <effect name="SummonNpc" val="0"> + <param npcId="13030" npcCount="1" /> + </effect> </for> </skill> <skill id="1425" levels="1" name="Purification Field"> @@ -2452,24 +2438,25 @@ <!-- Confirmed CT2.5 --> <!-- Kamael Final Form Skill --> <set name="castRange" val="900" /> + <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="effectRange" val="1000" /> <set name="element" val="5" /> <!-- Dark --> <set name="elementPower" val="20" /> <set name="hitTime" val="15000" /> - <set name="hitTimings" val="10,15,15,15,15,15,15" /> <set name="icon" val="icon.skill1472" /> <set name="isMagic" val="1" /> <!-- Magic Skill --> <set name="magicLvl" val="79" /> <set name="mpInitialConsume" val="36" /> + <set name="mpPerChanneling" val="30" /> <set name="operateType" val="CA1" /> <set name="power" val="30" /> <set name="reuseDelay" val="300000" /> <set name="staticReuse" val="true" /> <set name="targetType" val="ONE" /> - <for> + <channelingEffects> <effect name="MagicalAttack" noicon="1" val="0" /> - </for> + </channelingEffects> </skill> <skill id="1473" levels="1" name="Change Weapon"> <!-- Confirmed CT2.5 --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml index 676dd16b5dbb7ecfd2565e4c2ba76b18ab535a7e..5b20e3370a6918f769947b62780a5bff493cd11c 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml @@ -1366,24 +1366,25 @@ <!-- Kamael Final Form Skill --> <!-- TODO: Related with Quest "Long live the Pa'agrio Lord! --> <set name="castRange" val="900" /> + <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="effectRange" val="1000" /> <set name="element" val="5" /> <!-- Dark --> <set name="elementPower" val="20" /> <set name="hitTime" val="15000" /> - <set name="hitTimings" val="10,15,15,15,15,15,15" /> <set name="icon" val="icon.skill1472" /> <set name="isMagic" val="1" /> <!-- Magic Skill --> <set name="magicLvl" val="79" /> <set name="mpInitialConsume" val="36" /> + <set name="mpPerChanneling" val="30" /> <set name="operateType" val="CA1" /> <set name="power" val="30" /> <set name="reuseDelay" val="300000" /> <set name="staticReuse" val="true" /> <set name="targetType" val="ONE" /> - <for> + <channelingEffects> <effect name="MagicalAttack" noicon="1" val="0" /> - </for> + </channelingEffects> </skill> <skill id="1546" levels="1" name="Strider Fear"> <!-- Confirmed CT2.5 --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml index 0f364b792ec4edb660be18a307d92cb2d0994dc2..6c02fd202b8655a6ffc65f1ae5739414b39dc45b 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml @@ -194,6 +194,7 @@ </skill> <skill id="3318" levels="1" name="Flag Display"> <!-- Flag Skill --> + <set name="effectRange" val="400" /> <set name="hitTime" val="180000" /> <set name="icon" val="icon.weapon_fort_flag_i00" /> <set name="isMagic" val="2" /> <!-- Static Skill --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml index 19af271f879562cfe3ae3b38166c84710cc45eab..3ca2b3846dfe5829fbb3d0871e7ae3c935166aed 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml @@ -452,8 +452,10 @@ </skill> <skill id="3626" levels="1" name="Kabokula"> <set name="castRange" val="300" /> + <set name="channelingSkillId" val="5106" /> + <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-100" /> - <set name="effectRange" val="900" /> + <set name="effectRange" val="500" /> <set name="hitTime" val="25000" /> <set name="icon" val="icon.weapon_seize_mace_i00" /> <set name="isDebuff" val="true" /> @@ -463,17 +465,17 @@ <set name="magicLvl" val="85" /> <set name="operateType" val="CA5" /> <set name="reuseDelay" val="1000" /> - <set name="skillType" val="FUSION" /> <set name="targetType" val="ONE" /> - <set name="triggeredId" val="5106" /> <cond msgId="109"> <target npcId="22215,22216,22217" /> </cond> </skill> <skill id="3627" levels="1" name="Tapirawa"> <set name="castRange" val="300" /> + <set name="channelingSkillId" val="5107" /> + <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-100" /> - <set name="effectRange" val="900" /> + <set name="effectRange" val="500" /> <set name="hitTime" val="25000" /> <set name="icon" val="icon.weapon_seize_mace_i00" /> <set name="isDebuff" val="true" /> @@ -483,17 +485,17 @@ <set name="magicLvl" val="85" /> <set name="operateType" val="CA5" /> <set name="reuseDelay" val="1000" /> - <set name="skillType" val="FUSION" /> <set name="targetType" val="ONE" /> - <set name="triggeredId" val="5107" /> <cond msgId="109"> <target npcId="22215,22216,22217" /> </cond> </skill> <skill id="3628" levels="1" name="Shabonoba"> <set name="castRange" val="300" /> + <set name="channelingSkillId" val="5108" /> + <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-100" /> - <set name="effectRange" val="900" /> + <set name="effectRange" val="500" /> <set name="hitTime" val="25000" /> <set name="icon" val="icon.weapon_seize_mace_i00" /> <set name="isDebuff" val="true" /> @@ -503,9 +505,7 @@ <set name="magicLvl" val="85" /> <set name="operateType" val="CA5" /> <set name="reuseDelay" val="1000" /> - <set name="skillType" val="FUSION" /> <set name="targetType" val="ONE" /> - <set name="triggeredId" val="5108" /> <cond msgId="109"> <target npcId="22215,22216,22217" /> </cond> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml index 9acde30627e2a6cbbb7ab488e96b3177773d48cb..ebdb245b95f9f21beb0ba73ba0c572da06c698b6 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml @@ -39,6 +39,7 @@ </skill> <skill id="5104" levels="3" name="Battle Force"> <!-- Not Used Anymore --> + <table name="#pAtk"> 1.05 1.10 1.15 </table> <table name="#abnormalLvls"> 1 2 3 </table> <set name="abnormalLvl" val="#abnormalLvls" /> <set name="abnormalTime" val="15" /> @@ -48,11 +49,16 @@ <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="77" /> <set name="operateType" val="A2" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="SELF" /> + <for> + <effect name="Buff" val="0"> + <mul stat="pAtk" order="0x30" val="#pAtk" /> + </effect> + </for> </skill> <skill id="5105" levels="3" name="Spell Force"> <!-- Not Used Anymore --> + <table name="#mAtk"> 1.05 1.10 1.15 </table> <table name="#abnormalLvls"> 1 2 3 </table> <set name="abnormalLvl" val="#abnormalLvls" /> <set name="abnormalTime" val="15" /> @@ -62,8 +68,12 @@ <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="77" /> <set name="operateType" val="A2" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="SELF" /> + <for> + <effect name="Buff" val="0"> + <mul stat="mAtk" order="0x30" val="#mAtk" /> + </effect> + </for> </skill> <skill id="5106" levels="4" name="Capture A State"> <table name="#abnormalLvls"> 1 2 3 4 </table> @@ -411,6 +421,7 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="7" /> <set name="abnormalType" val="COMBINATION" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill0454" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> @@ -426,21 +437,26 @@ </for> </skill> <skill id="5124" levels="1" name="Anti-Music"> + <set name="affectRange" val="200" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> + <for> + <effect name="DispelBySlotProbability" noicon="1" val="0"> + <param dispel="DANCE_OF_AQUA_GUARD;DANCE_OF_CONCENTRATION;DANCE_OF_CONCENTRATION;DANCE_OF_EARTH_GUARD;DANCE_OF_FIRE;DANCE_OF_FURY;DANCE_OF_INSPIRATION;DANCE_OF_LIGHT;DANCE_OF_MYSTIC;DANCE_OF_PROTECTION;DANCE_OF_SHADOW;DANCE_OF_SIREN;DANCE_OF_VAMPIRE;DANCE_OF_WARRIOR;SONG_OF_CHAMPION;SONG_OF_EARTH;SONG_OF_FLAME_GUARD;SONG_OF_HUNTER;SONG_OF_INVOCATION;SONG_OF_LIFE;SONG_OF_MEDITATION;SONG_OF_RENEWAL;SONG_OF_STORM_GUARD;SONG_OF_VENGEANCE;SONG_OF_VITALITY;SONG_OF_WARDING;SONG_OF_WATER;SONG_OF_WIND;DANCE_OF_BLADESTORM;DANCE_OF_ALIGNMENT;SONG_OF_ELEMENTAL;SONG_OF_WINDSTORM" rate="100" /> + </effect> + </for> </skill> <skill id="5125" levels="1" name="Maximum Resist Status"> <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="7" /> <set name="abnormalType" val="COMBINATION" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill0456" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A2" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> <for> <effect name="Buff" val="0"> @@ -452,11 +468,11 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="7" /> <set name="abnormalType" val="COMBINATION" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill0457" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A2" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> <for> <effect name="Buff" val="0"> @@ -487,11 +503,11 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="7" /> <set name="abnormalType" val="COMBINATION" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill0459" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A2" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> <for> <effect name="Buff" val="0"> @@ -508,11 +524,11 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="7" /> <set name="abnormalType" val="COMBINATION" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill0460" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A2" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> <for> <effect name="Buff" val="0"> @@ -550,13 +566,21 @@ <set name="targetType" val="ONE" /> </skill> <skill id="5134" levels="1" name="Anti-Summoning Field"> + <!-- TODO: Update to H5! --> <set name="abnormalTime" val="15" /> + <set name="affectRange" val="200" /> + <set name="attribute" val="5" /> + <set name="attributePower" val="20" /> <set name="icon" val="icon.skill1424" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> - <set name="skillType" val="CONT" /> <set name="targetType" val="ONE" /> + <for> + <effect name="Unsummon" val="0"> + <param chance="80" /> + </effect> + </for> </skill> <skill id="5135" levels="1" name="Slash"> <!-- CT2.5 retail confirmed --> @@ -784,8 +808,10 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="120" /> <set name="abnormalType" val="MULTI_DEBUFF" /> + <set name="affectRange" val="200" /> <set name="icon" val="icon.skill1422" /> <set name="isMagic" val="2" /> <!-- Static Skill --> + <set name="isDebuff" val="1" /> <set name="magicLvl" val="80" /> <set name="operateType" val="A2" /> <set name="skillType" val="DEBUFF" /> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml index 0278a1f1e8c05ad14e59068aae1b93ebde11ce48..c32fee2d555e3f61d1b98f151d270320a9363f03 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml @@ -1727,11 +1727,13 @@ </for> </skill> <skill id="5396" levels="1" name="NPC - Spell Stance"> + <set name="castRange" val="400" /> + <set name="channelingSkillId" val="5397" /> + <set name="channelingTickInterval" val="2" /> <set name="hitTime" val="15000" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="operateType" val="CA5" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="ONE" /> </skill> <skill id="5397" levels="3" name="NPC - Spell Force"> <table name="#abnormalLvls"> 1 2 3 </table> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml index 2e3d864b9e2ec0a367b944f4f523501d59446469..8983d4eddc0801e676cf1a1d5f573790aa144a2a 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml @@ -1183,14 +1183,20 @@ </for> </skill> <skill id="5493" levels="1" name="Naia Production"> + <set name="channelingSkillId" val="5106" /> + <set name="channelingSkillId" val="5106" /> + <set name="castRange" val="800" /> + <set name="effectRange" val="1000" /> <set name="effectPoint" val="1" /> <set name="hitTime" val="25000" /> + <set name="itemConsumeId" val="8764" /> <!-- Trap Stone --> + <set name="itemConsumeCount" val="1" /> <set name="isMagic" val="2" /> <!-- Static Skill --> <set name="magicLvl" val="85" /> + <set name="mpPerChanneling" val="15" /> <set name="operateType" val="CA5" /> <set name="reuseDelay" val="1000" /> - <set name="skillType" val="NOTDONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="ONE" /> </skill> <skill id="5494" levels="1" name="Gust"> <!-- Confirmed CT2.5 --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml index 951ef530fa76cd00d9923376da5b1772808f230e..4e4776c7158d4606d99be435229431df8708b379 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml @@ -348,8 +348,11 @@ <skill id="22250" levels="1" name="Birthday Cake Effect"> <!-- Confirmed CT2.5 --> <!-- Birthday Skill --> + <set name="abnormalLvl" val="1" /> + <set name="abnormalTime" val="300" /> + <set name="abnormalType" val="VP_KEEP" /> <set name="affectRange" val="200" /> - <set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed --> + <set name="operateType" val="A2" /> <set name="skillType" val="BUFF" /> <set name="targetType" val="AURA" /> <for> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml index b0658d7d484e8eed5b3f3c16d4b2331688b81d3a..0e19b6a5d66d92838e59a19b8dd0309e1a51dfcb 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml @@ -62,7 +62,7 @@ <set name="abnormalTime" val="7" /> <set name="affectRange" val="200" /> <set name="icon" val="BranchSys2.icon.totem_of_body" /> - <set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed --> + <set name="operateType" val="A2" /> <set name="skillType" val="BUFF" /> <set name="targetType" val="AURA" /> <for> @@ -77,7 +77,7 @@ <set name="abnormalTime" val="7" /> <set name="affectRange" val="200" /> <set name="icon" val="BranchSys2.icon.totem_of_mind" /> - <set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed --> + <set name="operateType" val="A2" /> <set name="skillType" val="BUFF" /> <set name="targetType" val="AURA" /> <for> @@ -91,7 +91,7 @@ <set name="abnormalTime" val="7" /> <set name="affectRange" val="200" /> <set name="icon" val="BranchSys2.icon.totem_of_bravery" /> - <set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed --> + <set name="operateType" val="A2" /> <set name="skillType" val="BUFF" /> <set name="targetType" val="AURA" /> <for> @@ -105,7 +105,7 @@ <set name="abnormalTime" val="7" /> <set name="affectRange" val="200" /> <set name="icon" val="BranchSys2.icon.totem_of_fortitude" /> - <set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed --> + <set name="operateType" val="A2" /> <set name="skillType" val="BUFF" /> <set name="targetType" val="AURA" /> <for>