Store sub certificate count in player variables.

This commit is contained in:
MobiusDevelopment 2020-02-12 16:26:52 +00:00
parent ec99d2b32d
commit d22dabe8ca
9 changed files with 210 additions and 39 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)