From d22dabe8ca27a124c13399d60cf821a74d7f5184 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 12 Feb 2020 16:26:52 +0000 Subject: [PATCH] Store sub certificate count in player variables. --- .../areas/TalkingIsland/Trandon/Trandon.java | 29 +++++++++++++++---- .../areas/TalkingIsland/Trandon/Trandon.java | 29 +++++++++++++++---- .../areas/TalkingIsland/Trandon/Trandon.java | 29 +++++++++++++++---- .../areas/TalkingIsland/Trandon/Trandon.java | 27 ++++++++++++++--- .../areas/TalkingIsland/Trandon/Trandon.java | 27 ++++++++++++++--- .../areas/TalkingIsland/Trandon/Trandon.java | 27 ++++++++++++++--- .../areas/TalkingIsland/Trandon/Trandon.java | 27 ++++++++++++++--- .../ai/areas/Aden/Gallias/Gallias.java | 27 ++++++++++++++--- .../areas/TalkingIsland/Trandon/Trandon.java | 27 ++++++++++++++--- 9 files changed, 210 insertions(+), 39 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 17b2bf81b7..80f975860b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -234,7 +247,7 @@ public class Trandon extends AbstractNpcAI } final int index = Integer.parseInt(substrings[1]); - if ((index < 0) || (index > 3)) + if ((index < 0) || (index > (DUAL_SKILL_LEVELS.length - 1))) { return null; } @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 17b2bf81b7..80f975860b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -234,7 +247,7 @@ public class Trandon extends AbstractNpcAI } final int index = Integer.parseInt(substrings[1]); - if ((index < 0) || (index > 3)) + if ((index < 0) || (index > (DUAL_SKILL_LEVELS.length - 1))) { return null; } @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 17b2bf81b7..80f975860b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -234,7 +247,7 @@ public class Trandon extends AbstractNpcAI } final int index = Integer.parseInt(substrings[1]); - if ((index < 0) || (index > 3)) + if ((index < 0) || (index > (DUAL_SKILL_LEVELS.length - 1))) { return null; } @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 22ae47b1b5..29c59c5095 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 22ae47b1b5..29c59c5095 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 22ae47b1b5..29c59c5095 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 22ae47b1b5..29c59c5095 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/Aden/Gallias/Gallias.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/Aden/Gallias/Gallias.java index 9e9f38f644..969e34003c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/Aden/Gallias/Gallias.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/Aden/Gallias/Gallias.java @@ -22,6 +22,7 @@ import org.l2jmobius.Config; import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -53,6 +54,8 @@ public class Gallias extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Gallias() { @@ -167,8 +170,14 @@ public class Gallias extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "34514-20.html"; } break; @@ -205,6 +214,10 @@ public class Gallias extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -256,8 +269,13 @@ public class Gallias extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "34514-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -305,6 +323,7 @@ public class Gallias extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS) diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java index 22ae47b1b5..29c59c5095 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/TalkingIsland/Trandon/Trandon.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.base.SubClass; import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.ListenerRegisterType; import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; @@ -51,6 +52,8 @@ public class Trandon extends AbstractNpcAI private static final int[] SUB_SKILL_LEVELS = {65, 70, 75, 80}; private static final int[] DUAL_SKILL_LEVELS = {85, 90, 95, 99, 101, 103, 105}; // @formatter:on + private static final String SUB_CERTIFICATE_COUNT_VAR = "SUB_CERTIFICATE_COUNT"; + private static final String DUAL_CERTIFICATE_COUNT_VAR = "DUAL_CERTIFICATE_COUNT"; private Trandon() { @@ -153,8 +156,14 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getSubSkillVariableName(player, level), true); - giveItems(player, SUB_CERTIFICATE, 1); + final int subId = player.getClassId().getId(); + final int currentCount = player.getVariables().getInt(SUB_CERTIFICATE_COUNT_VAR + subId, 0); + if (currentCount < SUB_SKILL_LEVELS.length) + { + player.getVariables().set(SUB_CERTIFICATE_COUNT_VAR + subId, currentCount + 1); + vars.set(getSubSkillVariableName(player, level), true); + giveItems(player, SUB_CERTIFICATE, 1); + } htmltext = "33490-20.html"; } break; @@ -200,6 +209,10 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, SUB_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_SUBCLASS_SKILLS); + for (SubClass subclass : player.getSubClasses().values()) + { + player.getVariables().remove(SUB_CERTIFICATE_COUNT_VAR + subclass.getClassId()); + } final PlayerVariables vars = player.getVariables(); for (int i = 1; i <= 3; i++) @@ -251,8 +264,13 @@ public class Trandon extends AbstractNpcAI } else { - vars.set(getDualSkillVariableName(level), true); - giveItems(player, DUAL_CERTIFICATE, 1); + final int currentCount = player.getVariables().getInt(DUAL_CERTIFICATE_COUNT_VAR, 0); + if (currentCount < DUAL_SKILL_LEVELS.length) + { + player.getVariables().set(DUAL_CERTIFICATE_COUNT_VAR, currentCount + 1); + vars.set(getDualSkillVariableName(level), true); + giveItems(player, DUAL_CERTIFICATE, 1); + } htmltext = getHtm(player, "33490-29.html"); } htmltext = htmltext.replace("%level%", String.valueOf(level)); @@ -300,6 +318,7 @@ public class Trandon extends AbstractNpcAI htmltext = null; // TODO: Unknown html takeItems(player, DUAL_CERTIFICATE, -1); takeItems(player, Inventory.ADENA_ID, Config.FEE_DELETE_DUALCLASS_SKILLS); + player.getVariables().remove(DUAL_CERTIFICATE_COUNT_VAR); final PlayerVariables vars = player.getVariables(); for (int lv : DUAL_SKILL_LEVELS)