Addition of symbol seal data.
Contributed by NviX.
This commit is contained in:
parent
ef88526bef
commit
3f2c76f960
@ -295,6 +295,16 @@ StartingVitalityPoints = 140000
|
||||
# Default: False
|
||||
RaidbossUseVitality = False
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Symbol Seal configuration
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Maximum symbol seal gauge points
|
||||
# Default: 7800
|
||||
MaxSymbolSealPoints = 7800
|
||||
|
||||
# Consume symbol seal points speed per kill
|
||||
ConsumeSymbolSealPoints = 1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Limits
|
||||
|
183
L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml
vendored
Normal file
183
L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/SymbolSealData.xsd">
|
||||
<class id="148"> <!-- Sigel Phoenix Knight -->
|
||||
<symbol id="1" skillId="35410" />
|
||||
<symbol id="2" skillId="35446" />
|
||||
<symbol id="3" skillId="35482" />
|
||||
</class>
|
||||
<class id="149"> <!-- Sigel Hell Knight -->
|
||||
<symbol id="1" skillId="35411" />
|
||||
<symbol id="2" skillId="35447" />
|
||||
<symbol id="3" skillId="35483" />
|
||||
</class>
|
||||
<class id="150"> <!-- Sigel Eva's Templar -->
|
||||
<symbol id="1" skillId="35419" />
|
||||
<symbol id="2" skillId="35455" />
|
||||
<symbol id="3" skillId="35491" />
|
||||
</class>
|
||||
<class id="151"> <!-- Sigel Shillien Templar -->
|
||||
<symbol id="1" skillId="35426" />
|
||||
<symbol id="2" skillId="35462" />
|
||||
<symbol id="3" skillId="35498" />
|
||||
</class>
|
||||
<class id="152"> <!-- Tyrr Duelist -->
|
||||
<symbol id="1" skillId="35408" />
|
||||
<symbol id="2" skillId="35444" />
|
||||
<symbol id="3" skillId="35480" />
|
||||
</class>
|
||||
<class id="153"> <!-- Tyrr Dreadnought -->
|
||||
<symbol id="1" skillId="35409" />
|
||||
<symbol id="2" skillId="35445" />
|
||||
<symbol id="3" skillId="35481" />
|
||||
</class>
|
||||
<class id="154"> <!-- Tyrr Titan -->
|
||||
<symbol id="1" skillId="35433" />
|
||||
<symbol id="2" skillId="35469" />
|
||||
<symbol id="3" skillId="35505" />
|
||||
</class>
|
||||
<class id="155"> <!-- Tyrr Grand Khavatari -->
|
||||
<symbol id="1" skillId="35434" />
|
||||
<symbol id="2" skillId="35470" />
|
||||
<symbol id="3" skillId="35506" />
|
||||
</class>
|
||||
<class id="156"> <!-- Tyrr Maestro -->
|
||||
<symbol id="1" skillId="35438" />
|
||||
<symbol id="2" skillId="35474" />
|
||||
<symbol id="3" skillId="35510" />
|
||||
</class>
|
||||
<class id="157"> <!-- Tyrr Doombringer -->
|
||||
<symbol id="1" skillId="35439" />
|
||||
<symbol id="2" skillId="35475" />
|
||||
<symbol id="3" skillId="35511" />
|
||||
</class>
|
||||
<class id="158"> <!-- Othell Adventurer -->
|
||||
<symbol id="1" skillId="35412" />
|
||||
<symbol id="2" skillId="35448" />
|
||||
<symbol id="3" skillId="35484" />
|
||||
</class>
|
||||
<class id="159"> <!-- Othell Wind Rider -->
|
||||
<symbol id="1" skillId="35413" />
|
||||
<symbol id="2" skillId="35449" />
|
||||
<symbol id="3" skillId="35493" />
|
||||
</class>
|
||||
<class id="160"> <!-- Othell Ghost Hunter -->
|
||||
<symbol id="1" skillId="35421" />
|
||||
<symbol id="2" skillId="35457" />
|
||||
<symbol id="3" skillId="35500" />
|
||||
</class>
|
||||
<class id="161"> <!-- Othell Fortune Seeker -->
|
||||
<symbol id="1" skillId="35422" />
|
||||
<symbol id="2" skillId="35458" />
|
||||
<symbol id="3" skillId="35509" />
|
||||
</class>
|
||||
<class id="162"> <!-- Yul Sagittarius -->
|
||||
<symbol id="1" skillId="35428" />
|
||||
<symbol id="2" skillId="35464" />
|
||||
<symbol id="3" skillId="35485" />
|
||||
</class>
|
||||
<class id="163"> <!-- Yul Moonlight Sentinel -->
|
||||
<symbol id="1" skillId="35429" />
|
||||
<symbol id="2" skillId="35465" />
|
||||
<symbol id="3" skillId="35494" />
|
||||
</class>
|
||||
<class id="164"> <!-- Yul Ghost Sentinel -->
|
||||
<symbol id="1" skillId="35437" />
|
||||
<symbol id="2" skillId="35473" />
|
||||
<symbol id="3" skillId="35501" />
|
||||
</class>
|
||||
<class id="165"> <!-- Yul Trickster -->
|
||||
<symbol id="1" skillId="35441" />
|
||||
<symbol id="2" skillId="35477" />
|
||||
<symbol id="3" skillId="35513" />
|
||||
</class>
|
||||
<class id="166"> <!-- Feoh Archmage -->
|
||||
<symbol id="1" skillId="35414" />
|
||||
<symbol id="2" skillId="35450" />
|
||||
<symbol id="3" skillId="35486" />
|
||||
</class>
|
||||
<class id="167"> <!-- Feoh Soultaker -->
|
||||
<symbol id="1" skillId="35415" />
|
||||
<symbol id="2" skillId="35451" />
|
||||
<symbol id="3" skillId="35487" />
|
||||
</class>
|
||||
<class id="168"> <!-- Feoh Mystic Muse -->
|
||||
<symbol id="1" skillId="35423" />
|
||||
<symbol id="2" skillId="35452" />
|
||||
<symbol id="3" skillId="35495" />
|
||||
</class>
|
||||
<class id="169"> <!-- Feoh Storm Screamer -->
|
||||
<symbol id="1" skillId="35430" />
|
||||
<symbol id="2" skillId="35459" />
|
||||
<symbol id="3" skillId="35502" />
|
||||
</class>
|
||||
<class id="170"> <!-- Feoh Soulhound -->
|
||||
<symbol id="1" skillId="35440" />
|
||||
<symbol id="2" skillId="35460" />
|
||||
<symbol id="3" skillId="35512" />
|
||||
</class>
|
||||
<class id="171"> <!-- Iss Hierophant -->
|
||||
<symbol id="1" skillId="35416" />
|
||||
<symbol id="2" skillId="35454" />
|
||||
<symbol id="3" skillId="35490" />
|
||||
</class>
|
||||
<class id="172"> <!-- Iss Sword Muse -->
|
||||
<symbol id="1" skillId="35418" />
|
||||
<symbol id="2" skillId="35456" />
|
||||
<symbol id="3" skillId="35492" />
|
||||
</class>
|
||||
<class id="173"> <!-- Iss Spectral Dancer -->
|
||||
<symbol id="1" skillId="35420" />
|
||||
<symbol id="2" skillId="35463" />
|
||||
<symbol id="3" skillId="35499" />
|
||||
</class>
|
||||
<class id="174"> <!-- Iss Dominator -->
|
||||
<symbol id="1" skillId="35424" />
|
||||
<symbol id="2" skillId="35471" />
|
||||
<symbol id="3" skillId="35507" />
|
||||
</class>
|
||||
<class id="175"> <!-- Iss Doomcryer -->
|
||||
<symbol id="1" skillId="35427" />
|
||||
<symbol id="2" skillId="35472" />
|
||||
<symbol id="3" skillId="35508" />
|
||||
</class>
|
||||
<class id="176"> <!-- Wynn Arcana Lord -->
|
||||
<symbol id="1" skillId="35431" />
|
||||
<symbol id="2" skillId="35466" />
|
||||
<symbol id="3" skillId="35488" />
|
||||
</class>
|
||||
<class id="177"> <!-- Wynn Elemental Master -->
|
||||
<symbol id="1" skillId="35435" />
|
||||
<symbol id="2" skillId="35467" />
|
||||
<symbol id="3" skillId="35496" />
|
||||
</class>
|
||||
<class id="178"> <!-- Wynn Spectral Master -->
|
||||
<symbol id="1" skillId="35436" />
|
||||
<symbol id="2" skillId="35476" />
|
||||
<symbol id="3" skillId="35503" />
|
||||
</class>
|
||||
<class id="179"> <!-- Aeore Cardinal -->
|
||||
<symbol id="1" skillId="35417" />
|
||||
<symbol id="2" skillId="35453" />
|
||||
<symbol id="3" skillId="35489" />
|
||||
</class>
|
||||
<class id="180"> <!-- Aeore Eva's Saint -->
|
||||
<symbol id="1" skillId="35425" />
|
||||
<symbol id="2" skillId="35461" />
|
||||
<symbol id="3" skillId="35497" />
|
||||
</class>
|
||||
<class id="181"> <!-- Aeore Shillien Saint -->
|
||||
<symbol id="1" skillId="35432" />
|
||||
<symbol id="2" skillId="35468" />
|
||||
<symbol id="3" skillId="35504" />
|
||||
</class>
|
||||
<class id="188"> <!-- Eviscerator -->
|
||||
<symbol id="1" skillId="35442" />
|
||||
<symbol id="2" skillId="35478" />
|
||||
<symbol id="3" skillId="35514" />
|
||||
</class>
|
||||
<class id="189"> <!-- Sayha's Seer -->
|
||||
<symbol id="1" skillId="35443" />
|
||||
<symbol id="2" skillId="35479" />
|
||||
<symbol id="3" skillId="35515" />
|
||||
</class>
|
||||
</list>
|
@ -293,6 +293,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("ResistSkill", ResistSkill::new);
|
||||
EffectHandler.getInstance().registerHandler("Restoration", Restoration::new);
|
||||
EffectHandler.getInstance().registerHandler("RestorationRandom", RestorationRandom::new);
|
||||
EffectHandler.getInstance().registerHandler("RestoreSymbolSeal", RestoreSymbolSeal::new);
|
||||
EffectHandler.getInstance().registerHandler("Resurrection", Resurrection::new);
|
||||
EffectHandler.getInstance().registerHandler("ResurrectionSpecial", ResurrectionSpecial::new);
|
||||
EffectHandler.getInstance().registerHandler("Reuse", Reuse::new);
|
||||
|
@ -84,6 +84,7 @@ public class ClassChange extends AbstractEffect
|
||||
msg.addClassId(player.getClassId().getId());
|
||||
player.sendPacket(msg);
|
||||
|
||||
player.updateSymbolSealSkills();
|
||||
player.broadcastUserInfo();
|
||||
player.sendPacket(new AcquireSkillList(player));
|
||||
player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED));
|
||||
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.enums.StatModifierType;
|
||||
import org.l2jmobius.gameserver.model.StatsSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class RestoreSymbolSeal extends AbstractEffect
|
||||
{
|
||||
private final int _amount;
|
||||
private final StatModifierType _mode;
|
||||
|
||||
public RestoreSymbolSeal(StatsSet params)
|
||||
{
|
||||
_amount = params.getInt("amount", 0);
|
||||
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.PER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstant()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
|
||||
{
|
||||
if (effected.isDead() || effected.isDoor())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerInstance player = effected.getActingPlayer();
|
||||
int basicAmount = _amount;
|
||||
double amount = 0;
|
||||
switch (_mode)
|
||||
{
|
||||
case DIFF:
|
||||
{
|
||||
amount = Math.min(basicAmount, Config.MAX_SYMBOL_SEAL_POINTS - player.getSymbolSealPoints());
|
||||
break;
|
||||
}
|
||||
case PER:
|
||||
{
|
||||
amount = Math.min((Config.MAX_SYMBOL_SEAL_POINTS * basicAmount) / 100, Config.MAX_SYMBOL_SEAL_POINTS - player.getSymbolSealPoints());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (amount > 0)
|
||||
{
|
||||
final double newSymbolSealPoints = amount + effected.getActingPlayer().getSymbolSealPoints();
|
||||
player.setSymbolSealPoints((int) newSymbolSealPoints);
|
||||
player.updateSymbolSealSkills();
|
||||
player.sendSkillList();
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
}
|
||||
}
|
@ -1206,14 +1206,24 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
</item>
|
||||
<item id="80762" name="Dye Powder" type="EtcItem">
|
||||
<!-- Powder that replenish the Dye Engraving Gauge. Restores 25% of the full gauge. -->
|
||||
<set name="icon" val="icon.dye_charge_meal" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="price" val="7500000" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond>
|
||||
<player symbolsealpoints="7800" />
|
||||
</cond>
|
||||
<skills>
|
||||
<skill id="39494" level="1" /> <!-- Dye Powder -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="80763" name="Elite Monster Reward Box" type="EtcItem">
|
||||
<!-- Box that can be obtained by defeating elite monsters. Use it to obtain various items including Dark Armor Enhancement Stones and Bloody Armor Enhancement Stones. -->
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -989,7 +989,19 @@
|
||||
<reuseDelay>60000</reuseDelay>
|
||||
</skill>
|
||||
<skill id="39494" toLevel="1" name="Dye Powder">
|
||||
<isMagic>2</isMagic> <!-- Static Skill -->
|
||||
<magicLvl>1</magicLvl>
|
||||
<operateType>A1</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<hitCancelTime>0</hitCancelTime>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="RestoreSymbolSeal">
|
||||
<amount>25</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="39495" toLevel="1" name="For reducing the Dye Recharge Gauge speed">
|
||||
<!-- Reduces the Dye Recharge Gauge's consumption rate -->
|
||||
|
21
L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd
vendored
Normal file
21
L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="class" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="symbol" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute type="xs:integer" name="id" use="required" />
|
||||
<xs:attribute type="xs:integer" name="skillId" use="required" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:integer" name="id" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
@ -186,6 +186,7 @@
|
||||
<xs:attribute name="pkCount" type="xs:int" />
|
||||
<xs:attribute name="vehicleMounted" type="xs:boolean" />
|
||||
<xs:attribute name="MinimumVitalityPoints" type="xs:int" />
|
||||
<xs:attribute name="symbolsealpoints" type="xs:int" />
|
||||
</xs:complexType>
|
||||
<xs:complexType name="andType">
|
||||
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||
|
@ -785,6 +785,8 @@ public class Config
|
||||
public static int PVP_PVP_TIME;
|
||||
public static int MAX_REPUTATION;
|
||||
public static int REPUTATION_INCREASE;
|
||||
public static int MAX_SYMBOL_SEAL_POINTS;
|
||||
public static int CONSUME_SYMBOL_SEAL_POINTS;
|
||||
|
||||
public static IdFactoryType IDFACTORY_TYPE;
|
||||
public static boolean BAD_ID_CHECKING;
|
||||
@ -1762,6 +1764,8 @@ public class Config
|
||||
ENABLE_VITALITY = Character.getBoolean("EnableVitality", true);
|
||||
STARTING_VITALITY_POINTS = Character.getInt("StartingVitalityPoints", 140000);
|
||||
RAIDBOSS_USE_VITALITY = Character.getBoolean("RaidbossUseVitality", true);
|
||||
MAX_SYMBOL_SEAL_POINTS = Character.getInt("MaxSymbolSealPoints", 7800);
|
||||
CONSUME_SYMBOL_SEAL_POINTS = Character.getInt("ConsumeSymbolSealPoints", 1);
|
||||
MAX_BONUS_EXP = Character.getDouble("MaxExpBonus", 0);
|
||||
MAX_BONUS_SP = Character.getDouble("MaxSpBonus", 0);
|
||||
MAX_RUN_SPEED = Character.getInt("MaxRunSpeed", 300);
|
||||
|
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.model.holders.SymbolSealHolder;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class SymbolSealData implements IXmlReader
|
||||
{
|
||||
private final Map<Integer, ArrayList<SymbolSealHolder>> _data = new HashMap<>();
|
||||
|
||||
protected SymbolSealData()
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
parseDatapackFile("data/SymbolSealData.xml");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("list".equalsIgnoreCase(n.getNodeName()))
|
||||
{
|
||||
for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
|
||||
{
|
||||
if ("class".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
final int classId = parseInteger(d.getAttributes(), "id");
|
||||
if (!_data.containsKey(classId))
|
||||
{
|
||||
_data.put(classId, new ArrayList<>());
|
||||
}
|
||||
for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
|
||||
{
|
||||
if ("symbol".equalsIgnoreCase(cd.getNodeName()))
|
||||
{
|
||||
final int symbolId = parseInteger(cd.getAttributes(), "id");
|
||||
final int skillId = parseInteger(cd.getAttributes(), "skillId");
|
||||
_data.get(classId).add(new SymbolSealHolder(symbolId, SkillData.getInstance().getSkill(skillId, 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Skill getSkill(int classId, int symbolId)
|
||||
{
|
||||
return _data.get(classId).get(symbolId).getSkill();
|
||||
}
|
||||
|
||||
public static SymbolSealData getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final SymbolSealData INSTANCE = new SymbolSealData();
|
||||
}
|
||||
}
|
@ -108,6 +108,7 @@ import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSiegeSide;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSouls;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerState;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSubclass;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSymbolSealPoints;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerTransformationId;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerVehicleMounted;
|
||||
import org.l2jmobius.gameserver.model.conditions.ConditionPlayerWeight;
|
||||
@ -895,6 +896,12 @@ public abstract class DocumentBase
|
||||
cond = joinAnd(cond, new ConditionMinimumVitalityPoints(count));
|
||||
break;
|
||||
}
|
||||
case "symbolsealpoints":
|
||||
{
|
||||
final int points = Integer.decode(getValue(a.getNodeValue(), template));
|
||||
cond = joinAnd(cond, new ConditionPlayerSymbolSealPoints(points));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -888,6 +888,14 @@ public class Party extends AbstractPlayerGroup
|
||||
{
|
||||
member.updateVitalityPoints(target.getVitalityPoints(member.getLevel(), exp, target.isRaid()), true, false);
|
||||
PcCafePointsManager.getInstance().givePcCafePoint(member, exp);
|
||||
if (member.getSymbolSealPoints() > 0)
|
||||
{
|
||||
member.setSymbolSealPoints(member.getSymbolSealPoints() - Config.CONSUME_SYMBOL_SEAL_POINTS);
|
||||
if (member.getSymbolSealPoints() == 0)
|
||||
{
|
||||
member.removeSymbolSealSkills();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -507,6 +507,14 @@ public class Attackable extends Npc
|
||||
{
|
||||
attacker.updateVitalityPoints(getVitalityPoints(attacker.getLevel(), exp, _isRaid), true, false);
|
||||
PcCafePointsManager.getInstance().givePcCafePoint(attacker, exp);
|
||||
if (attacker.getSymbolSealPoints() > 0)
|
||||
{
|
||||
attacker.setSymbolSealPoints(attacker.getSymbolSealPoints() - Config.CONSUME_SYMBOL_SEAL_POINTS);
|
||||
if (attacker.getSymbolSealPoints() == 0)
|
||||
{
|
||||
attacker.removeSymbolSealSkills();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -76,6 +76,7 @@ import org.l2jmobius.gameserver.data.xml.impl.RecipeData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SendMessageLocalisationData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillTreesData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SymbolSealData;
|
||||
import org.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import org.l2jmobius.gameserver.enums.AdminTeleportType;
|
||||
import org.l2jmobius.gameserver.enums.BroochJewel;
|
||||
@ -599,6 +600,8 @@ public class PlayerInstance extends Playable
|
||||
private final Map<BaseStats, Integer> _hennaBaseStats = new ConcurrentHashMap<>();
|
||||
private final Map<Integer, ScheduledFuture<?>> _hennaRemoveSchedules = new ConcurrentHashMap<>(4);
|
||||
|
||||
private static final String SYMBOL_POINTS_VAR = "SYMBOL_POINTS";
|
||||
|
||||
/** The Pet of the PlayerInstance */
|
||||
private PetInstance _pet = null;
|
||||
/** Servitors of the PlayerInstance */
|
||||
@ -6733,9 +6736,63 @@ public class PlayerInstance extends Playable
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public void setSymbolSealPoints(int value)
|
||||
{
|
||||
getVariables().set(SYMBOL_POINTS_VAR, Math.min(value, Config.MAX_SYMBOL_SEAL_POINTS));
|
||||
}
|
||||
|
||||
public int getSymbolSealPoints()
|
||||
{
|
||||
return getVariables().getInt(SYMBOL_POINTS_VAR, 0);
|
||||
}
|
||||
|
||||
public void removeSymbolSealSkills()
|
||||
{
|
||||
final int classId = getClassId().getId();
|
||||
if (((classId >= 148) && (classId <= 181)) || (classId == 188) || (classId == 189))
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
removeSkill(SymbolSealData.getInstance().getSkill(classId, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateSymbolSealSkills()
|
||||
{
|
||||
final int classId = getClassId().getId();
|
||||
if (((classId >= 148) && (classId <= 181)) || (classId == 188) || (classId == 189))
|
||||
{
|
||||
removeSymbolSealSkills();
|
||||
if (getSymbolSealPoints() > 0)
|
||||
{
|
||||
int usedSlots = 0;
|
||||
switch (getHennaEmptySlots())
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
usedSlots = 3;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
usedSlots = 2;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
usedSlots = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < usedSlots; i++)
|
||||
{
|
||||
addSkill(SymbolSealData.getInstance().getSkill(classId, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Forum getMail()
|
||||
{
|
||||
if (_forumMail == null)
|
||||
@ -6752,17 +6809,11 @@ public class PlayerInstance extends Playable
|
||||
return _forumMail;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param forum
|
||||
*/
|
||||
public void setMail(Forum forum)
|
||||
{
|
||||
_forumMail = forum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public Forum getMemo()
|
||||
{
|
||||
if (_forumMemo == null)
|
||||
@ -6779,9 +6830,6 @@ public class PlayerInstance extends Playable
|
||||
return _forumMemo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param forum
|
||||
*/
|
||||
public void setMemo(Forum forum)
|
||||
{
|
||||
_forumMemo = forum;
|
||||
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.conditions;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.Item;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class ConditionPlayerSymbolSealPoints extends Condition
|
||||
{
|
||||
private final int _points;
|
||||
|
||||
/**
|
||||
* Instantiates a new condition player Symbol Seal points.
|
||||
* @param points the Symbol Seal Points
|
||||
*/
|
||||
public ConditionPlayerSymbolSealPoints(int points)
|
||||
{
|
||||
_points = points;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean testImpl(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
PlayerInstance player = effector.getActingPlayer();
|
||||
return (player != null) && (player.getSymbolSealPoints() < _points);
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class SymbolSealHolder
|
||||
{
|
||||
private final int _symbolId;
|
||||
private final Skill _skill;
|
||||
|
||||
public SymbolSealHolder(int symbolId, Skill skill)
|
||||
{
|
||||
_symbolId = symbolId;
|
||||
_skill = skill;
|
||||
}
|
||||
|
||||
public int getSymbolId()
|
||||
{
|
||||
return _symbolId;
|
||||
}
|
||||
|
||||
public Skill getSkill()
|
||||
{
|
||||
return _skill;
|
||||
}
|
||||
}
|
@ -612,6 +612,8 @@ public class EnterWorld implements IClientIncomingPacket
|
||||
OfflineTradersTable.onTransaction(player, true, false);
|
||||
}
|
||||
|
||||
player.updateSymbolSealSkills();
|
||||
|
||||
player.broadcastUserInfo();
|
||||
|
||||
if (BeautyShopData.getInstance().hasBeautyData(player.getRace(), player.getAppearance().getSexType()))
|
||||
|
@ -98,6 +98,7 @@ public class RequestHennaEquip implements IClientIncomingPacket
|
||||
iu.addModifiedItem(player.getInventory().getAdenaInstance());
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.sendPacket(new HennaEquipList(player));
|
||||
player.updateSymbolSealSkills();
|
||||
player.sendPacket(SystemMessageId.THE_SYMBOL_HAS_BEEN_ADDED);
|
||||
}
|
||||
else
|
||||
|
@ -62,6 +62,7 @@ public class RequestHennaRemove implements IClientIncomingPacket
|
||||
if (player.getAdena() >= henna.getCancelFee())
|
||||
{
|
||||
player.removeHenna(i);
|
||||
player.updateSymbolSealSkills();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -324,8 +324,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeD(_player.getFame());
|
||||
packet.writeD(_player.getRaidbossPoints());
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeH(_player.getSymbolSealPoints()); // Henna Seal Engraving Gauge
|
||||
packet.writeC(0x00); // 196
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user