Addition of True Hero.
This commit is contained in:
parent
99ce23eeef
commit
0b7f8131b8
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -108,6 +108,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6559,7 +6560,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6750,6 +6751,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -249,7 +249,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -46,8 +46,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
private final int _flyRunSpd;
|
||||
private final int _flyWalkSpd;
|
||||
private final double _moveMultiplier;
|
||||
private int _enchantLevel = 0;
|
||||
private int _armorEnchant = 0;
|
||||
private final int _enchantLevel;
|
||||
private final int _armorEnchant;
|
||||
private String _title;
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
@ -356,7 +356,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -109,6 +109,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6566,7 +6567,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6757,6 +6758,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -248,7 +248,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -46,8 +46,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
private final int _flyRunSpd;
|
||||
private final int _flyWalkSpd;
|
||||
private final double _moveMultiplier;
|
||||
private int _enchantLevel = 0;
|
||||
private int _armorEnchant = 0;
|
||||
private final int _enchantLevel;
|
||||
private final int _armorEnchant;
|
||||
private String _title;
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
@ -356,7 +356,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -110,6 +110,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6568,7 +6569,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6759,6 +6760,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -248,7 +248,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -46,8 +46,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
private final int _flyRunSpd;
|
||||
private final int _flyWalkSpd;
|
||||
private final double _moveMultiplier;
|
||||
private int _enchantLevel = 0;
|
||||
private int _armorEnchant = 0;
|
||||
private final int _enchantLevel;
|
||||
private final int _armorEnchant;
|
||||
private String _title;
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
@ -356,7 +356,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -112,6 +112,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6565,7 +6566,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6756,6 +6757,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -249,7 +249,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -47,8 +47,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
private final int _flyRunSpd;
|
||||
private final int _flyWalkSpd;
|
||||
private final double _moveMultiplier;
|
||||
private int _enchantLevel = 0;
|
||||
private int _armorEnchant = 0;
|
||||
private final int _enchantLevel;
|
||||
private final int _armorEnchant;
|
||||
private String _title;
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
@ -357,7 +357,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -109,6 +109,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6535,7 +6536,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6726,6 +6727,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -248,7 +248,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -354,7 +354,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
@ -47,7 +47,7 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
UNK_3(0x16, 9);
|
||||
TRUE_HERO(0x16, 9);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@ -84,6 +84,24 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
@ -99,10 +117,11 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
|
||||
L2World.getInstance().getPlayers().stream().forEach(player ->
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
});
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos penalties have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,12 @@ public final class GlobalVariablesManager extends AbstractVariables
|
||||
private static final String DELETE_QUERY = "DELETE FROM global_variables";
|
||||
private static final String INSERT_QUERY = "INSERT INTO global_variables (var, value) VALUES (?, ?)";
|
||||
|
||||
// Public variable names
|
||||
public static final String COC_TOP_MARKS = "COC_TOP_MARKS";
|
||||
public static final String COC_TOP_MEMBER = "COC_TOP_MEMBER";
|
||||
public static final String COC_TRUE_HERO = "COC_TOP_MARKS";
|
||||
public static final String COC_TRUE_HERO_REWARDED = "COC_TOP_MARKS";
|
||||
|
||||
protected GlobalVariablesManager()
|
||||
{
|
||||
restoreMe();
|
||||
|
@ -109,6 +109,7 @@ import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MatchingRoomManager;
|
||||
@ -6535,7 +6536,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rset.getInt("apprentice"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
// Set Hero status if it applies.
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
if (clanId > 0)
|
||||
@ -6726,6 +6727,21 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
|
||||
// CoC Monthly winner. (True Hero)
|
||||
final int trueHeroId = GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TRUE_HERO, 0);
|
||||
if (trueHeroId == player.getObjectId())
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().getBoolean(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, true);
|
||||
player.addItem("CoC-Hero", 35565, 1, player, true); // Mysterious Belt
|
||||
player.addItem("CoC-Hero", 35564, 1, player, true); // Ruler's Authority
|
||||
player.setFame(player.getFame() + 5000);
|
||||
player.sendMessage("You have been rewarded with 5.000 fame points.");
|
||||
}
|
||||
player.setTrueHero(true);
|
||||
}
|
||||
|
||||
// Recalculate all stats
|
||||
player.getStat().recalculateStats(false);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.enums.CeremonyOfChaosResult;
|
||||
import com.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.L2Party.MessageType;
|
||||
@ -51,6 +52,7 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.DeleteObject;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||
@ -292,7 +294,8 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
msg.addString(winner.getName());
|
||||
|
||||
// Rewards according to https://l2wiki.com/Ceremony_of_Chaos
|
||||
winner.addItem("CoC-Winner", 34900, Rnd.get(2, 4), winner, true); // Mysterious Marks
|
||||
final int marksRewarded = Rnd.get(2, 4);
|
||||
winner.addItem("CoC-Winner", 34900, marksRewarded, winner, true); // Mysterious Marks
|
||||
|
||||
// Possible additional rewards
|
||||
|
||||
@ -365,6 +368,15 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
|
||||
{
|
||||
winner.addItem("CoC-Winner", 35565, 1, winner, true); // Mysterious Belt
|
||||
}
|
||||
|
||||
// Save monthly progress.
|
||||
final int totalMarks = winner.getVariables().getInt(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, 0) + marksRewarded;
|
||||
winner.getVariables().set(PlayerVariables.CEREMONY_OF_CHAOS_MARKS, totalMarks);
|
||||
if (totalMarks > GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MARKS, 0))
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, totalMarks);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, winner.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
for (CeremonyOfChaosMember member : getMembers().values())
|
||||
|
@ -50,6 +50,7 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
|
||||
private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
|
||||
public static final String CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES = "CEREMONY_OF_CHAOS_PENALTIES";
|
||||
public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
|
||||
public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
|
||||
public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS";
|
||||
public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED";
|
||||
|
@ -249,7 +249,7 @@ public class CharInfo implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeH(AbnormalVisualEffect.STEALTH.getClientId());
|
||||
}
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : 0);
|
||||
packet.writeC(cocPlayer != null ? cocPlayer.getPosition() : _activeChar.isTrueHero() ? 100 : 0);
|
||||
packet.writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
|
||||
packet.writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
|
||||
return true;
|
||||
|
@ -46,8 +46,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
private final int _flyRunSpd;
|
||||
private final int _flyWalkSpd;
|
||||
private final double _moveMultiplier;
|
||||
private int _enchantLevel = 0;
|
||||
private int _armorEnchant = 0;
|
||||
private final int _enchantLevel;
|
||||
private final int _armorEnchant;
|
||||
private String _title;
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
@ -355,7 +355,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNK_3))
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeD(0x00);
|
||||
|
Loading…
Reference in New Issue
Block a user