Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P aCis_gameserver
- Index: java/net/sf/l2j/commons/random/Rnd.java
- ===================================================================
- --- java/net/sf/l2j/commons/random/Rnd.java (revision 3)
- +++ java/net/sf/l2j/commons/random/Rnd.java (working copy)
- @@ -24,6 +24,11 @@
- return ThreadLocalRandom.current().nextInt();
- }
- + public static double get(double n)
- + {
- + return ThreadLocalRandom.current().nextDouble(0, n);
- + }
- +
- public static int get(int n)
- {
- return nextInt(n);
- Index: java/custom/ChristmasEvent.java
- ===================================================================
- --- java/custom/ChristmasEvent.java (nonexistent)
- +++ java/custom/ChristmasEvent.java (working copy)
- @@ -0,0 +1,181 @@
- +package custom;
- +
- +import java.io.File;
- +import java.util.ArrayList;
- +import java.util.List;
- +import java.util.concurrent.TimeUnit;
- +
- +import net.sf.l2j.commons.data.xml.XMLDocument;
- +import net.sf.l2j.commons.random.Rnd;
- +
- +import net.sf.l2j.gameserver.data.NpcTable;
- +import net.sf.l2j.gameserver.data.SpawnTable;
- +import net.sf.l2j.gameserver.model.L2Spawn;
- +import net.sf.l2j.gameserver.model.actor.Creature;
- +import net.sf.l2j.gameserver.model.actor.Npc;
- +import net.sf.l2j.gameserver.model.actor.instance.Player;
- +import net.sf.l2j.gameserver.model.actor.instance.SantaClaus;
- +import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- +import net.sf.l2j.gameserver.model.holder.IntStringHolder;
- +
- +import org.w3c.dom.Document;
- +import org.w3c.dom.NamedNodeMap;
- +import org.w3c.dom.Node;
- +
- +/**
- + * @author Melron
- + */
- +public class ChristmasEvent extends XMLDocument
- +{
- + private static final List<SantasReward> Rewards = new ArrayList<>();
- + private boolean enabled;
- + private int minLvl;
- + private int maxLvl;
- + private int despawnTime;
- + private int[] templates;
- + private double spawnChance;
- +
- + public ChristmasEvent()
- + {
- + load();
- + }
- +
- + @Override
- + protected void load()
- + {
- + loadDocument("./data/xml/SantaClaus.xml");
- + }
- +
- + @Override
- + protected void parseDocument(Document doc, File f)
- + {
- + try
- + {
- + final Node list = doc.getFirstChild();
- + for (Node cas = list.getFirstChild(); cas != null; cas = cas.getNextSibling())
- + {
- + if ("settings".equalsIgnoreCase(cas.getNodeName()))
- + {
- + final NamedNodeMap attrs = cas.getAttributes();
- + enabled = attrs.getNamedItem("enable").getNodeValue().equalsIgnoreCase("true");
- + minLvl = Integer.parseInt(attrs.getNamedItem("mobMinLvL").getNodeValue());
- + maxLvl = Integer.parseInt(attrs.getNamedItem("mobMaxLvL").getNodeValue());
- + despawnTime = Integer.parseInt(attrs.getNamedItem("despawnSeconds").getNodeValue());
- + templates = new int[]
- + {
- + Integer.parseInt(attrs.getNamedItem("NpcTempates").getNodeValue().split(",")[0]),
- + Integer.parseInt(attrs.getNamedItem("NpcTempates").getNodeValue().split(",")[1])
- + };
- + spawnChance = Double.parseDouble(attrs.getNamedItem("spawnChance").getNodeValue());
- + }
- + else if ("reward".equalsIgnoreCase(cas.getNodeName()))
- + {
- +
- + IntStringHolder exp = new IntStringHolder(-1, "");
- + IntStringHolder sp = new IntStringHolder(-1, "");
- + IntStringHolder rec = new IntStringHolder(-1, "");
- +
- + final List<IntIntHolder> rewards = new ArrayList<>();
- +
- + for (Node cat = cas.getFirstChild(); cat != null; cat = cat.getNextSibling())
- + {
- + final NamedNodeMap catAttrs = cat.getAttributes();
- +
- + if ("exp".equalsIgnoreCase(cat.getNodeName()))
- + exp = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
- +
- + else if ("sp".equalsIgnoreCase(cat.getNodeName()))
- + sp = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
- +
- + else if ("rec".equalsIgnoreCase(cat.getNodeName()))
- + rec = new IntStringHolder(Integer.parseInt(catAttrs.getNamedItem("val").getNodeValue()), catAttrs.getNamedItem("messageOnReward").getNodeValue());
- +
- + else if ("items".equalsIgnoreCase(cat.getNodeName()))
- + {
- + for (Node cats = cat.getFirstChild(); cats != null; cats = cats.getNextSibling())
- + {
- + final NamedNodeMap rewAttrs = cats.getAttributes();
- + if (!"item".equalsIgnoreCase(cats.getNodeName()))
- + continue;
- +
- + rewards.add(new IntIntHolder(Integer.parseInt(rewAttrs.getNamedItem("id").getNodeValue()), Integer.parseInt(rewAttrs.getNamedItem("quantity").getNodeValue())));
- + }
- + }
- + }
- + Rewards.add(new SantasReward(exp, sp, rec, rewards));
- + }
- + }
- + }
- + catch (Exception e)
- + {
- + e.printStackTrace();
- + System.out.println("Error while loading SantaClaus.xml");
- + }
- + }
- +
- + public int rewardsSize()
- + {
- + return Rewards.size();
- + }
- +
- + public SantasReward getRandomReward()
- + {
- + return Rnd.get(Rewards);
- + }
- +
- + public boolean isEnabled()
- + {
- + return enabled;
- + }
- +
- + public void luckySpawn(Creature monster, Player selective)
- + {
- + if (selective == null || monster.getLevel() < minLvl || monster.getLevel() > maxLvl || Rnd.get(100.0) > spawnChance)
- + return;
- + try
- + {
- + L2Spawn spawn = new L2Spawn(NpcTable.getInstance().getTemplate(templates[Rnd.get(templates.length)]));
- + spawn.setLoc(monster.getX(), monster.getY(), monster.getZ(), monster.getHeading());
- + spawn.setRespawnDelay(0);
- +
- + SpawnTable.getInstance().addNewSpawn(spawn, false);
- + SantaClaus santa = (SantaClaus) spawn.doSpawn(false);
- + spawn.setRespawnState(false);
- + santa.setSelective(selective);
- +
- + final int despawnTime = getDespawnTime();
- + ((Npc) santa).scheduleDespawn(TimeUnit.SECONDS.toMillis(despawnTime));
- + santa.broadcastNpcSay("Ho Ho Ho! What we got here? I'm smelling some rewards for you " + selective.getName() + "! I will stay for " + despawnTime + " seconds! Hurry Up!");
- +
- + }
- + catch (Exception e)
- + {
- + e.printStackTrace();
- + }
- + }
- +
- + public int getDespawnTime()
- + {
- + return despawnTime;
- + }
- +
- + public int getMinLvl()
- + {
- + return minLvl;
- + }
- +
- + public int getMaxLvl()
- + {
- + return maxLvl;
- + }
- +
- + public static ChristmasEvent getInstance()
- + {
- + return SingletonHolder._instance;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final ChristmasEvent _instance = new ChristmasEvent();
- + }
- +}
- Index: java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java (nonexistent)
- +++ java/net/sf/l2j/gameserver/model/holder/IntStringHolder.java (working copy)
- @@ -0,0 +1,42 @@
- +package net.sf.l2j.gameserver.model.holder;
- +
- +/**
- + * A generic int/string container.
- + */
- +public class IntStringHolder
- +{
- + private int _value;
- + private String _string;
- +
- + public IntStringHolder(int value, String string)
- + {
- + _value = value;
- + _string = string;
- + }
- +
- + public int getValue()
- + {
- + return _value;
- + }
- +
- + public String getString()
- + {
- + return _string;
- + }
- +
- + public void setValue(int value)
- + {
- + _value = value;
- + }
- +
- + public void setString(String value)
- + {
- + _string = value;
- + }
- +
- + @Override
- + public String toString()
- + {
- + return getClass().getSimpleName() + ": Value: " + _value + ", String: " + _string;
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/GameServer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/GameServer.java (revision 4)
- +++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
- @@ -107,6 +107,8 @@
- import net.sf.l2j.util.DeadLockDetector;
- import net.sf.l2j.util.IPv4Filter;
- +import custom.ChristmasEvent;
- +
- public class GameServer
- {
- private static final Logger _log = Logger.getLogger(GameServer.class.getName());
- @@ -231,6 +233,9 @@
- StringUtil.printSection("Manor Manager");
- CastleManorManager.getInstance();
- + StringUtil.printSection("Christmas Event");
- + _log.config("Loaded " + ChristmasEvent.getInstance().rewardsSize() + " Rewards!");
- +
- StringUtil.printSection("NPCs");
- BufferManager.getInstance();
- HerbDropData.getInstance();
- Index: java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/Monster.java (revision 3)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/Monster.java (working copy)
- @@ -5,6 +5,8 @@
- import net.sf.l2j.gameserver.model.actor.Creature;
- import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import custom.ChristmasEvent;
- +
- /**
- * This class manages monsters.
- * <ul>
- @@ -98,6 +100,9 @@
- if (_master != null)
- _master.getMinionList().onMinionDie(this, _master.getSpawn().getRespawnDelay() * 1000 / 2);
- + if (ChristmasEvent.getInstance().isEnabled() && killer instanceof Player)
- + ChristmasEvent.getInstance().luckySpawn(this, ((Player) killer));
- +
- return true;
- }
- Index: java/custom/SantasReward.java
- ===================================================================
- --- java/custom/SantasReward.java (nonexistent)
- +++ java/custom/SantasReward.java (working copy)
- @@ -0,0 +1,87 @@
- +package custom;
- +
- +import java.util.List;
- +
- +import net.sf.l2j.commons.lang.StringUtil;
- +
- +import net.sf.l2j.gameserver.model.actor.instance.Player;
- +import net.sf.l2j.gameserver.model.holder.IntIntHolder;
- +import net.sf.l2j.gameserver.model.holder.IntStringHolder;
- +
- +/**
- + * @author Melron
- + */
- +public class SantasReward
- +{
- + private IntStringHolder _exp;
- + private IntStringHolder _sp;
- + private IntStringHolder _rec;
- + private List<IntIntHolder> rewardItems;
- +
- + public SantasReward(IntStringHolder exp, IntStringHolder sp, IntStringHolder rec, List<IntIntHolder> rewards)
- + {
- + _exp = exp;
- + _sp = sp;
- + _rec = rec;
- + rewardItems = rewards;
- + }
- +
- + public boolean applyTo(Player player)
- + {
- + if (player == null)
- + return false;
- +
- + if (hasExpReward())
- + {
- + player.getStat().addExp(_exp.getValue());
- + player.sendMessage(_exp.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_exp.getValue())));
- + }
- +
- + if (hasSpReward())
- + {
- + player.getStat().addSp(_sp.getValue());
- + player.sendMessage(_sp.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_sp.getValue())));
- + }
- +
- + if (hasRecReward())
- + {
- + player.setRecomHave(_rec.getValue());
- + player.sendMessage(_rec.getString().replaceAll("\\$player", player.getName()).replaceAll("\\$val", String.valueOf(_rec.getValue())));
- + }
- +
- + if (hasRewardItems())
- + rewardItems.forEach(reward -> player.addItem("SantasReward", reward.getId(), reward.getValue(), null, true));
- +
- + return true;
- + }
- +
- + public boolean hasExpReward()
- + {
- + return _exp != null && _exp.getValue() > 0;
- + }
- +
- + public boolean hasSpReward()
- + {
- + return _sp != null && _sp.getValue() > 0;
- + }
- +
- + public boolean hasRecReward()
- + {
- + return _rec != null && _rec.getValue() > 0;
- + }
- +
- + public boolean hasRewardItems()
- + {
- + return rewardItems != null && rewardItems.size() > 0;
- + }
- +
- + @Override
- + public String toString()
- + {
- + final StringBuilder sb = new StringBuilder();
- +
- + StringUtil.append(sb, "\n==================", "\nExp : " + _exp.getValue(), ",\"" + _exp.getString() + "\"", "\nSp : " + _sp.getValue(), ",\"" + _sp.getString() + "\"", "\nRec : " + _rec.getValue(), ",\"" + _rec.getString() + "\"", "\nRewardItems : ");
- + rewardItems.forEach(holder -> StringUtil.append(sb, "\nId: ", holder.getId(), " Quantity: ", holder.getValue()));
- + return sb.toString();
- + }
- +}
- Index: java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java (nonexistent)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/SantaClaus.java (working copy)
- @@ -0,0 +1,51 @@
- +package net.sf.l2j.gameserver.model.actor.instance;
- +
- +import java.util.StringTokenizer;
- +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
- +import custom.ChristmasEvent;
- +
- +public class SantaClaus extends Folk
- +{
- + private Player selective = null;
- + private boolean rewarded = false;
- +
- + public SantaClaus(int objectId, NpcTemplate template)
- + {
- + super(objectId, template);
- + }
- +
- + @Override
- + public void onBypassFeedback(Player player, String command)
- + {
- + StringTokenizer st = new StringTokenizer(command, " ");
- + String currentCommand = st.nextToken();
- +
- + if (currentCommand.startsWith("claim"))
- + {
- + if (player == null || selective == null)
- + return;
- +
- + if (selective == player && !rewarded)
- + {
- + rewarded = ChristmasEvent.getInstance().getRandomReward().applyTo(player);
- + if (rewarded)
- + {
- + broadcastNpcSay("Bye!");
- + deleteMe();
- + }
- +
- + }
- + }
- + }
- +
- + @Override
- + public String getHtmlPath(int npcId, int val)
- + {
- + return "data/html/mods/santa/" + (this.getNpcId() == 50010 ? "1" : "2") + ".htm";
- + }
- +
- + public void setSelective(Player player)
- + {
- + selective = player;
- + }
- +}
- \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement