diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java index 3157a9ca32..79d47fcb44 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java @@ -21,6 +21,7 @@ import java.util.StringTokenizer; import org.l2jmobius.gameserver.data.sql.ClanTable; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.handler.IAdminCommandHandler; +import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,6 +197,26 @@ public class AdminPledge implements IAdminCommandHandler } break; } + case "arena": + { + if (clan == null) + { + BuilderUtil.sendSysMessage(activeChar, "Target player has no clan!"); + break; + } + + try + { + final int stage = Integer.parseInt(param); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId(), stage); + BuilderUtil.sendSysMessage(activeChar, "You set " + stage + " Monster Arena stage for clan " + clan.getName() + ""); + } + catch (Exception e) + { + BuilderUtil.sendSysMessage(activeChar, "Usage: //pledge arena "); + } + break; + } } break; } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java index 50e6b2bb6a..d7817d04f2 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java @@ -20,11 +20,21 @@ import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.commons.threads.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.model.actor.Npc; 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.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenerRegisterType; +import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; +import org.l2jmobius.gameserver.model.events.annotations.RegisterType; +import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft; +import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.instancezone.Instance; +import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent; @@ -32,7 +42,7 @@ import instances.AbstractInstance; /** * @author Mobius - * @URL https://l2wiki.com/classic/Clan_-_Clan_Arena + * @URL https://www.l2central.info/essence/articles/793.html?lang=en */ public class MonsterArena extends AbstractInstance { @@ -62,6 +72,12 @@ public class MonsterArena extends AbstractInstance 25811, // Satur 25812, // Kosnak 25813, // Garaki + // TODO: 21-25 bosses + // 25834, // Shadai + // 25835, // Tyrobait + // 25836, // Tier + // 25837, // Cherkia + // 25838, // Spicula }; // Rewards private static final int BATTLE_BOX_1 = 90913; @@ -71,9 +87,10 @@ public class MonsterArena extends AbstractInstance private static final int VALOR_BOX = 90915; private static final int TICKET_M = 90946; private static final int TICKET_H = 90947; + // Skill + private static final int CLAN_EXUBERANCE = 1867; // Misc private static final Collection REWARDED_PLAYERS = ConcurrentHashMap.newKeySet(); - private static final String MONSTER_ARENA_VARIABLE = "MA_C"; private static final int TEMPLATE_ID = 192; public MonsterArena() @@ -151,16 +168,16 @@ public class MonsterArena extends AbstractInstance machine.setScriptValue(player.getClanId()); // Initialize progress if it does not exist. - if (GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), -1) == -1) + if (GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), -1) == -1) { - GlobalVariablesManager.getInstance().set(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); } // On max progress, set last four bosses. - final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); - if (progress > 17) + final int progress = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue()); + if (progress > 17) // TODO: 22 for 25 total bosses. { - GlobalVariablesManager.getInstance().set(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 17); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 17); // TODO: 22 for 25 total bosses. } startQuestTimer("machine_talk", 10000, machine, null); @@ -196,7 +213,7 @@ public class MonsterArena extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (world != null) { - world.spawnGroup("boss_" + GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + npc.getScriptValue())); + world.spawnGroup("boss_" + GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + npc.getScriptValue())); } break; } @@ -215,7 +232,7 @@ public class MonsterArena extends AbstractInstance // Mandatory reward. final Npc machine = world.getNpc(MACHINE); - final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); + final int progress = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue()); if (progress > 16) { giveItems(player, BATTLE_BOX_4, 1); @@ -288,7 +305,7 @@ public class MonsterArena extends AbstractInstance machine.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HA_NOT_BAD); // Save progress to global variables. - GlobalVariablesManager.getInstance().increaseInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); + GlobalVariablesManager.getInstance().increaseInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); // Spawn reward chests. world.spawnGroup("supplies"); @@ -317,6 +334,48 @@ public class MonsterArena extends AbstractInstance return npc.getId() + "-01.htm"; } + @RegisterEvent(EventType.ON_PLAYER_LOGIN) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void onPlayerLogin(OnPlayerLogin event) + { + final PlayerInstance player = event.getPlayer(); + if (player == null) + { + return; + } + + final Clan clan = player.getClan(); + if (clan == null) + { + // Should never happen. + final Skill knownSkill = player.getKnownSkill(CLAN_EXUBERANCE); + if (knownSkill != null) + { + player.removeSkill(knownSkill, true); + } + return; + } + + final int stage = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId(), 0); + if (stage > 4) + { + player.addSkill(SkillData.getInstance().getSkill(CLAN_EXUBERANCE, stage / 5), false); + } + } + + @RegisterEvent(EventType.ON_PLAYER_CLAN_LEFT) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void onPlayerClanLeft(OnPlayerClanLeft event) + { + final ClanMember member = event.getClanMember(); + if ((member == null) || !member.isOnline()) + { + return; + } + + member.getPlayerInstance().removeSkill(CLAN_EXUBERANCE, true); + } + public static void main(String[] args) { new MonsterArena(); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e0556cb417..2dfc9b6d68 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -83,6 +83,7 @@ public class DailyTaskManager { clanLeaderApply(); resetVitalityWeekly(); + resetMonsterArenaWeekly(); resetTimedHuntingZonesWeekly(); } else @@ -219,6 +220,14 @@ public class DailyTaskManager LOGGER.info("Vitality resetted"); } + private void resetMonsterArenaWeekly() + { + for (Clan clan : ClanTable.getInstance().getClans()) + { + GlobalVariablesManager.getInstance().remove(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId()); + } + } + private void resetClanBonus() { ClanTable.getInstance().getClans().forEach(Clan::resetClanBonus); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java index 46b6f6940f..c9d23ecc18 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java @@ -42,6 +42,7 @@ public class GlobalVariablesManager extends AbstractVariables private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)"; // Public variable names + public static final String MONSTER_ARENA_VARIABLE = "MA_C"; public static final String PURGE_REWARD_TIME = "PURGE_REWARD_TIME"; protected GlobalVariablesManager() diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java index 41679216dd..0195c7960a 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java @@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.PledgeReceiveWarList; +import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeClassicRaidInfo; import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeV3Info; /** @@ -53,5 +54,6 @@ public class RequestExPledgeV3Info implements IClientIncomingPacket player.sendPacket(new ExPledgeV3Info(player.getClan().getExp(), player.getClan().getRank(), player.getClan().getNotice(), player.getClan().isNoticeEnabled())); player.sendPacket(new PledgeReceiveWarList(player.getClan(), _page)); + player.sendPacket(new ExPledgeClassicRaidInfo(player)); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java index 17424112bd..2b5874bc2c 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java @@ -21,7 +21,6 @@ import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; -import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeClassicRaidInfo; import org.l2jmobius.gameserver.network.serverpackets.pledgebonus.ExPledgeBonusOpen; import org.l2jmobius.gameserver.network.serverpackets.pledgedonation.ExPledgeDonationInfo; @@ -46,7 +45,6 @@ public class RequestPledgeBonusOpen implements IClientIncomingPacket } player.sendPacket(new ExPledgeBonusOpen(player)); - player.sendPacket(new ExPledgeClassicRaidInfo()); final long joinedTime = (player.getClanJoinExpiryTime() - (Config.ALT_CLAN_JOIN_DAYS * 60000)); player.sendPacket(new ExPledgeDonationInfo(player.getClanDonationPoints(), (joinedTime + 86400000) < System.currentTimeMillis())); } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java index 94706ba1be..5e68a11ed3 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java @@ -17,16 +17,22 @@ package org.l2jmobius.gameserver.network.serverpackets.pledgeV3; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; /** - * Written by Berezkin Nikolay, on 22.04.2021 + * @author Index */ public class ExPledgeClassicRaidInfo implements IClientOutgoingPacket { - public ExPledgeClassicRaidInfo() + private final Clan _clan; + + public ExPledgeClassicRaidInfo(PlayerInstance player) { + _clan = player.getClan(); } @Override @@ -34,13 +40,24 @@ public class ExPledgeClassicRaidInfo implements IClientOutgoingPacket { OutgoingPackets.EX_PLEDGE_CLASSIC_RAID_INFO.writeId(packet); - packet.writeD(0); // clan arena stage - packet.writeD(5); - for (int i = 1; i <= 5; i++) + if (_clan == null) { - packet.writeD(1867); - packet.writeD(i); + packet.writeD(0); } + else + { + final int stage = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + _clan.getId(), 0); + packet.writeD(stage); + + // Skill rewards. + packet.writeD(5); + for (int i = 1; i <= 5; i++) + { + packet.writeD(1867); + packet.writeD(i); + } + } + return true; } } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java index 3157a9ca32..79d47fcb44 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminPledge.java @@ -21,6 +21,7 @@ import java.util.StringTokenizer; import org.l2jmobius.gameserver.data.sql.ClanTable; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.handler.IAdminCommandHandler; +import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,6 +197,26 @@ public class AdminPledge implements IAdminCommandHandler } break; } + case "arena": + { + if (clan == null) + { + BuilderUtil.sendSysMessage(activeChar, "Target player has no clan!"); + break; + } + + try + { + final int stage = Integer.parseInt(param); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId(), stage); + BuilderUtil.sendSysMessage(activeChar, "You set " + stage + " Monster Arena stage for clan " + clan.getName() + ""); + } + catch (Exception e) + { + BuilderUtil.sendSysMessage(activeChar, "Usage: //pledge arena "); + } + break; + } } break; } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java index 50e6b2bb6a..d7817d04f2 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/instances/MonsterArena/MonsterArena.java @@ -20,11 +20,21 @@ import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.commons.threads.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.model.actor.Npc; 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.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenerRegisterType; +import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; +import org.l2jmobius.gameserver.model.events.annotations.RegisterType; +import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft; +import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.instancezone.Instance; +import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent; @@ -32,7 +42,7 @@ import instances.AbstractInstance; /** * @author Mobius - * @URL https://l2wiki.com/classic/Clan_-_Clan_Arena + * @URL https://www.l2central.info/essence/articles/793.html?lang=en */ public class MonsterArena extends AbstractInstance { @@ -62,6 +72,12 @@ public class MonsterArena extends AbstractInstance 25811, // Satur 25812, // Kosnak 25813, // Garaki + // TODO: 21-25 bosses + // 25834, // Shadai + // 25835, // Tyrobait + // 25836, // Tier + // 25837, // Cherkia + // 25838, // Spicula }; // Rewards private static final int BATTLE_BOX_1 = 90913; @@ -71,9 +87,10 @@ public class MonsterArena extends AbstractInstance private static final int VALOR_BOX = 90915; private static final int TICKET_M = 90946; private static final int TICKET_H = 90947; + // Skill + private static final int CLAN_EXUBERANCE = 1867; // Misc private static final Collection REWARDED_PLAYERS = ConcurrentHashMap.newKeySet(); - private static final String MONSTER_ARENA_VARIABLE = "MA_C"; private static final int TEMPLATE_ID = 192; public MonsterArena() @@ -151,16 +168,16 @@ public class MonsterArena extends AbstractInstance machine.setScriptValue(player.getClanId()); // Initialize progress if it does not exist. - if (GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), -1) == -1) + if (GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), -1) == -1) { - GlobalVariablesManager.getInstance().set(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); } // On max progress, set last four bosses. - final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); - if (progress > 17) + final int progress = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue()); + if (progress > 17) // TODO: 22 for 25 total bosses. { - GlobalVariablesManager.getInstance().set(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 17); + GlobalVariablesManager.getInstance().set(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 17); // TODO: 22 for 25 total bosses. } startQuestTimer("machine_talk", 10000, machine, null); @@ -196,7 +213,7 @@ public class MonsterArena extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (world != null) { - world.spawnGroup("boss_" + GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + npc.getScriptValue())); + world.spawnGroup("boss_" + GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + npc.getScriptValue())); } break; } @@ -215,7 +232,7 @@ public class MonsterArena extends AbstractInstance // Mandatory reward. final Npc machine = world.getNpc(MACHINE); - final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); + final int progress = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue()); if (progress > 16) { giveItems(player, BATTLE_BOX_4, 1); @@ -288,7 +305,7 @@ public class MonsterArena extends AbstractInstance machine.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HA_NOT_BAD); // Save progress to global variables. - GlobalVariablesManager.getInstance().increaseInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); + GlobalVariablesManager.getInstance().increaseInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + machine.getScriptValue(), 1); // Spawn reward chests. world.spawnGroup("supplies"); @@ -317,6 +334,48 @@ public class MonsterArena extends AbstractInstance return npc.getId() + "-01.htm"; } + @RegisterEvent(EventType.ON_PLAYER_LOGIN) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void onPlayerLogin(OnPlayerLogin event) + { + final PlayerInstance player = event.getPlayer(); + if (player == null) + { + return; + } + + final Clan clan = player.getClan(); + if (clan == null) + { + // Should never happen. + final Skill knownSkill = player.getKnownSkill(CLAN_EXUBERANCE); + if (knownSkill != null) + { + player.removeSkill(knownSkill, true); + } + return; + } + + final int stage = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId(), 0); + if (stage > 4) + { + player.addSkill(SkillData.getInstance().getSkill(CLAN_EXUBERANCE, stage / 5), false); + } + } + + @RegisterEvent(EventType.ON_PLAYER_CLAN_LEFT) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void onPlayerClanLeft(OnPlayerClanLeft event) + { + final ClanMember member = event.getClanMember(); + if ((member == null) || !member.isOnline()) + { + return; + } + + member.getPlayerInstance().removeSkill(CLAN_EXUBERANCE, true); + } + public static void main(String[] args) { new MonsterArena(); diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e0556cb417..2dfc9b6d68 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -83,6 +83,7 @@ public class DailyTaskManager { clanLeaderApply(); resetVitalityWeekly(); + resetMonsterArenaWeekly(); resetTimedHuntingZonesWeekly(); } else @@ -219,6 +220,14 @@ public class DailyTaskManager LOGGER.info("Vitality resetted"); } + private void resetMonsterArenaWeekly() + { + for (Clan clan : ClanTable.getInstance().getClans()) + { + GlobalVariablesManager.getInstance().remove(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + clan.getId()); + } + } + private void resetClanBonus() { ClanTable.getInstance().getClans().forEach(Clan::resetClanBonus); diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java index 46b6f6940f..c9d23ecc18 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/GlobalVariablesManager.java @@ -42,6 +42,7 @@ public class GlobalVariablesManager extends AbstractVariables private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)"; // Public variable names + public static final String MONSTER_ARENA_VARIABLE = "MA_C"; public static final String PURGE_REWARD_TIME = "PURGE_REWARD_TIME"; protected GlobalVariablesManager() diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java index 41679216dd..0195c7960a 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgeV3/RequestExPledgeV3Info.java @@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.PledgeReceiveWarList; +import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeClassicRaidInfo; import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeV3Info; /** @@ -53,5 +54,6 @@ public class RequestExPledgeV3Info implements IClientIncomingPacket player.sendPacket(new ExPledgeV3Info(player.getClan().getExp(), player.getClan().getRank(), player.getClan().getNotice(), player.getClan().isNoticeEnabled())); player.sendPacket(new PledgeReceiveWarList(player.getClan(), _page)); + player.sendPacket(new ExPledgeClassicRaidInfo(player)); } } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java index 17424112bd..2b5874bc2c 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/pledgebonus/RequestPledgeBonusOpen.java @@ -21,7 +21,6 @@ import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; -import org.l2jmobius.gameserver.network.serverpackets.pledgeV3.ExPledgeClassicRaidInfo; import org.l2jmobius.gameserver.network.serverpackets.pledgebonus.ExPledgeBonusOpen; import org.l2jmobius.gameserver.network.serverpackets.pledgedonation.ExPledgeDonationInfo; @@ -46,7 +45,6 @@ public class RequestPledgeBonusOpen implements IClientIncomingPacket } player.sendPacket(new ExPledgeBonusOpen(player)); - player.sendPacket(new ExPledgeClassicRaidInfo()); final long joinedTime = (player.getClanJoinExpiryTime() - (Config.ALT_CLAN_JOIN_DAYS * 60000)); player.sendPacket(new ExPledgeDonationInfo(player.getClanDonationPoints(), (joinedTime + 86400000) < System.currentTimeMillis())); } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java index 94706ba1be..5e68a11ed3 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/pledgeV3/ExPledgeClassicRaidInfo.java @@ -17,16 +17,22 @@ package org.l2jmobius.gameserver.network.serverpackets.pledgeV3; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; /** - * Written by Berezkin Nikolay, on 22.04.2021 + * @author Index */ public class ExPledgeClassicRaidInfo implements IClientOutgoingPacket { - public ExPledgeClassicRaidInfo() + private final Clan _clan; + + public ExPledgeClassicRaidInfo(PlayerInstance player) { + _clan = player.getClan(); } @Override @@ -34,13 +40,24 @@ public class ExPledgeClassicRaidInfo implements IClientOutgoingPacket { OutgoingPackets.EX_PLEDGE_CLASSIC_RAID_INFO.writeId(packet); - packet.writeD(0); // clan arena stage - packet.writeD(5); - for (int i = 1; i <= 5; i++) + if (_clan == null) { - packet.writeD(1867); - packet.writeD(i); + packet.writeD(0); } + else + { + final int stage = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.MONSTER_ARENA_VARIABLE + _clan.getId(), 0); + packet.writeD(stage); + + // Skill rewards. + packet.writeD(5); + for (int i = 1; i <= 5; i++) + { + packet.writeD(1867); + packet.writeD(i); + } + } + return true; } }