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

View File

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

View File

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

View File

@@ -17,7 +17,6 @@
package org.l2jmobius.gameserver.model.clan; package org.l2jmobius.gameserver.model.clan;
import org.l2jmobius.gameserver.enums.ClanRewardType; import org.l2jmobius.gameserver.enums.ClanRewardType;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
/** /**
@@ -29,7 +28,6 @@ public class ClanRewardBonus
private final int _level; private final int _level;
private final int _requiredAmount; private final int _requiredAmount;
private SkillHolder _skillReward; private SkillHolder _skillReward;
private ItemHolder _itemReward;
public ClanRewardBonus(ClanRewardType type, int level, int requiredAmount) public ClanRewardBonus(ClanRewardType type, int level, int requiredAmount)
{ {
@@ -62,14 +60,4 @@ public class ClanRewardBonus
{ {
_skillReward = skillReward; _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.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember; import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.clan.ClanRewardBonus; 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.model.holders.SkillHolder;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
@@ -63,13 +62,8 @@ public class RequestPledgeBonusReward implements IClientIncomingPacket
final ClanRewardBonus bonus = type.getAvailableBonus(player.getClan()); final ClanRewardBonus bonus = type.getAvailableBonus(player.getClan());
if (bonus != null) if (bonus != null)
{ {
final ItemHolder itemReward = bonus.getItemReward();
final SkillHolder skillReward = bonus.getSkillReward(); final SkillHolder skillReward = bonus.getSkillReward();
if (itemReward != null) if (skillReward != null)
{
player.addItem("ClanReward", itemReward.getId(), itemReward.getCount(), player, true);
}
else if (skillReward != null)
{ {
skillReward.getSkill().activateSkill(player, player); skillReward.getSkill().activateSkill(player, player);
} }

View File

@@ -39,10 +39,10 @@ public class ExPledgeBonusList implements IClientOutgoingPacket
{ {
packet.writeD(bonus.getSkillReward().getSkillId()); 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 -> 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; 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!!"); LOGGER.warning("Couldn't find skill reward for highest available members online bonus!!");
return false; 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; return false;
} }
@@ -90,8 +90,8 @@ public class ExPledgeBonusOpen implements IClientOutgoingPacket
// Hunting bonus // Hunting bonus
packet.writeD(highestHuntingBonus.getRequiredAmount()); packet.writeD(highestHuntingBonus.getRequiredAmount());
packet.writeD(clan.getHuntingPoints()); packet.writeD(clan.getHuntingPoints());
packet.writeC(0x01); // 140 packet.writeC(0x02); // 140
packet.writeD(huntingBonus != null ? highestHuntingBonus.getItemReward().getId() : 0x00); packet.writeD(huntingBonus != null ? highestHuntingBonus.getSkillReward().getSkillId() : 0x00);
packet.writeC(huntingBonus != null ? huntingBonus.getLevel() : 0x00); packet.writeC(huntingBonus != null ? huntingBonus.getLevel() : 0x00);
packet.writeC(huntingBonus != null ? 0x01 : 0x00); packet.writeC(huntingBonus != null ? 0x01 : 0x00);
return true; return true;