Addition of symbol seal data.

Contributed by NviX.
This commit is contained in:
MobiusDevelopment 2019-10-14 16:05:02 +00:00
parent ef88526bef
commit 3f2c76f960
22 changed files with 2250 additions and 202 deletions

View File

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

View 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>

View File

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

View File

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

View File

@ -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();
}
}
}

View File

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

View File

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

View 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>

View File

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

View File

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

View File

@ -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();
}
}

View File

@ -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;
}
}
}

View File

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

View File

@ -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();
}
}
}
}
}

View File

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

View File

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

View File

@ -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;
}
}

View File

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

View File

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

View File

@ -62,6 +62,7 @@ public class RequestHennaRemove implements IClientIncomingPacket
if (player.getAdena() >= henna.getCancelFee())
{
player.removeHenna(i);
player.updateSymbolSealSkills();
}
else
{

View File

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