[help]Сертификация
2 replies138 viewsCurrently viewing: 1
· 06/15/2009, 07:03 PM
Суть проблемы : Решил вот попробывать выдернуть сертификацию из феникса только проблема с ядром надоо написание под ядро сделать помогите плз под L2jServer переделать
Раскрывающийся текст
package services;
import java.util.ArrayList;
import java.util.HashMap;
import l2p.Config;
import l2p.extensions.multilang.CustomMessage;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Skill;
import l2p.gameserver.model.L2SubClass;
import l2p.gameserver.model.quest.QuestState;
import l2p.gameserver.serverpackets.AcquireSkillList;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.SkillTable;
import static l2p.gameserver.tables.SkillTable.SubclassSkills.*;
public class SubclassSkills extends Functions implements ScriptFile
{
// --- Сертификаты ---
private final static int CertificateEmergentAbility = 1; // 10280;
private final static int CertificateEmergentAbility2 = 2; // Затычка
private final static int CertificateWarriorAbility = 31; // 10281;
private final static int CertificateKnightAbility = 32; // 10282;
private final static int CertificateRogueAbility = 33; // 10283;
private final static int CertificateWizardAbility = 34; // 10284;
private final static int CertificateHealerAbility = 35; // 10285;
private final static int CertificateSummonerAbility = 36; // 10286;
private final static int CertificateEnchanterAbility = 37; // 10287;
private final static int TransformSealbookDivineWarrior = 41; // 10289;
private final static int TransformSealbookDivineKnight = 42; // 10288;
private final static int TransformSealbookDivineRogue = 43; // 10290;
private final static int TransformSealbookDivineWizard = 44; // 10292;
private final static int TransformSealbookDivineHealer = 45; // 10291;
private final static int TransformSealbookDivineSummoner = 46; // 10294;
private final static int TransformSealbookDivineEnchanter = 47; // 10293;
private static int[][] skills = new int[][] {
// Скилл - сертификат - минимальный уровень отображения
{ EmergentAbilityAttack.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityDefense.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityEmpower.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityMagicDefense.getId(), CertificateEmergentAbility, 65 },
{ MasterAbilityAttack.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityEmpower.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityCasting.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityFocus.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityDefense.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityMagicDefense.getId(), CertificateEmergentAbility2, 75 },
{ KnightAbilityBoostHP.getId(), CertificateKnightAbility, 75 },
{ KnightAbilityDefense.getId(), CertificateKnightAbility, 75 },
{ KnightAbilityResistCritical.getId(), CertificateKnightAbility, 75 },
{ EnchanterAbilityBoostMana.getId(), CertificateEnchanterAbility, 75 },
{ EnchanterAbilityManaRecycle.getId(), CertificateEnchanterAbility, 75 },
{ EnchanterAbilityBarrier.getId(), CertificateEnchanterAbility, 75 },
{ SummonerAbilityBoostHPMP.getId(), CertificateSummonerAbility, 75 },
{ SummonerAbilityResistAttribute.getId(), CertificateSummonerAbility, 75 },
{ SummonerAbilitySpirit.getId(), CertificateSummonerAbility, 75 },
{ RogueAbilityEvasion.getId(), CertificateRogueAbility, 75 },
{ RogueAbilityLongShot.getId(), CertificateRogueAbility, 75 },
{ RogueAbilityCriticalChance.getId(), CertificateRogueAbility, 75 },
{ WizardAbilityManaGain.getId(), CertificateWizardAbility, 75 },
{ WizardAbilityManaSteal.getId(), CertificateWizardAbility, 75 },
{ WizardAbilityAntimagic.getId(), CertificateWizardAbility, 75 },
{ HealerAbilityPrayer.getId(), CertificateHealerAbility, 75 },
{ HealerAbilityHeal.getId(), CertificateHealerAbility, 75 },
{ HealerAbilityDivineProtection.getId(), CertificateHealerAbility, 75 },
{ WarriorAbilityResistTrait.getId(), CertificateWarriorAbility, 75 },
{ WarriorAbilityHaste.getId(), CertificateWarriorAbility, 75 },
{ WarriorAbilityBoostCP.getId(), CertificateWarriorAbility, 75 },
{ TransformDivineWarrior.getId(), TransformSealbookDivineWarrior, 80 },
{ TransformDivineKnight.getId(), TransformSealbookDivineKnight, 80 },
{ TransformDivineRogue.getId(), TransformSealbookDivineRogue, 80 },
{ TransformDivineWizard.getId(), TransformSealbookDivineWizard, 80 },
{ TransformDivineSummoner.getId(), TransformSealbookDivineSummoner, 80 },
{ TransformDivineHealer.getId(), TransformSealbookDivineHealer, 80 },
{ TransformDivineEnchanter.getId(), TransformSealbookDivineEnchanter, 80 } };
private static int[][] classes = new int[][] {
// Класс - второй сертификат (75) - третий сертификат (80)
// --- Warriors ---
// Gladiator
{ 2, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 88, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Warlord
{ 3, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 89, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Bounty Hunter
{ 55, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 117, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Tyrant
{ 48, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 114, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Destroyer
{ 46, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 113, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Soul Breaker
{ 128, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 132, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Soul Breaker
{ 129, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 133, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Berserker
{ 127, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 131, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// --- Knights ---
// Paladin
{ 5, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 90, CertificateKnightAbility, TransformSealbookDivineKnight },
// Dark Avenger
{ 6, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 91, CertificateKnightAbility, TransformSealbookDivineKnight },
// Temple Knight
{ 20, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 99, CertificateKnightAbility, TransformSealbookDivineKnight },
// Shillien Knight
{ 33, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 106, CertificateKnightAbility, TransformSealbookDivineKnight },
// --- Rogues ---
// Hawkeye
{ 9, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 92, CertificateRogueAbility, TransformSealbookDivineRogue },
// Silver Ranger
{ 24, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 102, CertificateRogueAbility, TransformSealbookDivineRogue },
// Phantom Ranger
{ 37, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 109, CertificateRogueAbility, TransformSealbookDivineRogue },
// Treasure Hunter
{ 8, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 93, CertificateRogueAbility, TransformSealbookDivineRogue },
// Plains Walker
{ 23, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 101, CertificateRogueAbility, TransformSealbookDivineRogue },
// Abyss Walker
{ 36, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 108, CertificateRogueAbility, TransformSealbookDivineRogue },
// Arbalester
{ 130, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 134, CertificateRogueAbility, TransformSealbookDivineRogue },
// --- Wizards ---
// Sorcecer
{ 12, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 94, CertificateWizardAbility, TransformSealbookDivineWizard },
// Spellsinger
{ 27, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 103, CertificateWizardAbility, TransformSealbookDivineWizard },
// Spellhowler
{ 40, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 110, CertificateWizardAbility, TransformSealbookDivineWizard },
// Necromancer
{ 13, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 95, CertificateWizardAbility, TransformSealbookDivineWizard },
// --- Healers ---
// Shillien Elder
{ 43, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 112, CertificateHealerAbility, TransformSealbookDivineHealer },
// Elder
{ 30, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 105, CertificateHealerAbility, TransformSealbookDivineHealer },
// Bishop
{ 16, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 97, CertificateHealerAbility, TransformSealbookDivineHealer },
// --- Summoners ---
// Warlock
{ 14, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 96, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// Elemental Summoner
{ 28, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 104, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// Phantom Summoner
{ 41, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 111, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// --- Enchanters ---
// Prophet
{ 17, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 98, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Warcryer
{ 52, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 116, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Inspector
{ 135, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 136, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Sword Singer
{ 21, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 100, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Bladedancer
{ 34, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 107, CertificateEnchanterAbility, TransformSealbookDivineEnchanter } };
public void showList()
{
L2Player player = (L2Player) getSelf();
if(!Config.ALLOW_LEARN_TRANS_SKILLS_WO_QUEST)
{
QuestState qs = player.getQuestState("_136_MoreThanMeetsTheEye");
if(qs == null || !qs.isCompleted())
{
show("You must complete the ”More Than Meets the Eye” transformation quest in order to receive the subclass certification and to properly acquire the skill as your main class.", player);
return;
}
}
AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.TRANSFORMATION);
ArrayList<L2Skill> skills = getAvailableSkills(player);
if(skills.isEmpty())
{
show("You've learned all skills available for your Subclass.", player);
return;
}
for(L2Skill skill : skills)
asl.addSkill(skill.getId(), skill.getLevel(), skill.getLevel(), 0, 1);
player.sendPacket(asl);
}
public ArrayList<L2Skill> getAvailableSkills(L2Player player)
{
ArrayList<L2Skill> result = new ArrayList<L2Skill>();
if(!player.isSubClassActive() || player.getLevel() < 65)
return result;
ArrayList<Integer> certificates = getPossibleCertificates(player);
for(int[] tmp : skills)
if(tmp[2] <= player.getLevel() && certificates.contains(tmp[1]) && canLearn(player, tmp[0]))
{
L2Skill skill = SkillTable.getInstance().getInfo(tmp[0], getSumLevel(player, tmp[0]) + 1);
if(skill == null)
System.out.println("getAvailableSkills: skill is null! id: " + tmp[0] + ", level: " + (getSumLevel(player, tmp[0]) + 1));
else
result.add(skill);
}
return result;
}
public ArrayList<Integer> getPossibleCertificates(L2Player player)
{
ArrayList<Integer> certificates = new ArrayList<Integer>();
if(!player.isSubClassActive() || player.getLevel() < 65)
return certificates;
int class_id = player.getClassId().getId();
certificates.add(CertificateEmergentAbility);
if(player.getLevel() >= 75)
certificates.add(CertificateEmergentAbility2);
for(int[] tmp : classes)
if(tmp[0] == class_id)
{
if(player.getLevel() >= 75 && !certificates.contains(tmp[1]))
certificates.add(tmp[1]);
if(player.getLevel() >= 80 && !certificates.contains(tmp[2]))
certificates.add(tmp[2]);
}
return certificates;
}
public static int getSumLevel(L2Player player, int skill_id)
{
int sum_level = 0;
for(L2SubClass sb : player.getSubClasses().values())
for(L2Skill skill : sb.getSkillsList())
if(skill != null && skill.getId() == skill_id)
sum_level += skill.getLevel();
return sum_level;
}
public static boolean canLearn(L2Player player, int skill_id)
{
int max_level = SkillTable.getInstance().getMaxLevel(skill_id);
if(getSumLevel(player, skill_id) >= max_level)
return false;
for(int[] tmp : skills)
if(tmp[0] == skill_id)
{
if(tmp[2] > player.getLevel())
return false;
int count = 0;
for(L2Skill skill : player.getActiveClass().getSkillsList())
{
if(tmp[2] == 75 && is75skill(skill.getId()))
return false;
if(getCertificateForSkill(skill.getId()) == tmp[1])
count += skill.getLevel();
}
if(count > 0)
{
if(tmp[1] == CertificateEmergentAbility)
return player.getLevel() >= 70 && count < 2;
return false;
}
break;
}
return true;
}
public static int getCertificateForSkill(int skill_id)
{
for(int[] tmp : skills)
if(tmp[0] == skill_id)
return tmp[1];
return -1;
}
public static void learnSkill(L2Player player, Integer skill_id)
{
if(!player.isSubClassActive() || player.getLevel() < 65 || !canLearn(player, skill_id))
{
player.sendActionFailed();
return;
}
/**
int certificate_id = getCertificateForSkill(skill_id);
L2ItemInstance certificate = player.getInventory().findItemByItemId(certificate_id);
if(certificate == null || certificate.getIntegerLimitedCount() < 1)
{
player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_SKILLS));
return;
}
L2ItemInstance ri = player.getInventory().destroyItem(certificate, 1, true);
player.sendPacket(new SystemMessage(SystemMessage.S1_HAS_DISAPPEARED).addItemName(ri.getItemId()));
*/
L2Skill old_skill = null;
if(player.getActiveClass().getSkillsList().contains(skill_id))
old_skill = player.getActiveClass().getSkillsList().get(skill_id);
int new_level = old_skill == null ? 1 : old_skill.getLevel() + 1;
player.getActiveClass().setSkills(player.getActiveClass().getSkills() + (player.getActiveClass().getSkills().isEmpty() ? "" : ";") + skill_id);
player.sendPacket(new SystemMessage(SystemMessage.YOU_HAVE_EARNED_S1).addSkillName(skill_id, new_level));
HashMap<String, Object> variables = new HashMap<String, Object>();
variables.put("self", player.getStoredId());
callScripts("services.SubclassSkills", "showList", new Object[0], variables);
}
public void deleteSkills()
{
L2Player player = (L2Player) getSelf();
if(!player.isSubClassActive() || player.getLevel() < 65)
{
player.sendActionFailed();
return;
}
if(player.getInventory().getAdena() < 10000000)
{
player.sendActionFailed();
player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
return;
}
player.getInventory().reduceAdena(10000000);
player.getActiveClass().setSkills("");
show(new CustomMessage("scripts.services.SubclassSkills.SkillsDeleted", player), player);
}
private static boolean is75skill(int skill_id)
{
for(int[] tmp : skills)
if(tmp[0] == skill_id && tmp[2] == 75)
return true;
return false;
}
/*
10280 Certificate - Emergent Ability a,Certificate needed to learn an Emergent Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10281 Certificate - Warrior Ability a,Certificate needed to learn a Warrior Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10282 Certificate - Knight Ability a,Certificate needed to learn a Knight Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10283 Certificate - Rogue Ability a,Certificate needed to learn a Rogue Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10284 Certificate - Wizard Ability a,Certificate needed to learn a Wizard Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10285 Certificate - Healer Ability a,Certificate needed to learn a Healer Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10286 Certificate - Summoner Ability a,Certificate needed to learn a Summoner Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10287 Certificate - Enchanter Ability a,Certificate needed to learn an Enchanter Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10288 Transform Sealbook - Divine Knight a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10289 Transform Sealbook - Divine Warrior a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10290 Transform Sealbook - Divine Rogue a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10291 Transform Sealbook - Divine Healer a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10292 Transform Sealbook - Divine Wizard a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10293 Transform Sealbook - Divine Enchanter a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10294 Transform Sealbook - Divine Summoner a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
*/
public void onLoad()
{
System.out.println("Loaded Service: Subclass Skills");
}
public void onReload()
{}
public void onShutdown()
{}
}
import java.util.ArrayList;
import java.util.HashMap;
import l2p.Config;
import l2p.extensions.multilang.CustomMessage;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Skill;
import l2p.gameserver.model.L2SubClass;
import l2p.gameserver.model.quest.QuestState;
import l2p.gameserver.serverpackets.AcquireSkillList;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.SkillTable;
import static l2p.gameserver.tables.SkillTable.SubclassSkills.*;
public class SubclassSkills extends Functions implements ScriptFile
{
// --- Сертификаты ---
private final static int CertificateEmergentAbility = 1; // 10280;
private final static int CertificateEmergentAbility2 = 2; // Затычка
private final static int CertificateWarriorAbility = 31; // 10281;
private final static int CertificateKnightAbility = 32; // 10282;
private final static int CertificateRogueAbility = 33; // 10283;
private final static int CertificateWizardAbility = 34; // 10284;
private final static int CertificateHealerAbility = 35; // 10285;
private final static int CertificateSummonerAbility = 36; // 10286;
private final static int CertificateEnchanterAbility = 37; // 10287;
private final static int TransformSealbookDivineWarrior = 41; // 10289;
private final static int TransformSealbookDivineKnight = 42; // 10288;
private final static int TransformSealbookDivineRogue = 43; // 10290;
private final static int TransformSealbookDivineWizard = 44; // 10292;
private final static int TransformSealbookDivineHealer = 45; // 10291;
private final static int TransformSealbookDivineSummoner = 46; // 10294;
private final static int TransformSealbookDivineEnchanter = 47; // 10293;
private static int[][] skills = new int[][] {
// Скилл - сертификат - минимальный уровень отображения
{ EmergentAbilityAttack.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityDefense.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityEmpower.getId(), CertificateEmergentAbility, 65 },
{ EmergentAbilityMagicDefense.getId(), CertificateEmergentAbility, 65 },
{ MasterAbilityAttack.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityEmpower.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityCasting.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityFocus.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityDefense.getId(), CertificateEmergentAbility2, 75 },
{ MasterAbilityMagicDefense.getId(), CertificateEmergentAbility2, 75 },
{ KnightAbilityBoostHP.getId(), CertificateKnightAbility, 75 },
{ KnightAbilityDefense.getId(), CertificateKnightAbility, 75 },
{ KnightAbilityResistCritical.getId(), CertificateKnightAbility, 75 },
{ EnchanterAbilityBoostMana.getId(), CertificateEnchanterAbility, 75 },
{ EnchanterAbilityManaRecycle.getId(), CertificateEnchanterAbility, 75 },
{ EnchanterAbilityBarrier.getId(), CertificateEnchanterAbility, 75 },
{ SummonerAbilityBoostHPMP.getId(), CertificateSummonerAbility, 75 },
{ SummonerAbilityResistAttribute.getId(), CertificateSummonerAbility, 75 },
{ SummonerAbilitySpirit.getId(), CertificateSummonerAbility, 75 },
{ RogueAbilityEvasion.getId(), CertificateRogueAbility, 75 },
{ RogueAbilityLongShot.getId(), CertificateRogueAbility, 75 },
{ RogueAbilityCriticalChance.getId(), CertificateRogueAbility, 75 },
{ WizardAbilityManaGain.getId(), CertificateWizardAbility, 75 },
{ WizardAbilityManaSteal.getId(), CertificateWizardAbility, 75 },
{ WizardAbilityAntimagic.getId(), CertificateWizardAbility, 75 },
{ HealerAbilityPrayer.getId(), CertificateHealerAbility, 75 },
{ HealerAbilityHeal.getId(), CertificateHealerAbility, 75 },
{ HealerAbilityDivineProtection.getId(), CertificateHealerAbility, 75 },
{ WarriorAbilityResistTrait.getId(), CertificateWarriorAbility, 75 },
{ WarriorAbilityHaste.getId(), CertificateWarriorAbility, 75 },
{ WarriorAbilityBoostCP.getId(), CertificateWarriorAbility, 75 },
{ TransformDivineWarrior.getId(), TransformSealbookDivineWarrior, 80 },
{ TransformDivineKnight.getId(), TransformSealbookDivineKnight, 80 },
{ TransformDivineRogue.getId(), TransformSealbookDivineRogue, 80 },
{ TransformDivineWizard.getId(), TransformSealbookDivineWizard, 80 },
{ TransformDivineSummoner.getId(), TransformSealbookDivineSummoner, 80 },
{ TransformDivineHealer.getId(), TransformSealbookDivineHealer, 80 },
{ TransformDivineEnchanter.getId(), TransformSealbookDivineEnchanter, 80 } };
private static int[][] classes = new int[][] {
// Класс - второй сертификат (75) - третий сертификат (80)
// --- Warriors ---
// Gladiator
{ 2, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 88, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Warlord
{ 3, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 89, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Bounty Hunter
{ 55, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 117, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Tyrant
{ 48, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 114, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Destroyer
{ 46, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 113, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Soul Breaker
{ 128, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 132, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Soul Breaker
{ 129, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 133, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// Berserker
{ 127, CertificateWarriorAbility, TransformSealbookDivineWarrior },
{ 131, CertificateWarriorAbility, TransformSealbookDivineWarrior },
// --- Knights ---
// Paladin
{ 5, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 90, CertificateKnightAbility, TransformSealbookDivineKnight },
// Dark Avenger
{ 6, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 91, CertificateKnightAbility, TransformSealbookDivineKnight },
// Temple Knight
{ 20, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 99, CertificateKnightAbility, TransformSealbookDivineKnight },
// Shillien Knight
{ 33, CertificateKnightAbility, TransformSealbookDivineKnight },
{ 106, CertificateKnightAbility, TransformSealbookDivineKnight },
// --- Rogues ---
// Hawkeye
{ 9, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 92, CertificateRogueAbility, TransformSealbookDivineRogue },
// Silver Ranger
{ 24, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 102, CertificateRogueAbility, TransformSealbookDivineRogue },
// Phantom Ranger
{ 37, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 109, CertificateRogueAbility, TransformSealbookDivineRogue },
// Treasure Hunter
{ 8, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 93, CertificateRogueAbility, TransformSealbookDivineRogue },
// Plains Walker
{ 23, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 101, CertificateRogueAbility, TransformSealbookDivineRogue },
// Abyss Walker
{ 36, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 108, CertificateRogueAbility, TransformSealbookDivineRogue },
// Arbalester
{ 130, CertificateRogueAbility, TransformSealbookDivineRogue },
{ 134, CertificateRogueAbility, TransformSealbookDivineRogue },
// --- Wizards ---
// Sorcecer
{ 12, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 94, CertificateWizardAbility, TransformSealbookDivineWizard },
// Spellsinger
{ 27, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 103, CertificateWizardAbility, TransformSealbookDivineWizard },
// Spellhowler
{ 40, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 110, CertificateWizardAbility, TransformSealbookDivineWizard },
// Necromancer
{ 13, CertificateWizardAbility, TransformSealbookDivineWizard },
{ 95, CertificateWizardAbility, TransformSealbookDivineWizard },
// --- Healers ---
// Shillien Elder
{ 43, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 112, CertificateHealerAbility, TransformSealbookDivineHealer },
// Elder
{ 30, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 105, CertificateHealerAbility, TransformSealbookDivineHealer },
// Bishop
{ 16, CertificateHealerAbility, TransformSealbookDivineHealer },
{ 97, CertificateHealerAbility, TransformSealbookDivineHealer },
// --- Summoners ---
// Warlock
{ 14, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 96, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// Elemental Summoner
{ 28, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 104, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// Phantom Summoner
{ 41, CertificateSummonerAbility, TransformSealbookDivineSummoner },
{ 111, CertificateSummonerAbility, TransformSealbookDivineSummoner },
// --- Enchanters ---
// Prophet
{ 17, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 98, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Warcryer
{ 52, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 116, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Inspector
{ 135, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 136, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Sword Singer
{ 21, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 100, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
// Bladedancer
{ 34, CertificateEnchanterAbility, TransformSealbookDivineEnchanter },
{ 107, CertificateEnchanterAbility, TransformSealbookDivineEnchanter } };
public void showList()
{
L2Player player = (L2Player) getSelf();
if(!Config.ALLOW_LEARN_TRANS_SKILLS_WO_QUEST)
{
QuestState qs = player.getQuestState("_136_MoreThanMeetsTheEye");
if(qs == null || !qs.isCompleted())
{
show("You must complete the ”More Than Meets the Eye” transformation quest in order to receive the subclass certification and to properly acquire the skill as your main class.", player);
return;
}
}
AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.TRANSFORMATION);
ArrayList<L2Skill> skills = getAvailableSkills(player);
if(skills.isEmpty())
{
show("You've learned all skills available for your Subclass.", player);
return;
}
for(L2Skill skill : skills)
asl.addSkill(skill.getId(), skill.getLevel(), skill.getLevel(), 0, 1);
player.sendPacket(asl);
}
public ArrayList<L2Skill> getAvailableSkills(L2Player player)
{
ArrayList<L2Skill> result = new ArrayList<L2Skill>();
if(!player.isSubClassActive() || player.getLevel() < 65)
return result;
ArrayList<Integer> certificates = getPossibleCertificates(player);
for(int[] tmp : skills)
if(tmp[2] <= player.getLevel() && certificates.contains(tmp[1]) && canLearn(player, tmp[0]))
{
L2Skill skill = SkillTable.getInstance().getInfo(tmp[0], getSumLevel(player, tmp[0]) + 1);
if(skill == null)
System.out.println("getAvailableSkills: skill is null! id: " + tmp[0] + ", level: " + (getSumLevel(player, tmp[0]) + 1));
else
result.add(skill);
}
return result;
}
public ArrayList<Integer> getPossibleCertificates(L2Player player)
{
ArrayList<Integer> certificates = new ArrayList<Integer>();
if(!player.isSubClassActive() || player.getLevel() < 65)
return certificates;
int class_id = player.getClassId().getId();
certificates.add(CertificateEmergentAbility);
if(player.getLevel() >= 75)
certificates.add(CertificateEmergentAbility2);
for(int[] tmp : classes)
if(tmp[0] == class_id)
{
if(player.getLevel() >= 75 && !certificates.contains(tmp[1]))
certificates.add(tmp[1]);
if(player.getLevel() >= 80 && !certificates.contains(tmp[2]))
certificates.add(tmp[2]);
}
return certificates;
}
public static int getSumLevel(L2Player player, int skill_id)
{
int sum_level = 0;
for(L2SubClass sb : player.getSubClasses().values())
for(L2Skill skill : sb.getSkillsList())
if(skill != null && skill.getId() == skill_id)
sum_level += skill.getLevel();
return sum_level;
}
public static boolean canLearn(L2Player player, int skill_id)
{
int max_level = SkillTable.getInstance().getMaxLevel(skill_id);
if(getSumLevel(player, skill_id) >= max_level)
return false;
for(int[] tmp : skills)
if(tmp[0] == skill_id)
{
if(tmp[2] > player.getLevel())
return false;
int count = 0;
for(L2Skill skill : player.getActiveClass().getSkillsList())
{
if(tmp[2] == 75 && is75skill(skill.getId()))
return false;
if(getCertificateForSkill(skill.getId()) == tmp[1])
count += skill.getLevel();
}
if(count > 0)
{
if(tmp[1] == CertificateEmergentAbility)
return player.getLevel() >= 70 && count < 2;
return false;
}
break;
}
return true;
}
public static int getCertificateForSkill(int skill_id)
{
for(int[] tmp : skills)
if(tmp[0] == skill_id)
return tmp[1];
return -1;
}
public static void learnSkill(L2Player player, Integer skill_id)
{
if(!player.isSubClassActive() || player.getLevel() < 65 || !canLearn(player, skill_id))
{
player.sendActionFailed();
return;
}
/**
int certificate_id = getCertificateForSkill(skill_id);
L2ItemInstance certificate = player.getInventory().findItemByItemId(certificate_id);
if(certificate == null || certificate.getIntegerLimitedCount() < 1)
{
player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_SKILLS));
return;
}
L2ItemInstance ri = player.getInventory().destroyItem(certificate, 1, true);
player.sendPacket(new SystemMessage(SystemMessage.S1_HAS_DISAPPEARED).addItemName(ri.getItemId()));
*/
L2Skill old_skill = null;
if(player.getActiveClass().getSkillsList().contains(skill_id))
old_skill = player.getActiveClass().getSkillsList().get(skill_id);
int new_level = old_skill == null ? 1 : old_skill.getLevel() + 1;
player.getActiveClass().setSkills(player.getActiveClass().getSkills() + (player.getActiveClass().getSkills().isEmpty() ? "" : ";") + skill_id);
player.sendPacket(new SystemMessage(SystemMessage.YOU_HAVE_EARNED_S1).addSkillName(skill_id, new_level));
HashMap<String, Object> variables = new HashMap<String, Object>();
variables.put("self", player.getStoredId());
callScripts("services.SubclassSkills", "showList", new Object[0], variables);
}
public void deleteSkills()
{
L2Player player = (L2Player) getSelf();
if(!player.isSubClassActive() || player.getLevel() < 65)
{
player.sendActionFailed();
return;
}
if(player.getInventory().getAdena() < 10000000)
{
player.sendActionFailed();
player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
return;
}
player.getInventory().reduceAdena(10000000);
player.getActiveClass().setSkills("");
show(new CustomMessage("scripts.services.SubclassSkills.SkillsDeleted", player), player);
}
private static boolean is75skill(int skill_id)
{
for(int[] tmp : skills)
if(tmp[0] == skill_id && tmp[2] == 75)
return true;
return false;
}
/*
10280 Certificate - Emergent Ability a,Certificate needed to learn an Emergent Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10281 Certificate - Warrior Ability a,Certificate needed to learn a Warrior Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10282 Certificate - Knight Ability a,Certificate needed to learn a Knight Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10283 Certificate - Rogue Ability a,Certificate needed to learn a Rogue Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10284 Certificate - Wizard Ability a,Certificate needed to learn a Wizard Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10285 Certificate - Healer Ability a,Certificate needed to learn a Healer Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10286 Certificate - Summoner Ability a,Certificate needed to learn a Summoner Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10287 Certificate - Enchanter Ability a,Certificate needed to learn an Enchanter Ability. Only main classes can learn this skill. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10288 Transform Sealbook - Divine Knight a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10289 Transform Sealbook - Divine Warrior a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10290 Transform Sealbook - Divine Rogue a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10291 Transform Sealbook - Divine Healer a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10292 Transform Sealbook - Divine Wizard a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10293 Transform Sealbook - Divine Enchanter a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
10294 Transform Sealbook - Divine Summoner a,Allows for tranformation into a highly specialized form, by transferring the powerful energy of the subclass to the main class. This item cannot be exchanged, dropped, destroyed, or stored in a warehouse.\0 -1 a, a, a, a, 0 0 0 a, 1
*/
public void onLoad()
{
System.out.println("Loaded Service: Subclass Skills");
}
public void onReload()
{}
public void onShutdown()
{}
}
0
Войдите или зарегистрируйтесь чтобы ответить


