Clan Advent should increase with clan level.

Contributed by manax182.
This commit is contained in:
MobiusDevelopment
2021-06-11 22:13:04 +00:00
parent 4a3b9af9c4
commit 661d9fbef7
6 changed files with 270 additions and 46 deletions

View File

@@ -21,6 +21,8 @@ import java.util.Map;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
@@ -30,7 +32,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerProfessionChange; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerProfessionChange;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skills.Skill;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -72,6 +75,25 @@ public class ClanMaster extends AbstractNpcAI
addTalkId(NPCS); addTalkId(NPCS);
} }
public static Skill getAdventSkill(Clan clan)
{
return ADVENTS[Math.max(Math.min(clan.getLevel() - 1, ADVENTS.length - 1), 0)].getSkill();
}
private static final SkillHolder[] ADVENTS =
{
new SkillHolder(19009, 1),
new SkillHolder(19009, 2),
new SkillHolder(19009, 3),
new SkillHolder(19009, 4),
new SkillHolder(19009, 5),
new SkillHolder(19009, 6),
new SkillHolder(19009, 7),
new SkillHolder(19009, 8),
new SkillHolder(19009, 9),
new SkillHolder(19009, 10)
};
@Override @Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player) public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{ {
@@ -95,17 +117,33 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader()) if (player.isClanLeader())
{ {
final Skill advent = getAdventSkill(player.getClan());
player.getClan().getMembers().forEach(member -> player.getClan().getMembers().forEach(member ->
{ {
if (member.isOnline()) if (member.isOnline())
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(member.getPlayerInstance(), member.getPlayerInstance()); advent.applyEffects(member.getPlayerInstance(), member.getPlayerInstance());
} }
}); });
} }
else if ((player.getClan() != null) && player.getClan().getLeader().isOnline()) else if (player.getClan() != null)
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline())
{
advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() == 100)
{
advent.applyEffects(player, player);
break;
}
}
}
} }
} }
@@ -116,17 +154,27 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader()) if (player.isClanLeader())
{ {
player.getClan().getMembers().forEach(member -> boolean removing = true;
for (ClanMember member : player.getClan().getMembers())
{ {
if (member.isOnline()) if (member.getPledgeType() > 0)
{ {
member.getPlayerInstance().getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); removing = false;
break;
} }
}); }
} if (removing)
if (player.getClan() != null) {
{ final Skill advent = getAdventSkill(player.getClan());
player.getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); player.getEffectList().stopSkillEffects(true, advent);
player.getClan().getMembers().forEach(member ->
{
if (member.isOnline())
{
member.getPlayerInstance().getEffectList().stopSkillEffects(true, advent);
}
});
}
} }
} }
@@ -137,7 +185,22 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader() || ((player.getClan() != null) && player.getClan().getLeader().isOnline())) if (player.isClanLeader() || ((player.getClan() != null) && player.getClan().getLeader().isOnline()))
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline())
{
advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() > 0)
{
advent.applyEffects(player, player);
break;
}
}
}
} }
} }
@@ -146,9 +209,21 @@ public class ClanMaster extends AbstractNpcAI
public void onPlayerClanJoin(OnPlayerClanJoin event) public void onPlayerClanJoin(OnPlayerClanJoin event)
{ {
final PlayerInstance player = event.getClanMember().getPlayerInstance(); final PlayerInstance player = event.getClanMember().getPlayerInstance();
final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline()) if (player.getClan().getLeader().isOnline())
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() > 0)
{
advent.applyEffects(player, player);
break;
}
}
} }
} }
@@ -156,7 +231,7 @@ public class ClanMaster extends AbstractNpcAI
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerClanLeft(OnPlayerClanLeft event) public void onPlayerClanLeft(OnPlayerClanLeft event)
{ {
event.getClanMember().getPlayerInstance().getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); event.getClanMember().getPlayerInstance().getEffectList().stopSkillEffects(true, getAdventSkill(event.getClan()));
} }
public static void main(String[] args) public static void main(String[] args)

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd"> <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
<skill id="19009" toLevel="1" name="Clan Advent"> <skill id="19009" toLevel="10" name="Clan Advent">
<!-- When a clan leader is online, the following effects are applied for clan members. P. Atk. +$s1 M. Atk. +$s2 --> <!-- When a clan leader is online, the following effects are applied for clan members. P. Atk. +$s1 M. Atk. +$s2 -->
<icon>icon.skill19009</icon> <icon>icon.skill19009</icon>
<operateType>A2</operateType> <operateType>A2</operateType>
@@ -23,12 +23,49 @@
<affectObject>FRIEND</affectObject> <affectObject>FRIEND</affectObject>
<effects> <effects>
<effect name="PAtk"> <effect name="PAtk">
<amount>2</amount> <amount>
<mode>PER</mode> <value level="1">5</value>
<value level="2">10</value>
<value level="3">15</value>
<value level="4">25</value>
<value level="5">50</value>
<value level="6">100</value>
<value level="7">200</value>
<value level="8">200</value>
<value level="9">200</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect> </effect>
<effect name="MAtk"> <effect name="MAtk">
<amount>2</amount> <amount><value level="1">5</value>
<mode>PER</mode> <value level="2">10</value>
<value level="3">15</value>
<value level="4">25</value>
<value level="5">50</value>
<value level="6">100</value>
<value level="7">200</value>
<value level="8">200</value>
<value level="9">200</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect>
<effect name="PhysicalDefence" fromLevel="8" toLevel="10">
<amount>
<value level="8">50</value>
<value level="9">100</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect>
<effect name="MagicalDefence" fromLevel="8" toLevel="10">
<amount>
<value level="8">50</value>
<value level="9">100</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect> </effect>
</effects> </effects>
</skill> </skill>

View File

@@ -1288,12 +1288,12 @@ public class VillageMasterInstance extends NpcInstance
final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailablePledgeSkills(player.getClan()); final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailablePledgeSkills(player.getClan());
if (skills.isEmpty()) if (skills.isEmpty())
{ {
if (player.getClan().getLevel() < 8) if (player.getClan().getLevel() <= 1)
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
if (player.getClan().getLevel() < 5) if (player.getClan().getLevel() <= 1)
{ {
sm.addInt(5); sm.addInt(1);
} }
else else
{ {

View File

@@ -21,6 +21,8 @@ import java.util.Map;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
@@ -30,7 +32,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerProfessionChange; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerProfessionChange;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skills.Skill;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -72,6 +75,25 @@ public class ClanMaster extends AbstractNpcAI
addTalkId(NPCS); addTalkId(NPCS);
} }
public static Skill getAdventSkill(Clan clan)
{
return ADVENTS[Math.max(Math.min(clan.getLevel() - 1, ADVENTS.length - 1), 0)].getSkill();
}
private static final SkillHolder[] ADVENTS =
{
new SkillHolder(19009, 1),
new SkillHolder(19009, 2),
new SkillHolder(19009, 3),
new SkillHolder(19009, 4),
new SkillHolder(19009, 5),
new SkillHolder(19009, 6),
new SkillHolder(19009, 7),
new SkillHolder(19009, 8),
new SkillHolder(19009, 9),
new SkillHolder(19009, 10)
};
@Override @Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player) public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{ {
@@ -95,17 +117,33 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader()) if (player.isClanLeader())
{ {
final Skill advent = getAdventSkill(player.getClan());
player.getClan().getMembers().forEach(member -> player.getClan().getMembers().forEach(member ->
{ {
if (member.isOnline()) if (member.isOnline())
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(member.getPlayerInstance(), member.getPlayerInstance()); advent.applyEffects(member.getPlayerInstance(), member.getPlayerInstance());
} }
}); });
} }
else if ((player.getClan() != null) && player.getClan().getLeader().isOnline()) else if (player.getClan() != null)
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline())
{
advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() == 100)
{
advent.applyEffects(player, player);
break;
}
}
}
} }
} }
@@ -116,17 +154,27 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader()) if (player.isClanLeader())
{ {
player.getClan().getMembers().forEach(member -> boolean removing = true;
for (ClanMember member : player.getClan().getMembers())
{ {
if (member.isOnline()) if (member.getPledgeType() > 0)
{ {
member.getPlayerInstance().getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); removing = false;
break;
} }
}); }
} if (removing)
if (player.getClan() != null) {
{ final Skill advent = getAdventSkill(player.getClan());
player.getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); player.getEffectList().stopSkillEffects(true, advent);
player.getClan().getMembers().forEach(member ->
{
if (member.isOnline())
{
member.getPlayerInstance().getEffectList().stopSkillEffects(true, advent);
}
});
}
} }
} }
@@ -137,7 +185,22 @@ public class ClanMaster extends AbstractNpcAI
final PlayerInstance player = event.getPlayer(); final PlayerInstance player = event.getPlayer();
if (player.isClanLeader() || ((player.getClan() != null) && player.getClan().getLeader().isOnline())) if (player.isClanLeader() || ((player.getClan() != null) && player.getClan().getLeader().isOnline()))
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline())
{
advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() > 0)
{
advent.applyEffects(player, player);
break;
}
}
}
} }
} }
@@ -146,9 +209,21 @@ public class ClanMaster extends AbstractNpcAI
public void onPlayerClanJoin(OnPlayerClanJoin event) public void onPlayerClanJoin(OnPlayerClanJoin event)
{ {
final PlayerInstance player = event.getClanMember().getPlayerInstance(); final PlayerInstance player = event.getClanMember().getPlayerInstance();
final Skill advent = getAdventSkill(player.getClan());
if (player.getClan().getLeader().isOnline()) if (player.getClan().getLeader().isOnline())
{ {
CommonSkill.CLAN_ADVENT.getSkill().applyEffects(player, player); advent.applyEffects(player, player);
}
else
{
for (ClanMember member : player.getClan().getMembers())
{
if (member.getPledgeType() > 0)
{
advent.applyEffects(player, player);
break;
}
}
} }
} }
@@ -156,7 +231,7 @@ public class ClanMaster extends AbstractNpcAI
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerClanLeft(OnPlayerClanLeft event) public void onPlayerClanLeft(OnPlayerClanLeft event)
{ {
event.getClanMember().getPlayerInstance().getEffectList().stopSkillEffects(true, CommonSkill.CLAN_ADVENT.getId()); event.getClanMember().getPlayerInstance().getEffectList().stopSkillEffects(true, getAdventSkill(event.getClan()));
} }
public static void main(String[] args) public static void main(String[] args)

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd"> <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
<skill id="19009" toLevel="1" name="Clan Advent"> <skill id="19009" toLevel="10" name="Clan Advent">
<!-- When a clan leader is online, the following effects are applied for clan members. P. Atk. +$s1 M. Atk. +$s2 --> <!-- When a clan leader is online, the following effects are applied for clan members. P. Atk. +$s1 M. Atk. +$s2 -->
<icon>icon.skill19009</icon> <icon>icon.skill19009</icon>
<operateType>A2</operateType> <operateType>A2</operateType>
@@ -23,12 +23,49 @@
<affectObject>FRIEND</affectObject> <affectObject>FRIEND</affectObject>
<effects> <effects>
<effect name="PAtk"> <effect name="PAtk">
<amount>2</amount> <amount>
<mode>PER</mode> <value level="1">5</value>
<value level="2">10</value>
<value level="3">15</value>
<value level="4">25</value>
<value level="5">50</value>
<value level="6">100</value>
<value level="7">200</value>
<value level="8">200</value>
<value level="9">200</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect> </effect>
<effect name="MAtk"> <effect name="MAtk">
<amount>2</amount> <amount><value level="1">5</value>
<mode>PER</mode> <value level="2">10</value>
<value level="3">15</value>
<value level="4">25</value>
<value level="5">50</value>
<value level="6">100</value>
<value level="7">200</value>
<value level="8">200</value>
<value level="9">200</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect>
<effect name="PhysicalDefence" fromLevel="8" toLevel="10">
<amount>
<value level="8">50</value>
<value level="9">100</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect>
<effect name="MagicalDefence" fromLevel="8" toLevel="10">
<amount>
<value level="8">50</value>
<value level="9">100</value>
<value level="10">200</value>
</amount>
<mode>DIFF</mode>
</effect> </effect>
</effects> </effects>
</skill> </skill>

View File

@@ -1288,12 +1288,12 @@ public class VillageMasterInstance extends NpcInstance
final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailablePledgeSkills(player.getClan()); final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailablePledgeSkills(player.getClan());
if (skills.isEmpty()) if (skills.isEmpty())
{ {
if (player.getClan().getLevel() < 8) if (player.getClan().getLevel() <= 1)
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
if (player.getClan().getLevel() < 5) if (player.getClan().getLevel() <= 1)
{ {
sm.addInt(5); sm.addInt(1);
} }
else else
{ {