Replaced seed CSV data with aCis free version XML data.

This commit is contained in:
MobiusDevelopment
2020-01-27 00:34:22 +00:00
parent 328ce253f2
commit 162e956a4c
20 changed files with 763 additions and 1044 deletions

View File

@@ -70,6 +70,7 @@ import org.l2jmobius.gameserver.datatables.xml.FenceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.datatables.xml.RecipeData;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.datatables.xml.StaticObjectData;
import org.l2jmobius.gameserver.datatables.xml.SummonItemData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
@@ -109,7 +110,6 @@ import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.instancemanager.RaidBossPointsManager;
import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.entity.Announcements;
import org.l2jmobius.gameserver.model.entity.Hero;
@@ -339,7 +339,7 @@ public class GameServer
}
Util.printSection("Manor");
Manor.getInstance();
SeedData.getInstance();
CastleManorManager.getInstance();
Util.printSection("Castles");

View File

@@ -0,0 +1,321 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.datatables.xml;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.SeedDataHolder;
import org.l2jmobius.gameserver.model.items.Item;
/**
* This class loads and stores manor seed information.
* @author l3x, Mobius
*/
public class SeedData implements IXmlReader
{
private static final Logger LOGGER = Logger.getLogger(SeedData.class.getName());
private static Map<Integer, SeedDataHolder> _seeds = new ConcurrentHashMap<>();
protected SeedData()
{
load();
}
@Override
public void load()
{
_seeds.clear();
parseDatapackFile("data/Seeds.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _seeds.size() + " seeds.");
}
@Override
public void parseDocument(Document doc, File f)
{
// StatSet used to feed informations. Cleaned on every entry.
final StatSet set = new StatSet();
// First element is never read.
final Node n = doc.getFirstChild();
for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling())
{
if ("seed".equalsIgnoreCase(node.getNodeName()))
{
final NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
final Node att = attrs.item(i);
set.set(att.getNodeName(), att.getNodeValue());
}
final int id = set.getInt("id");
_seeds.put(id, new SeedDataHolder(id, set.getInt("level"), set.getInt("cropId"), set.getInt("matureId"), set.getInt("reward1"), set.getInt("reward2"), set.getInt("castleId"), set.getBoolean("isAlternative"), set.getInt("seedsLimit"), set.getInt("cropsLimit")));
}
}
}
public List<Integer> getAllCrops()
{
final List<Integer> crops = new ArrayList<>();
for (SeedDataHolder seed : _seeds.values())
{
if (!crops.contains(seed.getCrop()) && (seed.getCrop() != 0))
{
crops.add(seed.getCrop());
}
}
return crops;
}
public int getSeedBasicPrice(int seedId)
{
final Item seedItem = ItemTable.getInstance().getTemplate(seedId);
if (seedItem != null)
{
return seedItem.getReferencePrice();
}
return 0;
}
public int getSeedBasicPriceByCrop(int cropId)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return getSeedBasicPrice(seed.getId());
}
}
return 0;
}
public int getCropBasicPrice(int cropId)
{
final Item cropItem = ItemTable.getInstance().getTemplate(cropId);
if (cropItem != null)
{
return cropItem.getReferencePrice();
}
return 0;
}
public int getMatureCrop(int cropId)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getMature();
}
}
return 0;
}
/**
* Returns price which lord pays to buy one seed
* @param seedId
* @return seed price
*/
public int getSeedBuyPrice(int seedId)
{
final int buyPrice = getSeedBasicPrice(seedId) / 10;
return buyPrice > 0 ? buyPrice : 1;
}
public int getSeedMinLevel(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel() - 5;
}
return -1;
}
public int getSeedMaxLevel(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel() + 5;
}
return -1;
}
public int getSeedLevelByCrop(int cropId)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getLevel();
}
}
return 0;
}
public int getSeedLevel(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel();
}
return -1;
}
public boolean isAlternative(int seedId)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getId() == seedId)
{
return seed.isAlternative();
}
}
return false;
}
public int getCropType(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getCrop();
}
return -1;
}
public synchronized int getRewardItem(int cropId, int type)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getReward(type); // there can be several seeds with same crop, but reward should be the same for all
}
}
return -1;
}
public synchronized int getRewardItemBySeed(int seedId, int type)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getReward(type);
}
return 0;
}
/**
* Return all crops which can be purchased by given castle
* @param castleId
* @return
*/
public List<Integer> getCropsForCastle(int castleId)
{
final List<Integer> crops = new ArrayList<>();
for (SeedDataHolder seed : _seeds.values())
{
if ((seed.getManorId() == castleId) && !crops.contains(seed.getCrop()))
{
crops.add(seed.getCrop());
}
}
return crops;
}
/**
* Return list of seed ids, which belongs to castle with given id
* @param castleId - id of the castle
* @return seedIds - list of seed ids
*/
public List<Integer> getSeedsForCastle(int castleId)
{
final List<Integer> seedsID = new ArrayList<>();
for (SeedDataHolder seed : _seeds.values())
{
if ((seed.getManorId() == castleId) && !seedsID.contains(seed.getId()))
{
seedsID.add(seed.getId());
}
}
return seedsID;
}
/**
* Returns castle id where seed can be showed<br>
* @param seedId
* @return castleId
*/
public int getCastleIdForSeed(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getManorId();
}
return 0;
}
public int getSeedSaleLimit(int seedId)
{
final SeedDataHolder seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getSeedLimit();
}
return 0;
}
public int getCropPuchaseLimit(int cropId)
{
for (SeedDataHolder seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getCropLimit();
}
}
return 0;
}
public static SeedData getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final SeedData INSTANCE = new SeedData();
}
}

View File

@@ -18,9 +18,9 @@ package org.l2jmobius.gameserver.handler.itemhandlers;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Playable;
@@ -363,7 +363,7 @@ public class Seed implements IItemHandler
private boolean areaValid(int castleId)
{
return Manor.getInstance().getCastleIdForSeed(_seedId) == castleId;
return SeedData.getInstance().getCastleIdForSeed(_seedId) == castleId;
}
@Override

View File

@@ -20,8 +20,8 @@ import java.util.logging.Logger;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
@@ -140,11 +140,11 @@ public class Sow implements ISkillHandler
}
// TODO: check all the chances
int basicSuccess = (Manor.getInstance().isAlternative(_seedId) ? 20 : 90);
int basicSuccess = (SeedData.getInstance().isAlternative(_seedId) ? 20 : 90);
int minlevelSeed = 0;
int maxlevelSeed = 0;
minlevelSeed = Manor.getInstance().getSeedMinLevel(_seedId);
maxlevelSeed = Manor.getInstance().getSeedMaxLevel(_seedId);
minlevelSeed = SeedData.getInstance().getSeedMinLevel(_seedId);
maxlevelSeed = SeedData.getInstance().getSeedMaxLevel(_seedId);
final int levelPlayer = _player.getLevel(); // Attacker Level
final int levelTarget = _target.getLevel(); // taret Level

View File

@@ -29,9 +29,9 @@ import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.model.ClanWarehouse;
import org.l2jmobius.gameserver.model.ItemContainer;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
@@ -328,7 +328,7 @@ public class CastleManorManager
if (count >= 1)
{
cwh.addItem("Manor", Manor.getInstance().getMatureCrop(crop.getId()), count, null, null);
cwh.addItem("Manor", SeedData.getInstance().getMatureCrop(crop.getId()), count, null, null);
}
}
@@ -435,7 +435,7 @@ public class CastleManorManager
private List<SeedProduction> getNewSeedsList(int castleId)
{
final List<SeedProduction> seeds = new ArrayList<>();
final List<Integer> seedsIds = Manor.getInstance().getSeedsForCastle(castleId);
final List<Integer> seedsIds = SeedData.getInstance().getSeedsForCastle(castleId);
for (int sd : seedsIds)
{
seeds.add(new SeedProduction(sd));
@@ -446,7 +446,7 @@ public class CastleManorManager
private List<CropProcure> getNewCropsList(int castleId)
{
final List<CropProcure> crops = new ArrayList<>();
final List<Integer> cropsIds = Manor.getInstance().getCropsForCastle(castleId);
final List<Integer> cropsIds = SeedData.getInstance().getCropsForCastle(castleId);
for (int cr : cropsIds)
{
crops.add(new CropProcure(cr));

View File

@@ -1,464 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.model;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.model.items.Item;
/**
* Service class for manor
* @author l3x
*/
public class Manor
{
private static final Logger LOGGER = Logger.getLogger(Manor.class.getName());
private static Map<Integer, SeedData> _seeds = new ConcurrentHashMap<>();
public Manor()
{
_seeds.clear();
parseData();
}
public List<Integer> getAllCrops()
{
final List<Integer> crops = new ArrayList<>();
for (SeedData seed : _seeds.values())
{
if (!crops.contains(seed.getCrop()) && (seed.getCrop() != 0))
{
crops.add(seed.getCrop());
}
}
return crops;
}
public int getSeedBasicPrice(int seedId)
{
final Item seedItem = ItemTable.getInstance().getTemplate(seedId);
if (seedItem != null)
{
return seedItem.getReferencePrice();
}
return 0;
}
public int getSeedBasicPriceByCrop(int cropId)
{
for (SeedData seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return getSeedBasicPrice(seed.getId());
}
}
return 0;
}
public int getCropBasicPrice(int cropId)
{
final Item cropItem = ItemTable.getInstance().getTemplate(cropId);
if (cropItem != null)
{
return cropItem.getReferencePrice();
}
return 0;
}
public int getMatureCrop(int cropId)
{
for (SeedData seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getMature();
}
}
return 0;
}
/**
* Returns price which lord pays to buy one seed
* @param seedId
* @return seed price
*/
public int getSeedBuyPrice(int seedId)
{
final int buyPrice = getSeedBasicPrice(seedId) / 10;
return buyPrice > 0 ? buyPrice : 1;
}
public int getSeedMinLevel(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel() - 5;
}
return -1;
}
public int getSeedMaxLevel(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel() + 5;
}
return -1;
}
public int getSeedLevelByCrop(int cropId)
{
for (SeedData seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getLevel();
}
}
return 0;
}
public int getSeedLevel(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getLevel();
}
return -1;
}
public boolean isAlternative(int seedId)
{
for (SeedData seed : _seeds.values())
{
if (seed.getId() == seedId)
{
return seed.isAlternative();
}
}
return false;
}
public int getCropType(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getCrop();
}
return -1;
}
public synchronized int getRewardItem(int cropId, int type)
{
for (SeedData seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getReward(type); // there can be several seeds with same crop, but reward should be the same for all
}
}
return -1;
}
public synchronized int getRewardItemBySeed(int seedId, int type)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getReward(type);
}
return 0;
}
/**
* Return all crops which can be purchased by given castle
* @param castleId
* @return
*/
public List<Integer> getCropsForCastle(int castleId)
{
final List<Integer> crops = new ArrayList<>();
for (SeedData seed : _seeds.values())
{
if ((seed.getManorId() == castleId) && !crops.contains(seed.getCrop()))
{
crops.add(seed.getCrop());
}
}
return crops;
}
/**
* Return list of seed ids, which belongs to castle with given id
* @param castleId - id of the castle
* @return seedIds - list of seed ids
*/
public List<Integer> getSeedsForCastle(int castleId)
{
final List<Integer> seedsID = new ArrayList<>();
for (SeedData seed : _seeds.values())
{
if ((seed.getManorId() == castleId) && !seedsID.contains(seed.getId()))
{
seedsID.add(seed.getId());
}
}
return seedsID;
}
/**
* Returns castle id where seed can be sowned<br>
* @param seedId
* @return castleId
*/
public int getCastleIdForSeed(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getManorId();
}
return 0;
}
public int getSeedSaleLimit(int seedId)
{
final SeedData seed = _seeds.get(seedId);
if (seed != null)
{
return seed.getSeedLimit();
}
return 0;
}
public int getCropPuchaseLimit(int cropId)
{
for (SeedData seed : _seeds.values())
{
if (seed.getCrop() == cropId)
{
return seed.getCropLimit();
}
}
return 0;
}
private class SeedData
{
private int _id;
private final int _level; // seed level
private final int _crop; // crop type
private final int _mature; // mature crop type
private int _type1;
private int _type2;
private int _manorId; // id of manor (castle id) where seed can be farmed
private int _isAlternative;
private int _limitSeeds;
private int _limitCrops;
public SeedData(int level, int crop, int mature)
{
_level = level;
_crop = crop;
_mature = mature;
}
public void setData(int id, int t1, int t2, int manorId, int isAlt, int lim1, int lim2)
{
_id = id;
_type1 = t1;
_type2 = t2;
_manorId = manorId;
_isAlternative = isAlt;
_limitSeeds = lim1;
_limitCrops = lim2;
}
public int getManorId()
{
return _manorId;
}
public int getId()
{
return _id;
}
public int getCrop()
{
return _crop;
}
public int getMature()
{
return _mature;
}
public int getReward(int type)
{
return type == 1 ? _type1 : _type2;
}
public int getLevel()
{
return _level;
}
public boolean isAlternative()
{
return _isAlternative == 1;
}
public int getSeedLimit()
{
return _limitSeeds * Config.RATE_DROP_MANOR;
}
public int getCropLimit()
{
return _limitCrops * Config.RATE_DROP_MANOR;
}
}
private void parseData()
{
FileReader reader = null;
BufferedReader buff = null;
LineNumberReader lnr = null;
try
{
final File seedData = new File(Config.DATAPACK_ROOT, "data/csv/seeds.csv");
reader = new FileReader(seedData);
buff = new BufferedReader(reader);
lnr = new LineNumberReader(buff);
String line = null;
while ((line = lnr.readLine()) != null)
{
if ((line.trim().length() == 0) || line.startsWith("#"))
{
continue;
}
final SeedData seed = parseList(line);
_seeds.put(seed.getId(), seed);
}
LOGGER.info("ManorManager: Loaded " + _seeds.size() + " seeds");
}
catch (FileNotFoundException e)
{
LOGGER.info("seeds.csv is missing in data csv folder");
}
catch (Exception e)
{
LOGGER.info("error while loading seeds: " + e.getMessage());
}
finally
{
if (lnr != null)
{
try
{
lnr.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with Manor: " + e1);
}
}
if (buff != null)
{
try
{
buff.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with Manor: " + e1);
}
}
if (reader != null)
{
try
{
reader.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with Manor: " + e1);
}
}
}
}
private SeedData parseList(String line)
{
final StringTokenizer st = new StringTokenizer(line, ";");
final int seedId = Integer.parseInt(st.nextToken()); // seed id
final int level = Integer.parseInt(st.nextToken()); // seed level
final int cropId = Integer.parseInt(st.nextToken()); // crop id
final int matureId = Integer.parseInt(st.nextToken()); // mature crop id
final int type1R = Integer.parseInt(st.nextToken()); // type I reward
final int type2R = Integer.parseInt(st.nextToken()); // type II reward
final int manorId = Integer.parseInt(st.nextToken()); // id of manor, where seed can be farmed
final int isAlt = Integer.parseInt(st.nextToken()); // alternative seed
final int limitSeeds = Integer.parseInt(st.nextToken()); // limit for seeds
final int limitCrops = Integer.parseInt(st.nextToken()); // limit for crops
final SeedData seed = new SeedData(level, cropId, matureId);
seed.setData(seedId, type1R, type2R, manorId, isAlt, limitSeeds, limitCrops);
return seed;
}
public static Manor getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final Manor INSTANCE = new Manor();
}
}

View File

@@ -32,11 +32,11 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.ai.FortSiegeGuardAI;
import org.l2jmobius.gameserver.ai.SiegeGuardAI;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DropCategory;
import org.l2jmobius.gameserver.model.DropData;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.Party;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.instance.FolkInstance;
@@ -3157,7 +3157,7 @@ public class Attackable extends NpcInstance
}
final int diff = getLevel() - (Manor.getInstance().getSeedLevel(_seedType) - 5);
final int diff = getLevel() - (SeedData.getInstance().getSeedLevel(_seedType) - 5);
// hi-lvl mobs bonus
if (diff > 0)
@@ -3167,7 +3167,7 @@ public class Attackable extends NpcInstance
final List<RewardItem> harvested = new ArrayList<>();
harvested.add(new RewardItem(Manor.getInstance().getCropType(_seedType), count * Config.RATE_DROP_MANOR));
harvested.add(new RewardItem(SeedData.getInstance().getCropType(_seedType), count * Config.RATE_DROP_MANOR));
_harvestItems = harvested.toArray(new RewardItem[harvested.size()]);
}

View File

@@ -31,12 +31,12 @@ import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.SeedProduction;
import org.l2jmobius.gameserver.instancemanager.CrownManager;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
@@ -870,7 +870,7 @@ public class Castle
{
for (SeedProduction seed : production)
{
total += Manor.getInstance().getSeedBuyPrice(seed.getId()) * seed.getStartProduce();
total += SeedData.getInstance().getSeedBuyPrice(seed.getId()) * seed.getStartProduce();
}
}

View File

@@ -0,0 +1,95 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.model.holders;
import org.l2jmobius.Config;
/**
* @author Mobius
*/
public class SeedDataHolder
{
private final int _id;
private final int _level; // seed level
private final int _crop; // crop type
private final int _mature; // mature crop type
private final int _type1;
private final int _type2;
private final int _manorId; // id of manor (castle id) where seed can be farmed
private final boolean _isAlternative;
private final int _limitSeeds;
private final int _limitCrops;
public SeedDataHolder(int id, int level, int crop, int mature, int type1, int type2, int manorId, boolean isAlternative, int limitSeeds, int limitCrops)
{
_id = id;
_level = level;
_crop = crop;
_mature = mature;
_type1 = type1;
_type2 = type2;
_manorId = manorId;
_isAlternative = isAlternative;
_limitSeeds = limitSeeds;
_limitCrops = limitCrops;
}
public int getManorId()
{
return _manorId;
}
public int getId()
{
return _id;
}
public int getCrop()
{
return _crop;
}
public int getMature()
{
return _mature;
}
public int getReward(int type)
{
return type == 1 ? _type1 : _type2;
}
public int getLevel()
{
return _level;
}
public boolean isAlternative()
{
return _isAlternative;
}
public int getSeedLimit()
{
return _limitSeeds * Config.RATE_DROP_MANOR;
}
public int getCropLimit()
{
return _limitCrops * Config.RATE_DROP_MANOR;
}
}

View File

@@ -21,9 +21,9 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.actor.instance.ManorManagerInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Item;
@@ -132,7 +132,7 @@ public class RequestBuyProcure extends GameClientPacket
return;
}
final Item template = ItemTable.getInstance().getTemplate(Manor.getInstance().getRewardItem(itemId, manor.getCastle().getCrop(itemId, CastleManorManager.PERIOD_CURRENT).getReward()));
final Item template = ItemTable.getInstance().getTemplate(SeedData.getInstance().getRewardItem(itemId, manor.getCastle().getCrop(itemId, CastleManorManager.PERIOD_CURRENT).getReward()));
weight += count * template.getWeight();
if (!template.isStackable())
@@ -171,7 +171,7 @@ public class RequestBuyProcure extends GameClientPacket
count = 0;
}
final int rewradItemId = Manor.getInstance().getRewardItem(itemId, manor.getCastle().getCrop(itemId, CastleManorManager.PERIOD_CURRENT).getReward());
final int rewradItemId = SeedData.getInstance().getRewardItem(itemId, manor.getCastle().getCrop(itemId, CastleManorManager.PERIOD_CURRENT).getReward());
int rewradItemCount = 1; // Manor.getInstance().getRewardAmount(itemId, manor.getCastle().getCropReward(itemId));

View File

@@ -18,10 +18,10 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.ManorManagerInstance;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
@@ -136,7 +136,7 @@ public class RequestProcureCropList extends GameClientPacket
try
{
final CropProcure crop = CastleManager.getInstance().getCastleById(manorId).getCrop(itemId, CastleManorManager.PERIOD_CURRENT);
final int rewardItemId = Manor.getInstance().getRewardItem(itemId, crop.getReward());
final int rewardItemId = SeedData.getInstance().getRewardItem(itemId, crop.getReward());
final Item template = ItemTable.getInstance().getTemplate(rewardItemId);
weight += count * template.getWeight();
@@ -203,14 +203,14 @@ public class RequestProcureCropList extends GameClientPacket
int fee = 0; // fee for selling to other manors
final int rewardItem = Manor.getInstance().getRewardItem(cropId, crop.getReward());
final int rewardItem = SeedData.getInstance().getRewardItem(cropId, crop.getReward());
if (count > crop.getAmount())
{
continue;
}
final int sellPrice = count * Manor.getInstance().getCropBasicPrice(cropId);
final int sellPrice = count * SeedData.getInstance().getCropBasicPrice(cropId);
final int rewardPrice = ItemTable.getInstance().getTemplate(rewardItem).getReferencePrice();
if (rewardPrice == 0)

View File

@@ -19,8 +19,8 @@ package org.l2jmobius.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.model.Manor;
/**
* Format: ch cddd[ddddcdcdcd] c - id (0xFE) h - sub id (0x1D) c d - manor id d d - size [ d - crop id d - residual buy d - start buy d - buy price c - reward type d - seed level c - reward 1 items d - reward 1 item id c - reward 2 items d - reward 2 item id ]
@@ -58,11 +58,11 @@ public class ExShowCropInfo extends GameServerPacket
writeD(crop.getStartAmount()); // Buy
writeD(crop.getPrice()); // Buy price
writeC(crop.getReward()); // Reward
writeD(Manor.getInstance().getSeedLevelByCrop(crop.getId())); // Seed Level
writeD(SeedData.getInstance().getSeedLevelByCrop(crop.getId())); // Seed Level
writeC(1); // rewrad 1 Type
writeD(Manor.getInstance().getRewardItem(crop.getId(), 1)); // Rewrad 1 Type Item Id
writeD(SeedData.getInstance().getRewardItem(crop.getId(), 1)); // Rewrad 1 Type Item Id
writeC(1); // rewrad 2 Type
writeD(Manor.getInstance().getRewardItem(crop.getId(), 2)); // Rewrad 2 Type Item Id
writeD(SeedData.getInstance().getRewardItem(crop.getId(), 2)); // Rewrad 2 Type Item Id
}
}
}

View File

@@ -18,10 +18,10 @@ package org.l2jmobius.gameserver.network.serverpackets;
import java.util.List;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.entity.siege.Castle;
/**
@@ -44,20 +44,20 @@ public class ExShowCropSetting extends GameServerPacket
{
_manorId = manorId;
final Castle c = CastleManager.getInstance().getCastleById(_manorId);
final List<Integer> crops = Manor.getInstance().getCropsForCastle(_manorId);
final List<Integer> crops = SeedData.getInstance().getCropsForCastle(_manorId);
_count = crops.size();
_cropData = new int[_count * 14];
int i = 0;
for (int cr : crops)
{
_cropData[(i * 14) + 0] = cr;
_cropData[(i * 14) + 1] = Manor.getInstance().getSeedLevelByCrop(cr);
_cropData[(i * 14) + 2] = Manor.getInstance().getRewardItem(cr, 1);
_cropData[(i * 14) + 3] = Manor.getInstance().getRewardItem(cr, 2);
_cropData[(i * 14) + 4] = Manor.getInstance().getCropPuchaseLimit(cr);
_cropData[(i * 14) + 1] = SeedData.getInstance().getSeedLevelByCrop(cr);
_cropData[(i * 14) + 2] = SeedData.getInstance().getRewardItem(cr, 1);
_cropData[(i * 14) + 3] = SeedData.getInstance().getRewardItem(cr, 2);
_cropData[(i * 14) + 4] = SeedData.getInstance().getCropPuchaseLimit(cr);
_cropData[(i * 14) + 5] = 0; // Looks like not used
_cropData[(i * 14) + 6] = (Manor.getInstance().getCropBasicPrice(cr) * 60) / 100;
_cropData[(i * 14) + 7] = Manor.getInstance().getCropBasicPrice(cr) * 10;
_cropData[(i * 14) + 6] = (SeedData.getInstance().getCropBasicPrice(cr) * 60) / 100;
_cropData[(i * 14) + 7] = SeedData.getInstance().getCropBasicPrice(cr) * 10;
CropProcure cropPr = c.getCrop(cr, CastleManorManager.PERIOD_CURRENT);
if (cropPr != null)
{

View File

@@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.network.serverpackets;
import java.util.List;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
/**
* format(packet 0xFE) ch cd [ddddcdcd] c - id h - sub id c d - size [ d - level d - seed price d - seed level d - crop price c d - reward 1 id c d - reward 2 id ]
@@ -30,7 +30,7 @@ public class ExShowManorDefaultInfo extends GameServerPacket
public ExShowManorDefaultInfo()
{
_crops = Manor.getInstance().getAllCrops();
_crops = SeedData.getInstance().getAllCrops();
}
@Override
@@ -43,13 +43,13 @@ public class ExShowManorDefaultInfo extends GameServerPacket
for (int cropId : _crops)
{
writeD(cropId); // crop Id
writeD(Manor.getInstance().getSeedLevelByCrop(cropId)); // level
writeD(Manor.getInstance().getSeedBasicPriceByCrop(cropId)); // seed price
writeD(Manor.getInstance().getCropBasicPrice(cropId)); // crop price
writeD(SeedData.getInstance().getSeedLevelByCrop(cropId)); // level
writeD(SeedData.getInstance().getSeedBasicPriceByCrop(cropId)); // seed price
writeD(SeedData.getInstance().getCropBasicPrice(cropId)); // crop price
writeC(1); // rewrad 1 Type
writeD(Manor.getInstance().getRewardItem(cropId, 1)); // Rewrad 1 Type Item Id
writeD(SeedData.getInstance().getRewardItem(cropId, 1)); // Rewrad 1 Type Item Id
writeC(1); // rewrad 2 Type
writeD(Manor.getInstance().getRewardItem(cropId, 2)); // Rewrad 2 Type Item Id
writeD(SeedData.getInstance().getRewardItem(cropId, 2)); // Rewrad 2 Type Item Id
}
}
}

View File

@@ -19,8 +19,8 @@ package org.l2jmobius.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.SeedProduction;
import org.l2jmobius.gameserver.model.Manor;
/**
* format(packet 0xFE) ch ddd [dddddcdcd] c - id h - sub id d - manor id d d - size [ d - seed id d - left to buy d - started amount d - sell price d - seed level c d - reward 1 id c d - reward 2 id ]
@@ -56,11 +56,11 @@ public class ExShowSeedInfo extends GameServerPacket
writeD(seed.getCanProduce()); // Left to buy
writeD(seed.getStartProduce()); // Started amount
writeD(seed.getPrice()); // Sell Price
writeD(Manor.getInstance().getSeedLevel(seed.getId())); // Seed Level
writeD(SeedData.getInstance().getSeedLevel(seed.getId())); // Seed Level
writeC(1); // reward 1 Type
writeD(Manor.getInstance().getRewardItemBySeed(seed.getId(), 1)); // Reward 1 Type Item Id
writeD(SeedData.getInstance().getRewardItemBySeed(seed.getId(), 1)); // Reward 1 Type Item Id
writeC(1); // reward 2 Type
writeD(Manor.getInstance().getRewardItemBySeed(seed.getId(), 2)); // Reward 2 Type Item Id
writeD(SeedData.getInstance().getRewardItemBySeed(seed.getId(), 2)); // Reward 2 Type Item Id
}
}
}

View File

@@ -18,10 +18,10 @@ package org.l2jmobius.gameserver.network.serverpackets;
import java.util.List;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.SeedProduction;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.entity.siege.Castle;
/**
@@ -43,20 +43,20 @@ public class ExShowSeedSetting extends GameServerPacket
{
_manorId = manorId;
final Castle c = CastleManager.getInstance().getCastleById(_manorId);
final List<Integer> seeds = Manor.getInstance().getSeedsForCastle(_manorId);
final List<Integer> seeds = SeedData.getInstance().getSeedsForCastle(_manorId);
_count = seeds.size();
_seedData = new int[_count * 12];
int i = 0;
for (int s : seeds)
{
_seedData[(i * 12) + 0] = s;
_seedData[(i * 12) + 1] = Manor.getInstance().getSeedLevel(s);
_seedData[(i * 12) + 2] = Manor.getInstance().getRewardItemBySeed(s, 1);
_seedData[(i * 12) + 3] = Manor.getInstance().getRewardItemBySeed(s, 2);
_seedData[(i * 12) + 4] = Manor.getInstance().getSeedSaleLimit(s);
_seedData[(i * 12) + 5] = Manor.getInstance().getSeedBuyPrice(s);
_seedData[(i * 12) + 6] = (Manor.getInstance().getSeedBasicPrice(s) * 60) / 100;
_seedData[(i * 12) + 7] = Manor.getInstance().getSeedBasicPrice(s) * 10;
_seedData[(i * 12) + 1] = SeedData.getInstance().getSeedLevel(s);
_seedData[(i * 12) + 2] = SeedData.getInstance().getRewardItemBySeed(s, 1);
_seedData[(i * 12) + 3] = SeedData.getInstance().getRewardItemBySeed(s, 2);
_seedData[(i * 12) + 4] = SeedData.getInstance().getSeedSaleLimit(s);
_seedData[(i * 12) + 5] = SeedData.getInstance().getSeedBuyPrice(s);
_seedData[(i * 12) + 6] = (SeedData.getInstance().getSeedBasicPrice(s) * 60) / 100;
_seedData[(i * 12) + 7] = SeedData.getInstance().getSeedBasicPrice(s) * 10;
SeedProduction seedPr = c.getSeed(s, CastleManorManager.PERIOD_CURRENT);
if (seedPr != null)
{

View File

@@ -20,8 +20,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.l2jmobius.gameserver.datatables.xml.SeedData;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@@ -42,7 +42,7 @@ public class ExShowSellCropList extends GameServerPacket
_castleCrops = new HashMap<>();
_cropsItems = new HashMap<>();
final List<Integer> allCrops = Manor.getInstance().getAllCrops();
final List<Integer> allCrops = SeedData.getInstance().getAllCrops();
for (int cropId : allCrops)
{
final ItemInstance item = player.getInventory().getItemByItemId(cropId);
@@ -80,11 +80,11 @@ public class ExShowSellCropList extends GameServerPacket
{
writeD(item.getObjectId()); // Object id
writeD(item.getItemId()); // crop id
writeD(Manor.getInstance().getSeedLevelByCrop(item.getItemId())); // seed level
writeD(SeedData.getInstance().getSeedLevelByCrop(item.getItemId())); // seed level
writeC(1);
writeD(Manor.getInstance().getRewardItem(item.getItemId(), 1)); // reward 1 id
writeD(SeedData.getInstance().getRewardItem(item.getItemId(), 1)); // reward 1 id
writeC(1);
writeD(Manor.getInstance().getRewardItem(item.getItemId(), 2)); // reward 2 id
writeD(SeedData.getInstance().getRewardItem(item.getItemId(), 2)); // reward 2 id
if (_castleCrops.containsKey(item.getItemId()))
{