Skill rewards for clan hunting bonus.

Contributed by MacuK.
This commit is contained in:
MobiusDevelopment
2021-09-17 19:54:10 +00:00
parent cdbbc81320
commit cc2d5f359d
7 changed files with 32 additions and 51 deletions

View File

@@ -1,31 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/ClanReward.xsd">
<membersOnline>
<players size="10" level="1">
<skill id="55168" level="1" /> <!-- Clan Unity - Lv. 1 -->
<players size="7" level="1">
<skill id="51016" level="1" /> <!-- Clan's Bonus - XP Lv. 1 -->
</players>
<players size="20" level="2">
<skill id="55169" level="1" /> <!-- Clan Unity - Lv. 2 -->
<players size="14" level="2">
<skill id="51017" level="1" /> <!-- Clan's Bonus - XP Lv. 2 -->
</players>
<players size="30" level="3">
<skill id="55170" level="1" /> <!-- Clan Unity - Lv. 3 -->
<players size="21" level="3">
<skill id="51018" level="1" /> <!-- Clan's Bonus - XP Lv. 3 -->
</players>
<players size="40" level="4">
<skill id="55171" level="1" /> <!-- Clan Unity - Lv. 4 -->
<players size="28" level="4">
<skill id="51019" level="1" /> <!-- Clan's Bonus - XP Lv. 4 -->
</players>
</membersOnline>
<huntingBonus>
<hunting points="28800000" level="1">
<item id="70020" count="1" /> <!-- Clan's Supplies - Low Grade -->
<hunting points="3267000" level="1">
<skill id="51020" level="1" /> <!-- Clan's Bonus - P. Atk Lv. 1 -->
</hunting>
<hunting points="57600000" level="2">
<item id="70021" count="1" /> <!-- Clan's Supplies - Medium Grade -->
<hunting points="6534000" level="2">
<skill id="51021" level="1" /> <!-- Clan's Bonus - P. Atk Lv. 2 -->
</hunting>
<hunting points="86400000" level="3">
<item id="70022" count="1" /> <!-- Clan's Supplies - High Grade -->
<hunting points="9801000" level="3">
<skill id="51022" level="1" /> <!-- Clan's Bonus - P. Atk Lv. 3 -->
</hunting>
<hunting points="115200000" level="4">
<item id="70023" count="1" /> <!-- Clan's Supplies - Highest Grade -->
<hunting points="13068000" level="4">
<skill id="51023" level="1" /> <!-- Clan's Bonus - P. Atk Lv. 4 -->
</hunting>
</huntingBonus>
</list>

View File

@@ -29,10 +29,10 @@
<xs:element name="hunting" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="item">
<xs:element name="skill">
<xs:complexType>
<xs:attribute type="xs:integer" name="id" use="required" />
<xs:attribute type="xs:long" name="count" use="required" />
<xs:attribute type="xs:positiveInteger" name="id" use="required" />
<xs:attribute type="xs:short" name="level" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>

View File

@@ -31,7 +31,6 @@ import org.w3c.dom.Node;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.enums.ClanRewardType;
import org.l2jmobius.gameserver.model.clan.ClanRewardBonus;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
/**
@@ -113,14 +112,14 @@ public class ClanRewardData implements IXmlReader
final int requiredAmount = parseInteger(attrs, "points");
final int level = parseInteger(attrs, "level");
final ClanRewardBonus bonus = new ClanRewardBonus(ClanRewardType.HUNTING_MONSTERS, level, requiredAmount);
forEach(memberNode, IXmlReader::isNode, itemsNode ->
forEach(memberNode, IXmlReader::isNode, skillNode ->
{
if ("item".equalsIgnoreCase(itemsNode.getNodeName()))
if ("skill".equalsIgnoreCase(skillNode.getNodeName()))
{
final NamedNodeMap itemsAttr = itemsNode.getAttributes();
final int id = parseInteger(itemsAttr, "id");
final int count = parseInteger(itemsAttr, "count");
bonus.setItemReward(new ItemHolder(id, count));
final NamedNodeMap skillAttr = skillNode.getAttributes();
final int skillId = parseInteger(skillAttr, "id");
final int skillLevel = parseInteger(skillAttr, "level");
bonus.setSkillReward(new SkillHolder(skillId, skillLevel));
}
});
_clanRewards.computeIfAbsent(bonus.getType(), key -> new ArrayList<>()).add(bonus);

View File

@@ -17,7 +17,6 @@
package org.l2jmobius.gameserver.model.clan;
import org.l2jmobius.gameserver.enums.ClanRewardType;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
/**
@@ -29,7 +28,6 @@ public class ClanRewardBonus
private final int _level;
private final int _requiredAmount;
private SkillHolder _skillReward;
private ItemHolder _itemReward;
public ClanRewardBonus(ClanRewardType type, int level, int requiredAmount)
{
@@ -62,14 +60,4 @@ public class ClanRewardBonus
{
_skillReward = skillReward;
}
public ItemHolder getItemReward()
{
return _itemReward;
}
public void setItemReward(ItemHolder itemReward)
{
_itemReward = itemReward;
}
}

View File

@@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.clan.ClanRewardBonus;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
@@ -63,13 +62,8 @@ public class RequestPledgeBonusReward implements IClientIncomingPacket
final ClanRewardBonus bonus = type.getAvailableBonus(player.getClan());
if (bonus != null)
{
final ItemHolder itemReward = bonus.getItemReward();
final SkillHolder skillReward = bonus.getSkillReward();
if (itemReward != null)
{
player.addItem("ClanReward", itemReward.getId(), itemReward.getCount(), player, true);
}
else if (skillReward != null)
if (skillReward != null)
{
skillReward.getSkill().activateSkill(player, player);
}

View File

@@ -39,10 +39,10 @@ public class ExPledgeBonusList implements IClientOutgoingPacket
{
packet.writeD(bonus.getSkillReward().getSkillId());
});
packet.writeC(0x01); // 140
packet.writeC(0x00); // 140
ClanRewardData.getInstance().getClanRewardBonuses(ClanRewardType.HUNTING_MONSTERS).stream().sorted(Comparator.comparingInt(ClanRewardBonus::getLevel)).forEach(bonus ->
{
packet.writeD(bonus.getItemReward().getId());
packet.writeD(bonus.getSkillReward().getSkillId());
});
return true;
}

View File

@@ -70,9 +70,9 @@ public class ExPledgeBonusOpen implements IClientOutgoingPacket
LOGGER.warning("Couldn't find skill reward for highest available members online bonus!!");
return false;
}
else if (highestHuntingBonus.getItemReward() == null)
else if (highestHuntingBonus.getSkillReward() == null)
{
LOGGER.warning("Couldn't find item reward for highest available hunting bonus!!");
LOGGER.warning("Couldn't find skill reward for highest available hunting bonus!!");
return false;
}
@@ -90,8 +90,8 @@ public class ExPledgeBonusOpen implements IClientOutgoingPacket
// Hunting bonus
packet.writeD(highestHuntingBonus.getRequiredAmount());
packet.writeD(clan.getHuntingPoints());
packet.writeC(0x01); // 140
packet.writeD(huntingBonus != null ? highestHuntingBonus.getItemReward().getId() : 0x00);
packet.writeC(0x02); // 140
packet.writeD(huntingBonus != null ? highestHuntingBonus.getSkillReward().getSkillId() : 0x00);
packet.writeC(huntingBonus != null ? huntingBonus.getLevel() : 0x00);
packet.writeC(huntingBonus != null ? 0x01 : 0x00);
return true;