Balthus Festival settings loaded from datapack.
This commit is contained in:
parent
79cde5e112
commit
bb1f8b2166
@ -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();
|
||||||
|
@ -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.
|
||||||
|
@ -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();
|
||||||
|
@ -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.
|
||||||
|
@ -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();
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user