Balthus Festival settings loaded from datapack.

This commit is contained in:
MobiusDevelopment 2022-03-25 23:08:44 +00:00
parent 79cde5e112
commit bb1f8b2166
6 changed files with 657 additions and 543 deletions

View File

@ -16,10 +16,19 @@
*/ */
package events.BalthusFestival; package events.BalthusFestival;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager; import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager.BalthusEventHolder;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
@ -29,6 +38,7 @@ import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.holders.ItemHolder; 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.model.quest.LongTimeEvent; import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
@ -38,7 +48,7 @@ import org.l2jmobius.gameserver.network.serverpackets.balthusevent.ExBalthusEven
/** /**
* @author Index * @author Index
*/ */
public class BalthusFestival extends LongTimeEvent public class BalthusFestival extends LongTimeEvent implements IXmlReader
{ {
// NPC // NPC
private static final int FESTIVAL_FAIRY = 34330; private static final int FESTIVAL_FAIRY = 34330;
@ -67,81 +77,56 @@ public class BalthusFestival extends LongTimeEvent
addTalkId(FESTIVAL_FAIRY); addTalkId(FESTIVAL_FAIRY);
if (isEventPeriod()) if (isEventPeriod())
{ {
BalthusEventManager.getInstance(); load();
BalthusEventManager.getInstance().init();
} }
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN) @Override
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) public synchronized void load()
public void onPlayerLogin(OnPlayerLogin event)
{ {
if (!isEventPeriod()) parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
}
@Override
public void parseDocument(Document doc, File f)
{
final AtomicInteger i = new AtomicInteger();
forEach(doc, "list", listNode ->
{ {
return; final StatSet set = new StatSet(parseAttributes(listNode));
} if (BalthusEventManager.getInstance().getMinLevel() == 0)
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{ {
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player); BalthusEventManager.getInstance().setEasyMode(set.getBoolean("easyMode", false));
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player); BalthusEventManager.getInstance().setMinLevel(set.getInt("minLevel", 85));
BalthusEventManager.getInstance().addPlayer(player); BalthusEventManager.getInstance().setConsolation(new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)));
BalthusEventManager.getInstance().setMailSubject(set.getString("mailSubject", "Balthus Knight Lottery"));
BalthusEventManager.getInstance().setMailContent(set.getString("mailContent", "You win reward in Balthus Event!"));
} }
}
player.sendPacket(new ExBalthusEvent(player)); forEach(listNode, "reward", reward ->
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{ {
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player); final AtomicInteger j = new AtomicInteger();
BalthusEventManager.getInstance().addPlayer(player); final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>();
player.sendPacket(new ExBalthusEvent(player)); final Map<Integer, Integer> rewardTime = new HashMap<>();
} final StatSet rewardSet = new StatSet(parseAttributes(reward));
} rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from")));
forEach(reward, "items", itemNode ->
{
forEach(itemNode, "item", item ->
{
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>();
j.getAndIncrement();
final StatSet itemSet = new StatSet(parseAttributes(item));
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0));
tempRewardList.put(j.intValue(), tempChanceRewardList);
});
i.getAndIncrement();
BalthusEventManager.getInstance().addTemplate(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
});
});
});
} }
@Override @Override
@ -229,6 +214,79 @@ public class BalthusFestival extends LongTimeEvent
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogin(OnPlayerLogin event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
}
}
player.sendPacket(new ExBalthusEvent(player));
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
player.sendPacket(new ExBalthusEvent(player));
}
}
}
public static void main(String[] args) public static void main(String[] args)
{ {
new BalthusFestival(); new BalthusFestival();

View File

@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.instancemanager.events; package org.l2jmobius.gameserver.instancemanager.events;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
@ -26,19 +25,14 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.enums.MailType;
import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.Message;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder; import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
@ -55,15 +49,15 @@ import org.l2jmobius.gameserver.util.Broadcast;
/** /**
* @author Index * @author Index
*/ */
public class BalthusEventManager implements IXmlReader public class BalthusEventManager
{ {
protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName()); protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName());
private final Set<Player> _players = ConcurrentHashMap.newKeySet(); private final Set<Player> _players = ConcurrentHashMap.newKeySet();
private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>(); private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>();
private boolean _isEasyMode; private boolean _isEasyMode;
private ItemHolder _consolation;
private int _minLevel = 0; private int _minLevel = 0;
private ItemHolder _consolation = null;
private String _mailSubject = null; private String _mailSubject = null;
private String _mailContent = null; private String _mailContent = null;
private boolean _isRunning = false; private boolean _isRunning = false;
@ -73,69 +67,14 @@ public class BalthusEventManager implements IXmlReader
private Player _winner = null; private Player _winner = null;
private ItemChanceHolder _rewardItem; private ItemChanceHolder _rewardItem;
public void addPlayer(Player player)
{
_players.add(player);
}
public void removePlayer(Player player)
{
_players.remove(player);
}
public Set<Player> getPlayers()
{
return _players;
}
public void removeParticipant(Player player)
{
_players.remove(player);
}
public boolean isPlayerParticipant(Player player)
{
return _players.contains(player);
}
public int getMinLevel()
{
return _minLevel;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public ItemHolder getConsolation()
{
return _consolation;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
}
protected BalthusEventManager() protected BalthusEventManager()
{ {
load(); }
public void init()
{
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
final Calendar calendar = Calendar.getInstance(); final Calendar calendar = Calendar.getInstance();
final long currentTime = Chronos.currentTimeMillis(); final long currentTime = Chronos.currentTimeMillis();
final long hours = calendar.get(Calendar.HOUR_OF_DAY); final long hours = calendar.get(Calendar.HOUR_OF_DAY);
@ -194,53 +133,89 @@ public class BalthusEventManager implements IXmlReader
ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000); ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000);
} }
@Override public void addPlayer(Player player)
public synchronized void load()
{ {
_templates.clear(); _players.add(player);
parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
} }
@Override public void removePlayer(Player player)
public void parseDocument(Document doc, File f)
{ {
final AtomicInteger i = new AtomicInteger(); _players.remove(player);
forEach(doc, "list", listNode -> }
{
final StatSet set = new StatSet(parseAttributes(listNode)); public Set<Player> getPlayers()
if (_minLevel == 0) {
{ return _players;
_isEasyMode = set.getBoolean("easyMode", false); }
_minLevel = set.getInt("minLevel", 85);
_consolation = new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)); public void removeParticipant(Player player)
_mailSubject = set.getString("mailSubject", "Balthus Knight Lottery"); {
_mailContent = set.getString("mailContent", "You win reward in Balthus Event!"); _players.remove(player);
} }
forEach(listNode, "reward", reward -> public boolean isPlayerParticipant(Player player)
{ {
final AtomicInteger j = new AtomicInteger(); return _players.contains(player);
final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>(); }
final Map<Integer, Integer> rewardTime = new HashMap<>();
final StatSet rewardSet = new StatSet(parseAttributes(reward)); public void setEasyMode(boolean isEasyMode)
rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from"))); {
forEach(reward, "items", itemNode -> _isEasyMode = isEasyMode;
{ }
forEach(itemNode, "item", item ->
{ public int getMinLevel()
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>(); {
j.getAndIncrement(); return _minLevel;
final StatSet itemSet = new StatSet(parseAttributes(item)); }
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0)); public void setMinLevel(int minLevel)
tempRewardList.put(j.intValue(), tempChanceRewardList); {
}); _minLevel = minLevel;
i.getAndIncrement(); }
_templates.put(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
}); public ItemHolder getConsolation()
}); {
}); return _consolation;
}
public void setConsolation(ItemHolder consolation)
{
_consolation = consolation;
}
public void setMailSubject(String mailSubject)
{
_mailSubject = mailSubject;
}
public void setMailContent(String mailContent)
{
_mailContent = mailContent;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
} }
private void tryToGetWinner() private void tryToGetWinner()
@ -258,7 +233,7 @@ public class BalthusEventManager implements IXmlReader
Collections.shuffle(playerList); Collections.shuffle(playerList);
for (Player player : playerList) for (Player player : playerList)
{ {
if (player.getLevel() >= getMinLevel()) if (player.getLevel() >= _minLevel)
{ {
_winner = player; _winner = player;
} }
@ -371,6 +346,11 @@ public class BalthusEventManager implements IXmlReader
MailManager.getInstance().sendMessage(msg); MailManager.getInstance().sendMessage(msg);
} }
public void addTemplate(int value, BalthusEventHolder holder)
{
_templates.put(value, holder);
}
public static class BalthusEventHolder public static class BalthusEventHolder
{ {
// From hour to hour. // From hour to hour.

View File

@ -16,10 +16,19 @@
*/ */
package events.BalthusFestival; package events.BalthusFestival;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager; import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager.BalthusEventHolder;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
@ -29,6 +38,7 @@ import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.holders.ItemHolder; 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.model.quest.LongTimeEvent; import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
@ -38,7 +48,7 @@ import org.l2jmobius.gameserver.network.serverpackets.balthusevent.ExBalthusEven
/** /**
* @author Index * @author Index
*/ */
public class BalthusFestival extends LongTimeEvent public class BalthusFestival extends LongTimeEvent implements IXmlReader
{ {
// NPC // NPC
private static final int FESTIVAL_FAIRY = 34330; private static final int FESTIVAL_FAIRY = 34330;
@ -67,81 +77,56 @@ public class BalthusFestival extends LongTimeEvent
addTalkId(FESTIVAL_FAIRY); addTalkId(FESTIVAL_FAIRY);
if (isEventPeriod()) if (isEventPeriod())
{ {
BalthusEventManager.getInstance(); load();
BalthusEventManager.getInstance().init();
} }
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN) @Override
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) public synchronized void load()
public void onPlayerLogin(OnPlayerLogin event)
{ {
if (!isEventPeriod()) parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
}
@Override
public void parseDocument(Document doc, File f)
{
final AtomicInteger i = new AtomicInteger();
forEach(doc, "list", listNode ->
{ {
return; final StatSet set = new StatSet(parseAttributes(listNode));
} if (BalthusEventManager.getInstance().getMinLevel() == 0)
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{ {
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player); BalthusEventManager.getInstance().setEasyMode(set.getBoolean("easyMode", false));
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player); BalthusEventManager.getInstance().setMinLevel(set.getInt("minLevel", 85));
BalthusEventManager.getInstance().addPlayer(player); BalthusEventManager.getInstance().setConsolation(new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)));
BalthusEventManager.getInstance().setMailSubject(set.getString("mailSubject", "Balthus Knight Lottery"));
BalthusEventManager.getInstance().setMailContent(set.getString("mailContent", "You win reward in Balthus Event!"));
} }
}
player.sendPacket(new ExBalthusEvent(player)); forEach(listNode, "reward", reward ->
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{ {
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player); final AtomicInteger j = new AtomicInteger();
BalthusEventManager.getInstance().addPlayer(player); final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>();
player.sendPacket(new ExBalthusEvent(player)); final Map<Integer, Integer> rewardTime = new HashMap<>();
} final StatSet rewardSet = new StatSet(parseAttributes(reward));
} rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from")));
forEach(reward, "items", itemNode ->
{
forEach(itemNode, "item", item ->
{
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>();
j.getAndIncrement();
final StatSet itemSet = new StatSet(parseAttributes(item));
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0));
tempRewardList.put(j.intValue(), tempChanceRewardList);
});
i.getAndIncrement();
BalthusEventManager.getInstance().addTemplate(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
});
});
});
} }
@Override @Override
@ -229,6 +214,79 @@ public class BalthusFestival extends LongTimeEvent
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogin(OnPlayerLogin event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
}
}
player.sendPacket(new ExBalthusEvent(player));
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
player.sendPacket(new ExBalthusEvent(player));
}
}
}
public static void main(String[] args) public static void main(String[] args)
{ {
new BalthusFestival(); new BalthusFestival();

View File

@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.instancemanager.events; package org.l2jmobius.gameserver.instancemanager.events;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
@ -26,19 +25,14 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.enums.MailType;
import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.Message;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder; import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
@ -55,15 +49,15 @@ import org.l2jmobius.gameserver.util.Broadcast;
/** /**
* @author Index * @author Index
*/ */
public class BalthusEventManager implements IXmlReader public class BalthusEventManager
{ {
protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName()); protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName());
private final Set<Player> _players = ConcurrentHashMap.newKeySet(); private final Set<Player> _players = ConcurrentHashMap.newKeySet();
private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>(); private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>();
private boolean _isEasyMode; private boolean _isEasyMode;
private ItemHolder _consolation;
private int _minLevel = 0; private int _minLevel = 0;
private ItemHolder _consolation = null;
private String _mailSubject = null; private String _mailSubject = null;
private String _mailContent = null; private String _mailContent = null;
private boolean _isRunning = false; private boolean _isRunning = false;
@ -73,69 +67,14 @@ public class BalthusEventManager implements IXmlReader
private Player _winner = null; private Player _winner = null;
private ItemChanceHolder _rewardItem; private ItemChanceHolder _rewardItem;
public void addPlayer(Player player)
{
_players.add(player);
}
public void removePlayer(Player player)
{
_players.remove(player);
}
public Set<Player> getPlayers()
{
return _players;
}
public void removeParticipant(Player player)
{
_players.remove(player);
}
public boolean isPlayerParticipant(Player player)
{
return _players.contains(player);
}
public int getMinLevel()
{
return _minLevel;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public ItemHolder getConsolation()
{
return _consolation;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
}
protected BalthusEventManager() protected BalthusEventManager()
{ {
load(); }
public void init()
{
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
final Calendar calendar = Calendar.getInstance(); final Calendar calendar = Calendar.getInstance();
final long currentTime = Chronos.currentTimeMillis(); final long currentTime = Chronos.currentTimeMillis();
final long hours = calendar.get(Calendar.HOUR_OF_DAY); final long hours = calendar.get(Calendar.HOUR_OF_DAY);
@ -194,53 +133,89 @@ public class BalthusEventManager implements IXmlReader
ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000); ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000);
} }
@Override public void addPlayer(Player player)
public synchronized void load()
{ {
_templates.clear(); _players.add(player);
parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
} }
@Override public void removePlayer(Player player)
public void parseDocument(Document doc, File f)
{ {
final AtomicInteger i = new AtomicInteger(); _players.remove(player);
forEach(doc, "list", listNode -> }
{
final StatSet set = new StatSet(parseAttributes(listNode)); public Set<Player> getPlayers()
if (_minLevel == 0) {
{ return _players;
_isEasyMode = set.getBoolean("easyMode", false); }
_minLevel = set.getInt("minLevel", 85);
_consolation = new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)); public void removeParticipant(Player player)
_mailSubject = set.getString("mailSubject", "Balthus Knight Lottery"); {
_mailContent = set.getString("mailContent", "You win reward in Balthus Event!"); _players.remove(player);
} }
forEach(listNode, "reward", reward -> public boolean isPlayerParticipant(Player player)
{ {
final AtomicInteger j = new AtomicInteger(); return _players.contains(player);
final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>(); }
final Map<Integer, Integer> rewardTime = new HashMap<>();
final StatSet rewardSet = new StatSet(parseAttributes(reward)); public void setEasyMode(boolean isEasyMode)
rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from"))); {
forEach(reward, "items", itemNode -> _isEasyMode = isEasyMode;
{ }
forEach(itemNode, "item", item ->
{ public int getMinLevel()
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>(); {
j.getAndIncrement(); return _minLevel;
final StatSet itemSet = new StatSet(parseAttributes(item)); }
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0)); public void setMinLevel(int minLevel)
tempRewardList.put(j.intValue(), tempChanceRewardList); {
}); _minLevel = minLevel;
i.getAndIncrement(); }
_templates.put(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
}); public ItemHolder getConsolation()
}); {
}); return _consolation;
}
public void setConsolation(ItemHolder consolation)
{
_consolation = consolation;
}
public void setMailSubject(String mailSubject)
{
_mailSubject = mailSubject;
}
public void setMailContent(String mailContent)
{
_mailContent = mailContent;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
} }
private void tryToGetWinner() private void tryToGetWinner()
@ -258,7 +233,7 @@ public class BalthusEventManager implements IXmlReader
Collections.shuffle(playerList); Collections.shuffle(playerList);
for (Player player : playerList) for (Player player : playerList)
{ {
if (player.getLevel() >= getMinLevel()) if (player.getLevel() >= _minLevel)
{ {
_winner = player; _winner = player;
} }
@ -371,6 +346,11 @@ public class BalthusEventManager implements IXmlReader
MailManager.getInstance().sendMessage(msg); MailManager.getInstance().sendMessage(msg);
} }
public void addTemplate(int value, BalthusEventHolder holder)
{
_templates.put(value, holder);
}
public static class BalthusEventHolder public static class BalthusEventHolder
{ {
// From hour to hour. // From hour to hour.

View File

@ -16,10 +16,19 @@
*/ */
package events.BalthusFestival; package events.BalthusFestival;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager; import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager;
import org.l2jmobius.gameserver.instancemanager.events.BalthusEventManager.BalthusEventHolder;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
@ -29,6 +38,7 @@ import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.holders.ItemHolder; 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.model.quest.LongTimeEvent; import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
@ -38,7 +48,7 @@ import org.l2jmobius.gameserver.network.serverpackets.balthusevent.ExBalthusEven
/** /**
* @author Index * @author Index
*/ */
public class BalthusFestival extends LongTimeEvent public class BalthusFestival extends LongTimeEvent implements IXmlReader
{ {
// NPC // NPC
private static final int FESTIVAL_FAIRY = 34330; private static final int FESTIVAL_FAIRY = 34330;
@ -67,81 +77,56 @@ public class BalthusFestival extends LongTimeEvent
addTalkId(FESTIVAL_FAIRY); addTalkId(FESTIVAL_FAIRY);
if (isEventPeriod()) if (isEventPeriod())
{ {
BalthusEventManager.getInstance(); load();
BalthusEventManager.getInstance().init();
} }
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN) @Override
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) public synchronized void load()
public void onPlayerLogin(OnPlayerLogin event)
{ {
if (!isEventPeriod()) parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
}
@Override
public void parseDocument(Document doc, File f)
{
final AtomicInteger i = new AtomicInteger();
forEach(doc, "list", listNode ->
{ {
return; final StatSet set = new StatSet(parseAttributes(listNode));
} if (BalthusEventManager.getInstance().getMinLevel() == 0)
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{ {
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player); BalthusEventManager.getInstance().setEasyMode(set.getBoolean("easyMode", false));
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player); BalthusEventManager.getInstance().setMinLevel(set.getInt("minLevel", 85));
BalthusEventManager.getInstance().addPlayer(player); BalthusEventManager.getInstance().setConsolation(new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)));
BalthusEventManager.getInstance().setMailSubject(set.getString("mailSubject", "Balthus Knight Lottery"));
BalthusEventManager.getInstance().setMailContent(set.getString("mailContent", "You win reward in Balthus Event!"));
} }
}
player.sendPacket(new ExBalthusEvent(player)); forEach(listNode, "reward", reward ->
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{ {
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player); final AtomicInteger j = new AtomicInteger();
BalthusEventManager.getInstance().addPlayer(player); final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>();
player.sendPacket(new ExBalthusEvent(player)); final Map<Integer, Integer> rewardTime = new HashMap<>();
} final StatSet rewardSet = new StatSet(parseAttributes(reward));
} rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from")));
forEach(reward, "items", itemNode ->
{
forEach(itemNode, "item", item ->
{
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>();
j.getAndIncrement();
final StatSet itemSet = new StatSet(parseAttributes(item));
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0));
tempRewardList.put(j.intValue(), tempChanceRewardList);
});
i.getAndIncrement();
BalthusEventManager.getInstance().addTemplate(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
});
});
});
} }
@Override @Override
@ -229,6 +214,79 @@ public class BalthusFestival extends LongTimeEvent
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogin(OnPlayerLogin event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
final BuffInfo buff = player.getEffectList().getBuffInfoBySkillId(skill.getSkillId());
if (buff != null)
{
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
startQuestTimer("balthusEventBuff" + player.getObjectId(), buff.getTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
}
}
player.sendPacket(new ExBalthusEvent(player));
}
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerLogout(OnPlayerLogout event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getPlayer();
if ((player == null))
{
return;
}
cancelQuestTimer("balthusEventBuff" + player.getObjectId(), null, player);
BalthusEventManager.getInstance().removePlayer(player);
}
@RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onCreatureSkillFinishCast(OnCreatureSkillFinishCast event)
{
if (!isEventPeriod())
{
return;
}
final Player player = event.getCaster().getActingPlayer();
if (player == null)
{
return;
}
for (SkillHolder skill : SKILLS)
{
if (event.getSkill() == skill.getSkill())
{
startQuestTimer("balthusEventBuff" + player.getObjectId(), skill.getSkill().getAbnormalTime() * 1000, null, player);
BalthusEventManager.getInstance().addPlayer(player);
player.sendPacket(new ExBalthusEvent(player));
}
}
}
public static void main(String[] args) public static void main(String[] args)
{ {
new BalthusFestival(); new BalthusFestival();

View File

@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.instancemanager.events; package org.l2jmobius.gameserver.instancemanager.events;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
@ -26,19 +25,14 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.enums.MailType;
import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.Message;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder; import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
@ -55,15 +49,15 @@ import org.l2jmobius.gameserver.util.Broadcast;
/** /**
* @author Index * @author Index
*/ */
public class BalthusEventManager implements IXmlReader public class BalthusEventManager
{ {
protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName()); protected static final Logger LOGGER = Logger.getLogger(BalthusEventManager.class.getName());
private final Set<Player> _players = ConcurrentHashMap.newKeySet(); private final Set<Player> _players = ConcurrentHashMap.newKeySet();
private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>(); private final Map<Integer, BalthusEventHolder> _templates = new HashMap<>();
private boolean _isEasyMode; private boolean _isEasyMode;
private ItemHolder _consolation;
private int _minLevel = 0; private int _minLevel = 0;
private ItemHolder _consolation = null;
private String _mailSubject = null; private String _mailSubject = null;
private String _mailContent = null; private String _mailContent = null;
private boolean _isRunning = false; private boolean _isRunning = false;
@ -73,69 +67,14 @@ public class BalthusEventManager implements IXmlReader
private Player _winner = null; private Player _winner = null;
private ItemChanceHolder _rewardItem; private ItemChanceHolder _rewardItem;
public void addPlayer(Player player)
{
_players.add(player);
}
public void removePlayer(Player player)
{
_players.remove(player);
}
public Set<Player> getPlayers()
{
return _players;
}
public void removeParticipant(Player player)
{
_players.remove(player);
}
public boolean isPlayerParticipant(Player player)
{
return _players.contains(player);
}
public int getMinLevel()
{
return _minLevel;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public ItemHolder getConsolation()
{
return _consolation;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
}
protected BalthusEventManager() protected BalthusEventManager()
{ {
load(); }
public void init()
{
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
final Calendar calendar = Calendar.getInstance(); final Calendar calendar = Calendar.getInstance();
final long currentTime = Chronos.currentTimeMillis(); final long currentTime = Chronos.currentTimeMillis();
final long hours = calendar.get(Calendar.HOUR_OF_DAY); final long hours = calendar.get(Calendar.HOUR_OF_DAY);
@ -194,53 +133,89 @@ public class BalthusEventManager implements IXmlReader
ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000); ThreadPool.scheduleAtFixedRate(this::tryToGetWinner, startDelay, 720000);
} }
@Override public void addPlayer(Player player)
public synchronized void load()
{ {
_templates.clear(); _players.add(player);
parseDatapackFile("data/scripts/events/BalthusFestival/rewards.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " rewards.");
} }
@Override public void removePlayer(Player player)
public void parseDocument(Document doc, File f)
{ {
final AtomicInteger i = new AtomicInteger(); _players.remove(player);
forEach(doc, "list", listNode -> }
{
final StatSet set = new StatSet(parseAttributes(listNode)); public Set<Player> getPlayers()
if (_minLevel == 0) {
{ return _players;
_isEasyMode = set.getBoolean("easyMode", false); }
_minLevel = set.getInt("minLevel", 85);
_consolation = new ItemHolder(set.getInt("id", 49783), set.getInt("count", 100)); public void removeParticipant(Player player)
_mailSubject = set.getString("mailSubject", "Balthus Knight Lottery"); {
_mailContent = set.getString("mailContent", "You win reward in Balthus Event!"); _players.remove(player);
} }
forEach(listNode, "reward", reward -> public boolean isPlayerParticipant(Player player)
{ {
final AtomicInteger j = new AtomicInteger(); return _players.contains(player);
final Map<Integer, Map<ItemChanceHolder, Double>> tempRewardList = new HashMap<>(); }
final Map<Integer, Integer> rewardTime = new HashMap<>();
final StatSet rewardSet = new StatSet(parseAttributes(reward)); public void setEasyMode(boolean isEasyMode)
rewardTime.put(rewardSet.getInt("from"), rewardSet.getInt("to", rewardSet.getInt("from"))); {
forEach(reward, "items", itemNode -> _isEasyMode = isEasyMode;
{ }
forEach(itemNode, "item", item ->
{ public int getMinLevel()
final Map<ItemChanceHolder, Double> tempChanceRewardList = new HashMap<>(); {
j.getAndIncrement(); return _minLevel;
final StatSet itemSet = new StatSet(parseAttributes(item)); }
ItemChanceHolder itemChanceHolder = new ItemChanceHolder(itemSet.getInt("id", 57), itemSet.getDouble("chance", 100), itemSet.getInt("count", 100));
tempChanceRewardList.put(itemChanceHolder, itemSet.getDouble("lotteryChance", 0.0)); public void setMinLevel(int minLevel)
tempRewardList.put(j.intValue(), tempChanceRewardList); {
}); _minLevel = minLevel;
i.getAndIncrement(); }
_templates.put(i.intValue(), new BalthusEventHolder(rewardTime, tempRewardList));
}); public ItemHolder getConsolation()
}); {
}); return _consolation;
}
public void setConsolation(ItemHolder consolation)
{
_consolation = consolation;
}
public void setMailSubject(String mailSubject)
{
_mailSubject = mailSubject;
}
public void setMailContent(String mailContent)
{
_mailContent = mailContent;
}
public int getCurrentProgress()
{
return _currProgress;
}
public int getCurrentState()
{
return _currState;
}
public int getCurrRewardItem()
{
return _rewardItem.getId();
}
public boolean isRunning()
{
return _isRunning;
}
public int getTime()
{
return Calendar.getInstance().get(Calendar.MINUTE) * 60; // client makes 3600 - time
} }
private void tryToGetWinner() private void tryToGetWinner()
@ -258,7 +233,7 @@ public class BalthusEventManager implements IXmlReader
Collections.shuffle(playerList); Collections.shuffle(playerList);
for (Player player : playerList) for (Player player : playerList)
{ {
if (player.getLevel() >= getMinLevel()) if (player.getLevel() >= _minLevel)
{ {
_winner = player; _winner = player;
} }
@ -371,6 +346,11 @@ public class BalthusEventManager implements IXmlReader
MailManager.getInstance().sendMessage(msg); MailManager.getInstance().sendMessage(msg);
} }
public void addTemplate(int value, BalthusEventHolder holder)
{
_templates.put(value, holder);
}
public static class BalthusEventHolder public static class BalthusEventHolder
{ {
// From hour to hour. // From hour to hour.