Clan Flag.
Thanks gamelike85, gigilo1968.
This commit is contained in:
103
L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
103
L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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.others.Servitors;
|
||||
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ClanFlag extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int CLAN_FLAG = 19269;
|
||||
// Skills
|
||||
private static final SkillHolder BUFF = new SkillHolder(15095, 1);
|
||||
private static final SkillHolder DEBUFF = new SkillHolder(15096, 1);
|
||||
|
||||
private ClanFlag()
|
||||
{
|
||||
addSpawnId(CLAN_FLAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
getTimers().addTimer("END_OF_LIFE", 1800000, npc, null);
|
||||
getTimers().addTimer("SKILL_CAST", 1000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "SKILL_CAST":
|
||||
{
|
||||
if (npc.getSummoner() != null)
|
||||
{
|
||||
final L2Clan summonerClan = npc.getSummoner().getClan();
|
||||
if (summonerClan != null)
|
||||
{
|
||||
L2World.getInstance().forEachVisibleObjectInRange(npc, L2PcInstance.class, 2000, target ->
|
||||
{
|
||||
if ((target != null) && !target.isDead() && GeoEngine.getInstance().canSeeTarget(npc, target))
|
||||
{
|
||||
final L2Clan targetClan = target.getClan();
|
||||
if (targetClan != null)
|
||||
{
|
||||
if (targetClan == summonerClan)
|
||||
{
|
||||
BUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
else if (targetClan.isAtWarWith(summonerClan))
|
||||
{
|
||||
DEBUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
getTimers().addTimer("SKILL_CAST", 3000, npc, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
getTimers().addTimer("END_OF_LIFE", 100, npc, null);
|
||||
break;
|
||||
}
|
||||
case "END_OF_LIFE":
|
||||
{
|
||||
getTimers().cancelTimer("SKILL_CAST", npc, null);
|
||||
npc.deleteMe();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ClanFlag();
|
||||
}
|
||||
}
|
@@ -2662,11 +2662,9 @@
|
||||
<height normal="31" grown="36" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="19269" level="90" type="L2Monster" name="Clan Flag">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<npc id="19269" level="90" type="L2EffectPoint" name="Clan Flag" usingServerSideName="true">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>ETC</sex>
|
||||
<mpReward value="20" type="PER" ticks="10" affects="PARTY" />
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="1277698" hpRegen="8.5" mp="40" mpRegen="0.9" />
|
||||
<speed>
|
||||
@@ -2678,17 +2676,9 @@
|
||||
<attribute>
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="100" dark="100" />
|
||||
</attribute>
|
||||
<abnormalResist physical="0" magical="0" />
|
||||
</stats>
|
||||
<status attackable="false" undying="false" />
|
||||
<skill_list>
|
||||
<skill id="4416" level="2" /> <!-- Magic Creatures -->
|
||||
<skill id="4390" level="1" /> <!-- NPC Abnormal Immunity -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="14765" level="2" /> <!-- Blood Siphon Resistance -->
|
||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||
</skill_list>
|
||||
<ai clanHelpRange="300" aggroRange="300" />
|
||||
<status targetable="false" canMove="false" undying="true" />
|
||||
<ai clanHelpRange="1000" aggroRange="300" />
|
||||
<collision>
|
||||
<radius normal="15" />
|
||||
<height normal="120" />
|
||||
|
@@ -2985,7 +2985,6 @@
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15094" toLevel="1" name="Clan Flag">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Summons a Clan Flag that symbolizes your clan. Applies a buff on clan members and a de-buff on enemy clan members within a 2000 grid. It is despawned after 30 minutes but the effect lasts for 10 more minutes. Consumes 100 Clan Reputation. Can be used be Count or higher. Cooldown is 30 minute(s). -->
|
||||
<icon>icon.etc_alliance_flag_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
@@ -2999,28 +2998,36 @@
|
||||
<reuseDelay>1800000</reuseDelay>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<clanRepConsume>100</clanRepConsume>
|
||||
<conditions>
|
||||
<condition name="OpCanNotUseAirship" />
|
||||
<condition name="OpSocialClass">
|
||||
<socialClass>8</socialClass>
|
||||
</condition>
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="SummonNpc">
|
||||
<npcId>19269</npcId> <!-- Clan Flag -->
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15095" toLevel="1" name="Clan Rising">
|
||||
<!-- Glory Days confirmed -->
|
||||
<!-- Through the clan flag, increases clan members' PvP damage by 5% and decreases received PvP damage by 5%. -->
|
||||
<icon>BranchSys2.icon.skill20006</icon>
|
||||
<operateType>A2</operateType>
|
||||
<hitTime>1500</hitTime>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<blockedInOlympiad>false</blockedInOlympiad>
|
||||
<abnormalType>FLAG_BUF</abnormalType>
|
||||
<abnormalVisualEffect>REAL_TARGET</abnormalVisualEffect>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<hitCancelTime>0</hitCancelTime>
|
||||
<magicLvl>90</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>600</abnormalTime> <!-- It is despawned after 30 minutes but the effect lasts for 10 more minutes. -->
|
||||
<affectRange>2000</affectRange>
|
||||
<isMagic>1</isMagic>
|
||||
<isMagic>4</isMagic>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>FRIEND_PC</affectObject>
|
||||
@@ -3048,10 +3055,9 @@
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15096" toLevel="1" name="Clan Curse">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Domain where the clan flag's curse applies. -->
|
||||
<icon>icon.skill1167</icon>
|
||||
<operateType>A2</operateType>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<abnormalType>FLAG_DEBUF</abnormalType>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
@@ -3062,13 +3068,12 @@
|
||||
<activateRate>100</activateRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<trait>POISON</trait>
|
||||
<affectRange>2000</affectRange>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>NOT_FRIEND_PC</affectObject>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15097" toLevel="1" name="Raid Boss">
|
||||
<!-- Glory Days confirmed -->
|
||||
|
@@ -99,6 +99,8 @@ public final class Skill implements IIdentifiable
|
||||
private final int _itemConsumeCount;
|
||||
/** Id of item consumed by this skill from caster. */
|
||||
private final int _itemConsumeId;
|
||||
/** Clan points consumed by this skill from caster's clan */
|
||||
private final int _clanRepConsume;
|
||||
/** Cast range: how far can be the target. */
|
||||
private final int _castRange;
|
||||
/** Effect range: how far the skill affect the target. */
|
||||
@@ -227,6 +229,7 @@ public final class Skill implements IIdentifiable
|
||||
_hpConsume = set.getInt("hpConsume", 0);
|
||||
_itemConsumeCount = set.getInt("itemConsumeCount", 0);
|
||||
_itemConsumeId = set.getInt("itemConsumeId", 0);
|
||||
_clanRepConsume = set.getInt("clanRepConsume", 0);
|
||||
|
||||
_castRange = set.getInt("castRange", -1);
|
||||
_effectRange = set.getInt("effectRange", -1);
|
||||
@@ -724,6 +727,14 @@ public final class Skill implements IIdentifiable
|
||||
return _itemConsumeId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Clan points consumed by this skill from caster's clan
|
||||
*/
|
||||
public int getClanRepConsume()
|
||||
{
|
||||
return _clanRepConsume;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the level.
|
||||
*/
|
||||
|
@@ -38,6 +38,7 @@ import com.l2jmobius.gameserver.enums.ItemSkillType;
|
||||
import com.l2jmobius.gameserver.enums.NextActionType;
|
||||
import com.l2jmobius.gameserver.enums.StatusUpdateType;
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@@ -339,6 +340,27 @@ public class SkillCaster implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
if (caster.isPlayer())
|
||||
{
|
||||
final L2PcInstance player = caster.getActingPlayer();
|
||||
final L2Clan clan = player.getClan();
|
||||
|
||||
// Consume clan reputation points
|
||||
if (_skill.getClanRepConsume() > 0)
|
||||
{
|
||||
if ((clan == null) || (clan.getReputationScore() < _skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
clan.takeReputationScore(_skill.getClanRepConsume(), true);
|
||||
|
||||
final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_REPUTATION_HAS_BEEN_CONSUMED);
|
||||
msg.addInt(_skill.getClanRepConsume());
|
||||
player.sendPacket(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger any skill cast start effects.
|
||||
if (target.isCharacter())
|
||||
{
|
||||
@@ -959,6 +981,17 @@ public class SkillCaster implements Runnable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Consume clan reputation points
|
||||
if (skill.getClanRepConsume() > 0)
|
||||
{
|
||||
final L2Clan clan = player.getClan();
|
||||
if ((clan == null) || (clan.getReputationScore() < skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for skill reuse (fixes macro right click press exploit).
|
||||
if (caster.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
|
103
L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
103
L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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.others.Servitors;
|
||||
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ClanFlag extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int CLAN_FLAG = 19269;
|
||||
// Skills
|
||||
private static final SkillHolder BUFF = new SkillHolder(15095, 1);
|
||||
private static final SkillHolder DEBUFF = new SkillHolder(15096, 1);
|
||||
|
||||
private ClanFlag()
|
||||
{
|
||||
addSpawnId(CLAN_FLAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
getTimers().addTimer("END_OF_LIFE", 1800000, npc, null);
|
||||
getTimers().addTimer("SKILL_CAST", 1000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "SKILL_CAST":
|
||||
{
|
||||
if (npc.getSummoner() != null)
|
||||
{
|
||||
final L2Clan summonerClan = npc.getSummoner().getClan();
|
||||
if (summonerClan != null)
|
||||
{
|
||||
L2World.getInstance().forEachVisibleObjectInRange(npc, L2PcInstance.class, 2000, target ->
|
||||
{
|
||||
if ((target != null) && !target.isDead() && GeoEngine.getInstance().canSeeTarget(npc, target))
|
||||
{
|
||||
final L2Clan targetClan = target.getClan();
|
||||
if (targetClan != null)
|
||||
{
|
||||
if (targetClan == summonerClan)
|
||||
{
|
||||
BUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
else if (targetClan.isAtWarWith(summonerClan))
|
||||
{
|
||||
DEBUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
getTimers().addTimer("SKILL_CAST", 3000, npc, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
getTimers().addTimer("END_OF_LIFE", 100, npc, null);
|
||||
break;
|
||||
}
|
||||
case "END_OF_LIFE":
|
||||
{
|
||||
getTimers().cancelTimer("SKILL_CAST", npc, null);
|
||||
npc.deleteMe();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ClanFlag();
|
||||
}
|
||||
}
|
@@ -2662,11 +2662,9 @@
|
||||
<height normal="31" grown="36" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="19269" level="90" type="L2Monster" name="Clan Flag">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<npc id="19269" level="90" type="L2EffectPoint" name="Clan Flag" usingServerSideName="true">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>ETC</sex>
|
||||
<mpReward value="20" type="PER" ticks="10" affects="PARTY" />
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="1277698" hpRegen="8.5" mp="40" mpRegen="0.9" />
|
||||
<speed>
|
||||
@@ -2678,17 +2676,9 @@
|
||||
<attribute>
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="100" dark="100" />
|
||||
</attribute>
|
||||
<abnormalResist physical="0" magical="0" />
|
||||
</stats>
|
||||
<status attackable="false" undying="false" />
|
||||
<skill_list>
|
||||
<skill id="4416" level="2" /> <!-- Magic Creatures -->
|
||||
<skill id="4390" level="1" /> <!-- NPC Abnormal Immunity -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="14765" level="2" /> <!-- Blood Siphon Resistance -->
|
||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||
</skill_list>
|
||||
<ai clanHelpRange="300" aggroRange="300" />
|
||||
<status targetable="false" canMove="false" undying="true" />
|
||||
<ai clanHelpRange="1000" aggroRange="300" />
|
||||
<collision>
|
||||
<radius normal="15" />
|
||||
<height normal="120" />
|
||||
|
@@ -2985,7 +2985,6 @@
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15094" toLevel="1" name="Clan Flag">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Summons a Clan Flag that symbolizes your clan. Applies a buff on clan members and a de-buff on enemy clan members within a 2000 grid. It is despawned after 30 minutes but the effect lasts for 10 more minutes. Consumes 100 Clan Reputation. Can be used be Count or higher. Cooldown is 30 minute(s). -->
|
||||
<icon>icon.etc_alliance_flag_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
@@ -2999,28 +2998,36 @@
|
||||
<reuseDelay>1800000</reuseDelay>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<clanRepConsume>100</clanRepConsume>
|
||||
<conditions>
|
||||
<condition name="OpCanNotUseAirship" />
|
||||
<condition name="OpSocialClass">
|
||||
<socialClass>8</socialClass>
|
||||
</condition>
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="SummonNpc">
|
||||
<npcId>19269</npcId> <!-- Clan Flag -->
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15095" toLevel="1" name="Clan Rising">
|
||||
<!-- Glory Days confirmed -->
|
||||
<!-- Through the clan flag, increases clan members' PvP damage by 5% and decreases received PvP damage by 5%. -->
|
||||
<icon>BranchSys2.icon.skill20006</icon>
|
||||
<operateType>A2</operateType>
|
||||
<hitTime>1500</hitTime>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<blockedInOlympiad>false</blockedInOlympiad>
|
||||
<abnormalType>FLAG_BUF</abnormalType>
|
||||
<abnormalVisualEffect>REAL_TARGET</abnormalVisualEffect>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<hitCancelTime>0</hitCancelTime>
|
||||
<magicLvl>90</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>600</abnormalTime> <!-- It is despawned after 30 minutes but the effect lasts for 10 more minutes. -->
|
||||
<affectRange>2000</affectRange>
|
||||
<isMagic>1</isMagic>
|
||||
<isMagic>4</isMagic>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>FRIEND_PC</affectObject>
|
||||
@@ -3048,10 +3055,9 @@
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15096" toLevel="1" name="Clan Curse">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Domain where the clan flag's curse applies. -->
|
||||
<icon>icon.skill1167</icon>
|
||||
<operateType>A2</operateType>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<abnormalType>FLAG_DEBUF</abnormalType>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
@@ -3062,13 +3068,12 @@
|
||||
<activateRate>100</activateRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<trait>POISON</trait>
|
||||
<affectRange>2000</affectRange>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>NOT_FRIEND_PC</affectObject>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15097" toLevel="1" name="Raid Boss">
|
||||
<!-- Glory Days confirmed -->
|
||||
|
@@ -99,6 +99,8 @@ public final class Skill implements IIdentifiable
|
||||
private final int _itemConsumeCount;
|
||||
/** Id of item consumed by this skill from caster. */
|
||||
private final int _itemConsumeId;
|
||||
/** Clan points consumed by this skill from caster's clan */
|
||||
private final int _clanRepConsume;
|
||||
/** Cast range: how far can be the target. */
|
||||
private final int _castRange;
|
||||
/** Effect range: how far the skill affect the target. */
|
||||
@@ -227,6 +229,7 @@ public final class Skill implements IIdentifiable
|
||||
_hpConsume = set.getInt("hpConsume", 0);
|
||||
_itemConsumeCount = set.getInt("itemConsumeCount", 0);
|
||||
_itemConsumeId = set.getInt("itemConsumeId", 0);
|
||||
_clanRepConsume = set.getInt("clanRepConsume", 0);
|
||||
|
||||
_castRange = set.getInt("castRange", -1);
|
||||
_effectRange = set.getInt("effectRange", -1);
|
||||
@@ -724,6 +727,14 @@ public final class Skill implements IIdentifiable
|
||||
return _itemConsumeId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Clan points consumed by this skill from caster's clan
|
||||
*/
|
||||
public int getClanRepConsume()
|
||||
{
|
||||
return _clanRepConsume;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the level.
|
||||
*/
|
||||
|
@@ -38,6 +38,7 @@ import com.l2jmobius.gameserver.enums.ItemSkillType;
|
||||
import com.l2jmobius.gameserver.enums.NextActionType;
|
||||
import com.l2jmobius.gameserver.enums.StatusUpdateType;
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@@ -339,6 +340,27 @@ public class SkillCaster implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
if (caster.isPlayer())
|
||||
{
|
||||
final L2PcInstance player = caster.getActingPlayer();
|
||||
final L2Clan clan = player.getClan();
|
||||
|
||||
// Consume clan reputation points
|
||||
if (_skill.getClanRepConsume() > 0)
|
||||
{
|
||||
if ((clan == null) || (clan.getReputationScore() < _skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
clan.takeReputationScore(_skill.getClanRepConsume(), true);
|
||||
|
||||
final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_REPUTATION_HAS_BEEN_CONSUMED);
|
||||
msg.addInt(_skill.getClanRepConsume());
|
||||
player.sendPacket(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger any skill cast start effects.
|
||||
if (target.isCharacter())
|
||||
{
|
||||
@@ -959,6 +981,17 @@ public class SkillCaster implements Runnable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Consume clan reputation points
|
||||
if (skill.getClanRepConsume() > 0)
|
||||
{
|
||||
final L2Clan clan = player.getClan();
|
||||
if ((clan == null) || (clan.getReputationScore() < skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for skill reuse (fixes macro right click press exploit).
|
||||
if (caster.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
|
103
L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
103
L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/Servitors/ClanFlag.java
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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.others.Servitors;
|
||||
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ClanFlag extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int CLAN_FLAG = 19269;
|
||||
// Skills
|
||||
private static final SkillHolder BUFF = new SkillHolder(15095, 1);
|
||||
private static final SkillHolder DEBUFF = new SkillHolder(15096, 1);
|
||||
|
||||
private ClanFlag()
|
||||
{
|
||||
addSpawnId(CLAN_FLAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
getTimers().addTimer("END_OF_LIFE", 1800000, npc, null);
|
||||
getTimers().addTimer("SKILL_CAST", 1000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "SKILL_CAST":
|
||||
{
|
||||
if (npc.getSummoner() != null)
|
||||
{
|
||||
final L2Clan summonerClan = npc.getSummoner().getClan();
|
||||
if (summonerClan != null)
|
||||
{
|
||||
L2World.getInstance().forEachVisibleObjectInRange(npc, L2PcInstance.class, 2000, target ->
|
||||
{
|
||||
if ((target != null) && !target.isDead() && GeoEngine.getInstance().canSeeTarget(npc, target))
|
||||
{
|
||||
final L2Clan targetClan = target.getClan();
|
||||
if (targetClan != null)
|
||||
{
|
||||
if (targetClan == summonerClan)
|
||||
{
|
||||
BUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
else if (targetClan.isAtWarWith(summonerClan))
|
||||
{
|
||||
DEBUFF.getSkill().applyEffects(npc, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
getTimers().addTimer("SKILL_CAST", 3000, npc, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
getTimers().addTimer("END_OF_LIFE", 100, npc, null);
|
||||
break;
|
||||
}
|
||||
case "END_OF_LIFE":
|
||||
{
|
||||
getTimers().cancelTimer("SKILL_CAST", npc, null);
|
||||
npc.deleteMe();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ClanFlag();
|
||||
}
|
||||
}
|
@@ -2662,11 +2662,9 @@
|
||||
<height normal="31" grown="36" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="19269" level="90" type="L2Monster" name="Clan Flag">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<npc id="19269" level="90" type="L2EffectPoint" name="Clan Flag" usingServerSideName="true">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>ETC</sex>
|
||||
<mpReward value="20" type="PER" ticks="10" affects="PARTY" />
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="1277698" hpRegen="8.5" mp="40" mpRegen="0.9" />
|
||||
<speed>
|
||||
@@ -2678,17 +2676,9 @@
|
||||
<attribute>
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="100" dark="100" />
|
||||
</attribute>
|
||||
<abnormalResist physical="0" magical="0" />
|
||||
</stats>
|
||||
<status attackable="false" undying="false" />
|
||||
<skill_list>
|
||||
<skill id="4416" level="2" /> <!-- Magic Creatures -->
|
||||
<skill id="4390" level="1" /> <!-- NPC Abnormal Immunity -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="14765" level="2" /> <!-- Blood Siphon Resistance -->
|
||||
<skill id="4045" level="1" /> <!-- Resist Full Magic Attack -->
|
||||
</skill_list>
|
||||
<ai clanHelpRange="300" aggroRange="300" />
|
||||
<status targetable="false" canMove="false" undying="true" />
|
||||
<ai clanHelpRange="1000" aggroRange="300" />
|
||||
<collision>
|
||||
<radius normal="15" />
|
||||
<height normal="120" />
|
||||
|
@@ -2985,7 +2985,6 @@
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15094" toLevel="1" name="Clan Flag">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Summons a Clan Flag that symbolizes your clan. Applies a buff on clan members and a de-buff on enemy clan members within a 2000 grid. It is despawned after 30 minutes but the effect lasts for 10 more minutes. Consumes 100 Clan Reputation. Can be used be Count or higher. Cooldown is 30 minute(s). -->
|
||||
<icon>icon.etc_alliance_flag_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
@@ -2999,28 +2998,36 @@
|
||||
<reuseDelay>1800000</reuseDelay>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<clanRepConsume>100</clanRepConsume>
|
||||
<conditions>
|
||||
<condition name="OpCanNotUseAirship" />
|
||||
<condition name="OpSocialClass">
|
||||
<socialClass>8</socialClass>
|
||||
</condition>
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="SummonNpc">
|
||||
<npcId>19269</npcId> <!-- Clan Flag -->
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15095" toLevel="1" name="Clan Rising">
|
||||
<!-- Glory Days confirmed -->
|
||||
<!-- Through the clan flag, increases clan members' PvP damage by 5% and decreases received PvP damage by 5%. -->
|
||||
<icon>BranchSys2.icon.skill20006</icon>
|
||||
<operateType>A2</operateType>
|
||||
<hitTime>1500</hitTime>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<blockedInOlympiad>false</blockedInOlympiad>
|
||||
<abnormalType>FLAG_BUF</abnormalType>
|
||||
<abnormalVisualEffect>REAL_TARGET</abnormalVisualEffect>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<hitCancelTime>0</hitCancelTime>
|
||||
<magicLvl>90</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>600</abnormalTime> <!-- It is despawned after 30 minutes but the effect lasts for 10 more minutes. -->
|
||||
<affectRange>2000</affectRange>
|
||||
<isMagic>1</isMagic>
|
||||
<isMagic>4</isMagic>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>FRIEND_PC</affectObject>
|
||||
@@ -3048,10 +3055,9 @@
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="15096" toLevel="1" name="Clan Curse">
|
||||
<!-- AUTO GENERATED SKILL -->
|
||||
<!-- Domain where the clan flag's curse applies. -->
|
||||
<icon>icon.skill1167</icon>
|
||||
<operateType>A2</operateType>
|
||||
<operateType>A5</operateType> <!-- Hide system messages -->
|
||||
<abnormalType>FLAG_DEBUF</abnormalType>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<rideState>NONE</rideState>
|
||||
@@ -3062,13 +3068,12 @@
|
||||
<activateRate>100</activateRate>
|
||||
<magicLvl>99</magicLvl>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>40</abnormalTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<trait>POISON</trait>
|
||||
<affectRange>2000</affectRange>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>POINT_BLANK</affectScope>
|
||||
<affectObject>NOT_FRIEND_PC</affectObject>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
</skill>
|
||||
<skill id="15097" toLevel="1" name="Raid Boss">
|
||||
<!-- Glory Days confirmed -->
|
||||
|
@@ -99,6 +99,8 @@ public final class Skill implements IIdentifiable
|
||||
private final int _itemConsumeCount;
|
||||
/** Id of item consumed by this skill from caster. */
|
||||
private final int _itemConsumeId;
|
||||
/** Clan points consumed by this skill from caster's clan */
|
||||
private final int _clanRepConsume;
|
||||
/** Cast range: how far can be the target. */
|
||||
private final int _castRange;
|
||||
/** Effect range: how far the skill affect the target. */
|
||||
@@ -227,6 +229,7 @@ public final class Skill implements IIdentifiable
|
||||
_hpConsume = set.getInt("hpConsume", 0);
|
||||
_itemConsumeCount = set.getInt("itemConsumeCount", 0);
|
||||
_itemConsumeId = set.getInt("itemConsumeId", 0);
|
||||
_clanRepConsume = set.getInt("clanRepConsume", 0);
|
||||
|
||||
_castRange = set.getInt("castRange", -1);
|
||||
_effectRange = set.getInt("effectRange", -1);
|
||||
@@ -724,6 +727,14 @@ public final class Skill implements IIdentifiable
|
||||
return _itemConsumeId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Clan points consumed by this skill from caster's clan
|
||||
*/
|
||||
public int getClanRepConsume()
|
||||
{
|
||||
return _clanRepConsume;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the level.
|
||||
*/
|
||||
|
@@ -38,6 +38,7 @@ import com.l2jmobius.gameserver.enums.ItemSkillType;
|
||||
import com.l2jmobius.gameserver.enums.NextActionType;
|
||||
import com.l2jmobius.gameserver.enums.StatusUpdateType;
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@@ -339,6 +340,27 @@ public class SkillCaster implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
if (caster.isPlayer())
|
||||
{
|
||||
final L2PcInstance player = caster.getActingPlayer();
|
||||
final L2Clan clan = player.getClan();
|
||||
|
||||
// Consume clan reputation points
|
||||
if (_skill.getClanRepConsume() > 0)
|
||||
{
|
||||
if ((clan == null) || (clan.getReputationScore() < _skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
clan.takeReputationScore(_skill.getClanRepConsume(), true);
|
||||
|
||||
final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_REPUTATION_HAS_BEEN_CONSUMED);
|
||||
msg.addInt(_skill.getClanRepConsume());
|
||||
player.sendPacket(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger any skill cast start effects.
|
||||
if (target.isCharacter())
|
||||
{
|
||||
@@ -959,6 +981,17 @@ public class SkillCaster implements Runnable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Consume clan reputation points
|
||||
if (skill.getClanRepConsume() > 0)
|
||||
{
|
||||
final L2Clan clan = player.getClan();
|
||||
if ((clan == null) || (clan.getReputationScore() < skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for skill reuse (fixes macro right click press exploit).
|
||||
if (caster.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
|
@@ -99,6 +99,8 @@ public final class Skill implements IIdentifiable
|
||||
private final int _itemConsumeCount;
|
||||
/** Id of item consumed by this skill from caster. */
|
||||
private final int _itemConsumeId;
|
||||
/** Clan points consumed by this skill from caster's clan */
|
||||
private final int _clanRepConsume;
|
||||
/** Cast range: how far can be the target. */
|
||||
private final int _castRange;
|
||||
/** Effect range: how far the skill affect the target. */
|
||||
@@ -227,6 +229,7 @@ public final class Skill implements IIdentifiable
|
||||
_hpConsume = set.getInt("hpConsume", 0);
|
||||
_itemConsumeCount = set.getInt("itemConsumeCount", 0);
|
||||
_itemConsumeId = set.getInt("itemConsumeId", 0);
|
||||
_clanRepConsume = set.getInt("clanRepConsume", 0);
|
||||
|
||||
_castRange = set.getInt("castRange", -1);
|
||||
_effectRange = set.getInt("effectRange", -1);
|
||||
@@ -724,6 +727,14 @@ public final class Skill implements IIdentifiable
|
||||
return _itemConsumeId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Clan points consumed by this skill from caster's clan
|
||||
*/
|
||||
public int getClanRepConsume()
|
||||
{
|
||||
return _clanRepConsume;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the level.
|
||||
*/
|
||||
|
@@ -38,6 +38,7 @@ import com.l2jmobius.gameserver.enums.ItemSkillType;
|
||||
import com.l2jmobius.gameserver.enums.NextActionType;
|
||||
import com.l2jmobius.gameserver.enums.StatusUpdateType;
|
||||
import com.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@@ -339,6 +340,27 @@ public class SkillCaster implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
if (caster.isPlayer())
|
||||
{
|
||||
final L2PcInstance player = caster.getActingPlayer();
|
||||
final L2Clan clan = player.getClan();
|
||||
|
||||
// Consume clan reputation points
|
||||
if (_skill.getClanRepConsume() > 0)
|
||||
{
|
||||
if ((clan == null) || (clan.getReputationScore() < _skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
clan.takeReputationScore(_skill.getClanRepConsume(), true);
|
||||
|
||||
final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_REPUTATION_HAS_BEEN_CONSUMED);
|
||||
msg.addInt(_skill.getClanRepConsume());
|
||||
player.sendPacket(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger any skill cast start effects.
|
||||
if (target.isCharacter())
|
||||
{
|
||||
@@ -959,6 +981,17 @@ public class SkillCaster implements Runnable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Consume clan reputation points
|
||||
if (skill.getClanRepConsume() > 0)
|
||||
{
|
||||
final L2Clan clan = player.getClan();
|
||||
if ((clan == null) || (clan.getReputationScore() < skill.getClanRepConsume()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for skill reuse (fixes macro right click press exploit).
|
||||
if (caster.hasSkillReuse(skill.getReuseHashCode()))
|
||||
{
|
||||
|
Reference in New Issue
Block a user