Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/config/server.properties =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/config/server.properties (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/config/server.properties (working copy) @@ -112,6 +112,11 @@ PlayerRateDropEquip = 25 PlayerRateDropEquipWeapon = 5 +# Multiplier for pet rate control (with lower values pet will grow slower) +PetXpRate = 1 +# Pet Food Rate control, 1 food = PetFoodRate +PetFoodRate = 1 + # Karma Drop Rate control, values are the percent values KarmaDropLimit = 10 KarmaRateDrop = 70 Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/Config.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/Config.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/Config.java (working copy) @@ -234,6 +234,10 @@ public static int PLAYER_RATE_DROP_ITEM; public static int PLAYER_RATE_DROP_EQUIP; public static int PLAYER_RATE_DROP_EQUIP_WEAPON; + + /** Pet Rates (Multipliers) */ + public static float PET_XP_RATE; + public static int PET_FOOD_RATE; /** Karma Drop Rate control */ public static int KARMA_DROP_LIMIT; @@ -572,6 +576,9 @@ PLAYER_RATE_DROP_ITEM = Integer.parseInt(serverSettings.getProperty("PlayerRateDropItem", "70")); PLAYER_RATE_DROP_EQUIP = Integer.parseInt(serverSettings.getProperty("PlayerRateDropEquip", "25")); PLAYER_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(serverSettings.getProperty("PlayerRateDropEquipWeapon", "5")); + + PET_XP_RATE = Float.parseFloat(serverSettings.getProperty("PetXpRate", "0.5")); + PET_FOOD_RATE = Integer.parseInt(serverSettings.getProperty("PetFoodRate", "100")); KARMA_DROP_LIMIT = Integer.parseInt(serverSettings.getProperty("KarmaDropLimit", "10")); KARMA_RATE_DROP = Integer.parseInt(serverSettings.getProperty("KarmaRateDrop", "70")); Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestPetUseItem.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestPetUseItem.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestPetUseItem.java (working copy) @@ -88,23 +88,32 @@ return; } } - else if ((itemId == 2515) || (itemId == 4038) || (itemId == 5168)) + else if ((itemId == 2515) || (itemId == 4038) || (itemId == 5168) || (itemId == 6316) || (itemId == 7582)) { if (pet.getNpcId() == 12077 && itemId == 2515) { - feed(activeChar,pet, item); + feed(activeChar, pet, item); return; } else if ((pet.getNpcId() >= 12311 && pet.getNpcId() <= 12313) && itemId == 4038) { - feed(activeChar,pet, item); + feed(activeChar, pet, item); return; } else if ((pet.getNpcId() >= 12526 && pet.getNpcId() <= 12528) && itemId == 5168) { - feed(activeChar,pet, item); + feed(activeChar, pet, item); return; } + else if (pet.getNpcId() == 12621 && itemId == 6316) + { + feed(activeChar, pet, item); + return; + } + else if ((pet.getNpcId() >= 12780 && pet.getNpcId() <= 12780) && itemId == 7582) + { + feed(activeChar, pet, item); + } } IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getItemId()); if (handler != null) @@ -148,26 +157,42 @@ } } } - private void feed(L2PcInstance player,L2PetInstance pet, L2ItemInstance item) + + /** + * When fed by owner double click on food from pet inventory.

+ * + * Caution : 1 food = 100 points of currentFed

+ */ + private void feed(L2PcInstance player, L2PetInstance pet, L2ItemInstance item) { - - if (pet.getMaxFed() <= pet.getCurrentFed() + item.getCount()) - { - //Not exists message to send in "systemmsg-e.txt" - return; - } - - if (pet.getCurrentFed() <= item.getCount()) + final int items = item.getCount(); + final int curFed = pet.getCurrentFed(); + final int maxFed = pet.getMaxFed(); + + // if it's not fed 100% + if ( curFed < maxFed ) { - pet.destroyItem("Feed", item.getObjectId(), item.getCount(), pet, false); - pet.setCurrentFed(pet.getCurrentFed() + item.getCount()); + final int foodNeeded = (int)( ( maxFed - curFed ) / Config.PET_FOOD_RATE); + + // if pet has food in inventory + if ( items > 0 ) + { + // if pet has more food than it needs + if ( items > foodNeeded ) + { + // consume only the quantity it needs + pet.setCurrentFed( curFed + (int)(foodNeeded * Config.PET_FOOD_RATE) ); + pet.destroyItem("Feed", item.getObjectId(), foodNeeded, pet, false); + } + else + { + // consume all food from inventory + pet.setCurrentFed( curFed + (int)(items * Config.PET_FOOD_RATE) ); + pet.destroyItem("Feed", item.getObjectId(), items, pet, false); + } + } + pet.broadcastStatusUpdate(); } - else - { - pet.destroyItem("Feed", item.getObjectId(), pet.getMaxFed() - pet.getCurrentFed(), pet, false); - pet.setCurrentFed(pet.getMaxFed()); - } - pet.broadcastStatusUpdate(); } /* (non-Javadoc) Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestActionUse.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestActionUse.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestActionUse.java (working copy) @@ -32,6 +32,7 @@ import net.sf.l2j.gameserver.model.L2Summon; import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance; import net.sf.l2j.gameserver.model.actor.instance.L2StaticObjectInstance; import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.ChairSit; @@ -121,7 +122,7 @@ break; } case 21: - case 15: + case 15: // pet follow/stop { L2Summon pet = activeChar.getPet(); if (pet != null) @@ -129,10 +130,10 @@ break; } case 22: - case 16: + case 16: // pet attack { L2Object target = activeChar.getTarget(); - if (target != null && activeChar.getPet()!=null && activeChar.getPet()!= target && activeChar != target) + if (target != null && activeChar.getPet()!= null && activeChar.getPet()!= target && activeChar != target) { if ( activeChar.getAccessLevel() < Config.GM_PEACEATTACK && @@ -145,7 +146,7 @@ if (target.isAutoAttackable(activeChar) || _ctrlPressed) { - //activeChar.getPet().startAttack((L2Character)activeChar.getTarget()); + // Siege Golem (12251) if ((activeChar.getPet().getNpcId() != 12251) || (activeChar.getTarget() instanceof L2DoorInstance)) activeChar.getPet().getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, activeChar.getTarget()); } @@ -153,7 +154,7 @@ break; } case 23: - case 17: + case 17: // pet - cancel action { L2Summon pet = activeChar.getPet(); if (pet != null) @@ -165,7 +166,7 @@ _log.warning("unhandled action type 18"); break; } - case 19: + case 19: // pet unsummon { if (activeChar.getPet()!=null) { @@ -177,9 +178,22 @@ } else { - activeChar.getPet().unSummon(activeChar); + // if it is a pet and not a summon + if (activeChar.getPet().getSummonType() == 2) + { + L2PetInstance pet = (L2PetInstance)activeChar.getPet(); + // if the pet is more than 40% fed + if ( pet.getCurrentFed() > (pet.getMaxFed() * 0.40) ) + { + activeChar.getPet().unSummon(activeChar); + } + else + { + activeChar.sendMessage("Your pet is not fed enough. Cannot unsummon."); + } + } + } } - } break; } case 20: @@ -187,7 +201,7 @@ _log.warning("unhandled action type 20"); break; } - case 38: + case 38: // pet mount { L2Summon pet = activeChar.getPet(); Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java (working copy) @@ -27,6 +27,7 @@ import net.sf.l2j.Config; import net.sf.l2j.L2DatabaseFactory; import net.sf.l2j.gameserver.ClientScheduler; +import net.sf.l2j.gameserver.SkillTable; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.idfactory.IdFactory; import net.sf.l2j.gameserver.model.actor.stat.PetStat; @@ -45,14 +46,17 @@ import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.InventoryUpdate; import net.sf.l2j.gameserver.serverpackets.ItemList; +import net.sf.l2j.gameserver.serverpackets.MagicSkillUser; import net.sf.l2j.gameserver.serverpackets.MyTargetSelected; import net.sf.l2j.gameserver.serverpackets.PetInventoryUpdate; import net.sf.l2j.gameserver.serverpackets.PetItemList; import net.sf.l2j.gameserver.serverpackets.PetStatusShow; +import net.sf.l2j.gameserver.serverpackets.SetupGauge; import net.sf.l2j.gameserver.serverpackets.PetStatusUpdate; import net.sf.l2j.gameserver.serverpackets.StatusUpdate; import net.sf.l2j.gameserver.serverpackets.StopMove; import net.sf.l2j.gameserver.serverpackets.SystemMessage; +import net.sf.l2j.gameserver.serverpackets.SocialAction; import net.sf.l2j.gameserver.taskmanager.DecayTaskManager; import net.sf.l2j.gameserver.templates.L2NpcTemplate; import net.sf.l2j.gameserver.templates.L2Weapon; @@ -77,6 +81,9 @@ private boolean _respawned; private Future _feedTask; private boolean _mountable; + + private int _feedTime; + private boolean _feedMode; private L2PetData _Data; public final L2PetData getPetData() @@ -86,6 +93,16 @@ } public final void setPetData(L2PetData value) { _Data = value; } + /** + * Manage Feeding Task.

+ * + * Actions :
+ *
  • Feed or kill the pet depending on hunger level
  • + *
  • If pet has food in inventory and feed level drops below 55% then consume food from inventory
  • + *
  • Send a broadcastStatusUpdate packet for this L2PetInstance


  • + * + */ + class FeedTask implements Runnable { @@ -93,13 +110,34 @@ { try { - if(getCurrentFed() > 0) + // if pet is attacking + if ( isAttackingNow() ) + { + // if its not already on battleFeed mode + if ( !_feedMode ) + { + startFeed( true ); //switching to battle feed + } + } + else + { + startFeed( false ); // normal feed + } + + if ( getCurrentFed() > 0 ) + { + // eat setCurrentFed(getCurrentFed() - 1); + } else { + // go back to pet control item, or simply said, unsummon it lol setCurrentFed(0); - doDie(null); + stopFeed(); + unSummon(getOwner()); + getOwner().sendMessage("Your pet is too hungry to stay summoned."); } + L2ItemInstance food = null; switch (getTemplate().npcId) { @@ -131,6 +169,18 @@ case 12528: food = getInventory().getItemByItemId(5168); break; + // Baby buffalo + case 12780: + food = getInventory().getItemByItemId(7582); + break; + // Baby kookaburra + case 12781: + food = getInventory().getItemByItemId(7582); + break; + // Baby cougar + case 12782: + food = getInventory().getItemByItemId(7582); + break; // unknown npc id.. should never happen default: return; @@ -138,7 +188,7 @@ if(food != null && getCurrentFed() < (0.55 * getMaxFed())) { if(destroyItem("Feed", food.getObjectId(), 1, null, false)) - setCurrentFed(getCurrentFed() + 1); + setCurrentFed( getCurrentFed() + (int)(1 * Config.PET_FOOD_RATE) ); } broadcastStatusUpdate(); } @@ -656,20 +706,27 @@ } } - public synchronized void startFeed() + public synchronized void startFeed( boolean battleFeed ) { + // stop feeding task if its active + if (_feedTask != null) { stopFeed(); } + if (_feedTask == null && !isDead()) { - if (Config.DEBUG) _log.fine("Feed task started"); - int time; - time = getStat().getFeedNormal(); - //time = getStat().getFeedBattle(); - if (time >= 0) + if (battleFeed) { - _log.warning("Pet Feed Normal Time is 0. Changing time to 1 to bypass divide by 0"); - time = 1; + _feedMode = true; + _feedTime = _Data.getPetFeedBattle(); } - _feedTask = ClientScheduler.getInstance().scheduleMedAtFixedRate(new FeedTask(), 60000/time, 60000/time); + else + { + _feedMode = false; + _feedTime = _Data.getPetFeedNormal(); + } + // pet feed time must be different than 0. Changing time to bypass divide by 0 + if (_feedTime <= 0) { _feedTime = 1; } + + _feedTask = ClientScheduler.getInstance().scheduleMedAtFixedRate(new FeedTask(), 60000/_feedTime, 60000/_feedTime); } } @@ -693,8 +750,6 @@ getStat().addExp(-lostExp); } - - public void addExpAndSp(int addToExp, int addToSp) { getStat().addExpAndSp(addToExp, addToSp); } public int getExpForThisLevel() { return getStat().getExpForLevel(getLevel()); } public int getExpForNextLevel() { return getStat().getExpForLevel(getLevel() + 1); } @@ -702,6 +757,12 @@ public void reduceCurrentHp(double value, L2Character attacker, boolean awake) { getStatus().reduceHp(value, attacker, awake); } public final int getLevel() { return getStat().getLevel(); } public int getMaxFed() { return getStat().getMaxFeed(); } + public int getAccuracy() { return getStat().getAccuracy(); } + public int getCriticalHit(L2Character target, L2Skill skill) { return getStat().getCriticalHit(target, skill); } + public int getEvasionRate(L2Character target) { return getStat().getEvasionRate(target); } + public int getRunSpeed() { return getStat().getRunSpeed(); } + public int getPAtkSpd() { return getStat().getPAtkSpd(); } + public int getMAtkSpd() { return getStat().getMAtkSpd(); } public int getMAtk(L2Character target, L2Skill skill) { return getStat().getMAtk(target, skill); } public int getMDef(L2Character target, L2Skill skill) { return getStat().getMDef(target, skill); } public int getPAtk(L2Character target) { return getStat().getPAtk(target); } Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/PetStat.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/PetStat.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/PetStat.java (working copy) @@ -69,7 +69,7 @@ return levelIncreased; } - public final int getExpForLevel(int level) { return L2PetDataTable.getInstance().getPetData(getActiveChar().getNpcId(), level).getPetExp(); } + public final int getExpForLevel(int level) { return L2PetDataTable.getInstance().getPetData(getActiveChar().getNpcId(), level).getPetMaxExp(); } // ========================================================= // Method - Private @@ -90,14 +90,14 @@ getActiveChar().setPetData(L2PetDataTable.getInstance().getPetData(getActiveChar().getTemplate().npcId, getLevel())); - getActiveChar().startFeed(); + getActiveChar().startFeed( false ); } public final int getMaxFeed() { return (int)getActiveChar().getPetData().getPetMaxFeed(); } - public int getMaxHp() { return (int)calcStat(Stats.MAX_HP, getActiveChar().getPetData().getPetHP(), null, null); } + public int getMaxHp() { return (int)calcStat(Stats.MAX_HP, getActiveChar().getPetData().getPetMaxHP(), null, null); } - public int getMaxMp() { return (int)calcStat(Stats.MAX_MP, getActiveChar().getPetData().getPetMP(), null, null); } + public int getMaxMp() { return (int)calcStat(Stats.MAX_MP, getActiveChar().getPetData().getPetMaxMP(), null, null); } public int getMAtk(L2Character target, L2Skill skill) { @@ -155,6 +155,14 @@ } public int getPAtk(L2Character target) { return (int)calcStat(Stats.POWER_ATTACK, getActiveChar().getPetData().getPetPAtk(), target, null); } + public int getPDef(L2Character target) { return (int)calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetData().getPetPDef(), target, null); } + public int getAccuracy() { return getActiveChar().getPetData().getPetAccuracy(); } + public int getCriticalHit(L2Character target, L2Skill skill) { return getActiveChar().getPetData().getPetCritical(); } + public int getEvasionRate(L2Character target) { return getActiveChar().getPetData().getPetEvasion(); } + public int getRunSpeed() { return getActiveChar().getPetData().getPetSpeed(); } + public int getPAtkSpd() { return getActiveChar().getPetData().getPetAtkSpeed(); } + public int getMAtkSpd() { return getActiveChar().getPetData().getPetCastSpeed(); } - public int getPDef(L2Character target) { return (int)calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetData().getPetPDef(), target, null); } + + } Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java (working copy) @@ -94,7 +94,7 @@ // ========================================================= // Property - Public /** Return the Accuracy (base+modifier) of the L2Character in function of the Weapon Expertise Penalty. */ - public final int getAccuracy() { return (int)(calcStat(Stats.ACCURACY_COMBAT, 0, null, null) / getActiveChar().getWeaponExpertisePenalty()); } + public int getAccuracy() { return (int)(calcStat(Stats.ACCURACY_COMBAT, 0, null, null) / getActiveChar().getWeaponExpertisePenalty()); } public L2Character getActiveChar() { @@ -115,13 +115,13 @@ public final double getCriticalDmg(L2Character target, double init) { return calcStat(Stats.CRITICAL_DAMAGE, init, target, null); } /** Return the Critical Hit rate (base+modifier) of the L2Character. */ - public final int getCriticalHit(L2Character target, L2Skill skill) { return (int)calcStat(Stats.CRITICAL_RATE, getActiveChar().getTemplate().baseCritRate, target, skill); } + public int getCriticalHit(L2Character target, L2Skill skill) { return (int)calcStat(Stats.CRITICAL_RATE, getActiveChar().getTemplate().baseCritRate, target, skill); } /** Return the DEX of the L2Character (base+modifier). */ public final int getDEX() { return (int)calcStat(Stats.STAT_DEX, getActiveChar().getTemplate().baseDEX, null, null); } /** Return the Attack Evasion rate (base+modifier) of the L2Character. */ - public final int getEvasionRate(L2Character target) { return (int)(calcStat(Stats.EVASION_RATE, 0, target, null) / getActiveChar().getArmourExpertisePenalty()); } + public int getEvasionRate(L2Character target) { return (int)(calcStat(Stats.EVASION_RATE, 0, target, null) / getActiveChar().getArmourExpertisePenalty()); } public int getExp() { return _Exp; } public void setExp(int value) { _Exp = value; } @@ -192,7 +192,7 @@ } /** Return the MAtk Speed (base+modifier) of the L2Character in function of the Armour Expertise Penalty. */ - public final int getMAtkSpd() + public int getMAtkSpd() { double val = calcStat(Stats.MAGIC_ATTACK_SPEED, getActiveChar().getTemplate().baseMAtkSpd, null, null); val /= getActiveChar().getArmourExpertisePenalty(); @@ -299,7 +299,7 @@ public final double getPAtkPlants(L2Character target) { return calcStat(Stats.PATK_PLANTS, 1, target, null); } /** Return the PAtk Speed (base+modifier) of the L2Character in function of the Armour Expertise Penalty. */ - public final int getPAtkSpd() { return (int)(calcStat(Stats.POWER_ATTACK_SPEED, getActiveChar().getTemplate().basePAtkSpd, null, null) / getActiveChar().getArmourExpertisePenalty()); } + public int getPAtkSpd() { return (int)(calcStat(Stats.POWER_ATTACK_SPEED, getActiveChar().getTemplate().basePAtkSpd, null, null) / getActiveChar().getArmourExpertisePenalty()); } /** Return the PAtk Modifier against undead. */ public final double getPAtkUndead(L2Character target) { return calcStat(Stats.PATK_UNDEAD, 1, target, null); } @@ -315,7 +315,7 @@ public final double getReuseModifier(L2Character target) { return calcStat(Stats.ATK_REUSE, 1, target, null); } /** Return the RunSpeed (base+modifier) of the L2Character in function of the Armour Expertise Penalty. */ - public final int getRunSpeed() + public int getRunSpeed() { // err we should be adding TO the persons run speed // not making it a constant Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetDataTable.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetDataTable.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetDataTable.java (working copy) @@ -20,11 +20,19 @@ import java.util.Collection; import java.util.Map; - +import net.sf.l2j.L2DatabaseFactory; +import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.logging.Logger; import javolution.util.FastMap; public class L2PetDataTable { + protected static Logger _log = Logger.getLogger(L2PetInstance.class.getName()); + + private static final int[] petList = { 12077, 12312, 12313, 12311, 12527, 12528, 12526 }; + private static L2PetDataTable _instance; private static Map> petTable; @@ -43,6 +51,80 @@ petTable = new FastMap>(); } + public void loadPetsData() + { + for (int i = 0; i < petList.length; i++) + { + int pet = petList[i]; + + L2PetData[] petLevelsList = new L2PetData[81]; + + for (int level = 1; level <= 81; level++) + { + + petLevelsList[level - 1] = new L2PetData(); + petLevelsList[level - 1].setPetID(pet); + petLevelsList[level - 1].setPetLevel(level); + + //System.out.println( " " + petLevelsList[level - 1].getPetID() + " - " + petLevelsList[level - 1].getPetLevel() ); + // here starts the SQL thingie + java.sql.Connection conStats = null; + + try + { + conStats = L2DatabaseFactory.getInstance().getConnection(); + + PreparedStatement statementStats = conStats.prepareStatement("SELECT expMax, hpMax, mpMax, patk, pdef, matk, mdef, acc, evasion, crit, speed, atk_speed, cast_speed, feedMax, feedbattle, feednormal, loadMax, hpregen, mpregen FROM pets_stats WHERE typeID=? AND level=?"); + + statementStats.setInt(1, pet ); + statementStats.setInt(2, level ); + + ResultSet rsetStats = statementStats.executeQuery(); + + if (!rsetStats.next()) { return; } + + //reading sql + //petLevelsList[level - 1].setPetID(pet); + //petLevelsList[level - 1].setPetLevel(level); + //petLevelsList[level - 1].setPetExp( -1 ); + petLevelsList[level - 1].setPetMaxExp( rsetStats.getInt("expMax") ); + //petLevelsList[level - 1].setPetMaxHP( -1 ); + petLevelsList[level - 1].setPetMaxHP( rsetStats.getInt("hpMax") ); + //petLevelsList[level - 1].setPetMaxMP( -1 ); + petLevelsList[level - 1].setPetMaxMP( rsetStats.getInt("mpMax") ); + petLevelsList[level - 1].setPetPAtk( rsetStats.getInt("patk") ); + petLevelsList[level - 1].setPetPDef( rsetStats.getInt("pdef") ); + petLevelsList[level - 1].setPetMAtk( rsetStats.getInt("matk") ); + petLevelsList[level - 1].setPetMDef( rsetStats.getInt("mdef") ); + petLevelsList[level - 1].setPetAccuracy( rsetStats.getInt("acc") ); + petLevelsList[level - 1].setPetEvasion( rsetStats.getInt("evasion") ); + petLevelsList[level - 1].setPetCritical( rsetStats.getInt("crit") ); + petLevelsList[level - 1].setPetSpeed( rsetStats.getInt("speed") ); + petLevelsList[level - 1].setPetAtkSpeed( rsetStats.getInt("atk_speed") ); + petLevelsList[level - 1].setPetCastSpeed( rsetStats.getInt("cast_speed") ); + //petLevelsList[level - 1].setPetFeed( -1 ); + petLevelsList[level - 1].setPetMaxFeed( rsetStats.getInt("feedMax") ); + petLevelsList[level - 1].setPetFeedNormal( rsetStats.getInt("feednormal") ); + petLevelsList[level - 1].setPetFeedBattle( rsetStats.getInt("feedbattle") ); + //petLevelsList[level - 1].setPetLoad( -1 ); + petLevelsList[level - 1].setPetMaxLoad( rsetStats.getInt("loadMax") ); + petLevelsList[level - 1].setPetRegenHP( rsetStats.getInt("hpregen") ); + petLevelsList[level - 1].setPetRegenMP( rsetStats.getInt("mpregen") ); + + rsetStats.close(); + statementStats.close(); + + } catch (Exception e) { + _log.warning("Could not load pets stats: "+ e); + } finally { + try { conStats.close(); } catch (Exception e) {} + } + } + + L2PetDataTable.getInstance().addPetData(petLevelsList); + } + } + public void addPetData(L2PetData petData) { //System.out.println("looking if hashmap for id "+petData.getPetID()+" created"); @@ -65,7 +147,7 @@ } } - + /* public void addPetData(Collection list) { for (L2PetData petData : list) @@ -82,8 +164,14 @@ //if (petData.getPetLevel() == 35)System.out.println(getPetData(petData.getPetID(), petData.getPetLevel())); //if (list[i].getPetLevel() == 35)System.out.println(list[i].getPetID()+" "+ list[i].getPetLevel()); //if (list[i].getPetLevel() == 35)System.out.println(getPetData(list[i].getPetID(), list[i].getPetLevel()).getPetExp()); + */ + + public void addPetData(L2PetData[] petLevelsList) + { + for (int i = 0; i < petLevelsList.length; i++) + { + addPetData(petLevelsList[i]); } - //System.out.println(getPetData(12311, 35).getPetExp()); } public L2PetData getPetData(int petID, int petLevel) Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetData.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetData.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2PetData.java (working copy) @@ -20,242 +20,220 @@ public class L2PetData { - public static final String PET_MAX_FEED = "MaxFeed"; - public static final String PET_FEED_BATTLE = "FeedBattle"; - public static final String PET_FEED_NORMAL = "FeedNormal"; - public static final String PET_PATK = "PAtk"; - public static final String PET_PDEF = "PDef"; - public static final String PET_MATK = "MAtk"; - public static final String PET_MDEF = "MDef"; - public static final String PET_HP = "HP"; - public static final String PET_MP = "MP"; - public static final String PET_REGEN_HP = "RegenHP"; - public static final String PET_REGEN_MP = "RegenMP"; - public static final String PET_EXP = "Exp"; + public static final String PET_TYPE = "typeID"; + public static final String PET_LEVEL = "level"; +// public static final String PET_EXP = "exp"; + public static final String PET_MAX_EXP = "expMax"; +// public static final String PET_HP = "hp"; + public static final String PET_MAX_HP = "hpMax"; +// public static final String PET_MP = "mp"; + public static final String PET_MAX_MP = "mpMax"; + public static final String PET_PATK = "patk"; + public static final String PET_PDEF = "pdef"; + public static final String PET_MATK = "matk"; + public static final String PET_MDEF = "mdef"; + public static final String PET_ACCURACY = "acc"; + public static final String PET_EVASION = "evasion"; + public static final String PET_CRITICAL = "crit"; + public static final String PET_SPEED = "speed"; + public static final String PET_ATK_SPEED = "atk_speed"; + public static final String PET_CAST_SPEED = "cast_speed"; +// public static final String PET_FEED = "feed"; + public static final String PET_MAX_FEED = "feedMax"; + public static final String PET_FEED_BATTLE = "feedbattle"; + public static final String PET_FEED_NORMAL = "feednormal"; +// public static final String PET_LOAD = "load"; + public static final String PET_MAX_LOAD = "loadMax"; + public static final String PET_REGEN_HP = "hpregen"; + public static final String PET_REGEN_MP = "mpregen"; + private int petID; private int petLevel; +// private int petExp; + private int petMaxExp; +// private int petHP; + private int petMaxHP; +// private int petMP; + private int petMaxMP; + private int petPAtk; + private int petPDef; + private int petMAtk; + private int petMDef; + private int petAccuracy; + private int petEvasion; + private int petCritical; + private int petSpeed; + private int petAtkSpeed; + private int petCastSpeed; +// private int petFeed; private int petMaxFeed; private int petFeedBattle; private int petFeedNormal; - private int petPAtk; - private int petPDef; - private int petMAtk; - private int petMDef; - private int petHP; - private int petMP; + private int petMaxLoad; private int petRegenHP; private int petRegenMP; - private int petExp; public void setStat(String stat, int value) { - if (stat.equalsIgnoreCase(PET_MAX_FEED)) - { - this.setPetMaxFeed(value); - } - else if (stat.equalsIgnoreCase(PET_FEED_BATTLE)) - { - this.setPetFeedBattle(value); - } - else if (stat.equalsIgnoreCase(PET_FEED_NORMAL)) - { - this.setPetFeedNormal(value); - } - else if (stat.equalsIgnoreCase(PET_PATK)) - { - this.setPetPAtk(value); - } - else if (stat.equalsIgnoreCase(PET_PDEF)) - { - this.setPetPDef(value); - } - else if (stat.equalsIgnoreCase(PET_MATK)) - { - this.setPetMAtk(value); - } - else if (stat.equalsIgnoreCase(PET_MDEF)) - { - this.setPetMDef(value); - } - else if (stat.equalsIgnoreCase(PET_HP)) - { - this.setPetHP(value); - } - else if (stat.equalsIgnoreCase(PET_MP)) - { - this.setPetMP(value); - } - else if (stat.equalsIgnoreCase(PET_REGEN_HP)) - { - this.setPetRegenHP(value); - } - else if (stat.equalsIgnoreCase(PET_REGEN_MP)) - { - this.setPetRegenMP(value); - } - else if (stat.equalsIgnoreCase(PET_EXP)) - { - this.setPetExp(value); - } +// if (stat.equalsIgnoreCase(PET_EXP)) { this.setPetExp(value); } + if (stat.equalsIgnoreCase(PET_MAX_EXP)) { this.setPetMaxExp(value); } +// else if (stat.equalsIgnoreCase(PET_HP)) { this.setPetHP(value); } + else if (stat.equalsIgnoreCase(PET_MAX_HP)) { this.setPetMaxHP(value); } +// else if (stat.equalsIgnoreCase(PET_MP)) { this.setPetMP(value); } + else if (stat.equalsIgnoreCase(PET_MAX_MP)) { this.setPetMaxMP(value); } + else if (stat.equalsIgnoreCase(PET_PATK)) { this.setPetPAtk(value); } + else if (stat.equalsIgnoreCase(PET_PDEF)) { this.setPetPDef(value); } + else if (stat.equalsIgnoreCase(PET_MATK)) { this.setPetMAtk(value); } + else if (stat.equalsIgnoreCase(PET_MDEF)) { this.setPetMDef(value); } + else if (stat.equalsIgnoreCase(PET_ACCURACY)) { this.setPetAccuracy(value); } + else if (stat.equalsIgnoreCase(PET_EVASION)) { this.setPetEvasion(value); } + else if (stat.equalsIgnoreCase(PET_CRITICAL)) { this.setPetCritical(value); } + else if (stat.equalsIgnoreCase(PET_SPEED)) { this.setPetSpeed(value); } + else if (stat.equalsIgnoreCase(PET_ATK_SPEED)) { this.setPetAtkSpeed(value); } + else if (stat.equalsIgnoreCase(PET_CAST_SPEED)) { this.setPetCastSpeed(value); } +// else if (stat.equalsIgnoreCase(PET_FEED)) { this.setPetFeed(value); } + else if (stat.equalsIgnoreCase(PET_MAX_FEED)) { this.setPetMaxFeed(value); } + else if (stat.equalsIgnoreCase(PET_FEED_NORMAL)) { this.setPetFeedNormal(value); } + else if (stat.equalsIgnoreCase(PET_FEED_BATTLE)) { this.setPetFeedBattle(value); } +// else if (stat.equalsIgnoreCase(PET_LOAD)) { this.setPetLoad(value); } + else if (stat.equalsIgnoreCase(PET_MAX_LOAD)) { this.setPetMaxLoad(value); } + else if (stat.equalsIgnoreCase(PET_REGEN_HP)) { this.setPetRegenHP(value); } + else if (stat.equalsIgnoreCase(PET_REGEN_MP)) { this.setPetRegenMP(value); } } - public int getPetFeedBattle() - { - return petFeedBattle; - } +// ID + public int getPetID() { return petID; } + public void setPetID(int petID) { this.petID = petID; } + +// Level + public int getPetLevel() { return petLevel; } + public void setPetLevel(int petLevel) { this.petLevel = petLevel; } + +// Exp +// public int getPetExp() { return petExp; } +// public void setPetExp(int petExp) { this.petExp = petExp; } + +// Max Exp + public int getPetMaxExp() { return petMaxExp; } + public void setPetMaxExp(int petMaxExp) { this.petMaxExp = petMaxExp; } + +// HP +// public int getPetHP() { return petHP; } +// public void setPetHP(int petHP) { this.petHP = petHP; } + +// Max HP + public int getPetMaxHP() { return petMaxHP; } + public void setPetMaxHP(int petMaxHP) { this.petMaxHP = petMaxHP; } + +// Mp +// public int getPetMP() { return petMP; } +// public void setPetMP(int petMP) { this.petMP = petMP; } + +// Max Mp + public int getPetMaxMP() { return petMaxMP; } + public void setPetMaxMP(int petMaxMP) { this.petMaxMP = petMaxMP; } + +// PAtk + public int getPetPAtk() { return petPAtk; } + public void setPetPAtk(int petPAtk) { this.petPAtk = petPAtk; } + +// PDef + public int getPetPDef() { return petPDef;} + public void setPetPDef(int petPDef) { this.petPDef = petPDef; } + +// MAtk + public int getPetMAtk(){ return petMAtk; } + public void setPetMAtk(int petMAtk){ this.petMAtk = petMAtk; } + +// MDef + public int getPetMDef() { return petMDef; } + public void setPetMDef(int petMDef) { this.petMDef = petMDef; } + +// Accuracy + public int getPetAccuracy() { return petAccuracy; } + public void setPetAccuracy(int petAccuracy) { this.petAccuracy = petAccuracy; } + +// Evasion + public int getPetEvasion() { return petEvasion; } + public void setPetEvasion(int petEvasion) { this.petEvasion = petEvasion; } + +// Critical + public int getPetCritical() { return petCritical; } + public void setPetCritical(int petCritical) { this.petCritical = petCritical; } + +// Speed + public int getPetSpeed() { return petSpeed; } + public void setPetSpeed(int petSpeed) { this.petSpeed = petSpeed; } + +// Atk Speed + public int getPetAtkSpeed() { return petAtkSpeed; } + public void setPetAtkSpeed(int petAtkSpeed) { this.petAtkSpeed = petAtkSpeed; } + +// Cast Speed + public int getPetCastSpeed() { return petCastSpeed; } + public void setPetCastSpeed(int petCastSpeed) { this.petCastSpeed = petCastSpeed; } + +// Feed +// public int getPetFeed(){ return petFeed; } +// public void setPetFeed(int petFeed) { this.petFeed = petFeed; } + +// MaxFeed + public int getPetMaxFeed(){ return petMaxFeed; } + public void setPetMaxFeed(int petMaxFeed) { this.petMaxFeed = petMaxFeed; } + +// Normal Feed + public int getPetFeedNormal() { return petFeedNormal; } + public void setPetFeedNormal(int petFeedNormal) { this.petFeedNormal = petFeedNormal; } + +// Battle Feed + public int getPetFeedBattle() { return petFeedBattle; } + public void setPetFeedBattle(int petFeedBattle) { this.petFeedBattle = petFeedBattle; } + +// Load +// public int getPetLoad() { return petLoad; } +// public void setPetLoad(int petLoad) { this.petLoad = petLoad; } + +// Max Load + public int getPetMaxLoad() { return petMaxLoad; } + public void setPetMaxLoad(int petMaxLoad) { this.petMaxLoad = petMaxLoad; } + +// Regen HP + public int getPetRegenHP() { return petRegenHP; } + public void setPetRegenHP(int petRegenHP){ this.petRegenHP = petRegenHP;} + +// Regen MP + public int getPetRegenMP() { return petRegenMP; } + public void setPetRegenMP(int petRegenMP) { this.petRegenMP = petRegenMP; } - public void setPetFeedBattle(int petFeedBattle) - { - this.petFeedBattle = petFeedBattle; - } - - public int getPetFeedNormal() - { - return petFeedNormal; - } - - public void setPetFeedNormal(int petFeedNormal) - { - this.petFeedNormal = petFeedNormal; - } - - public int getPetHP() - { - return petHP; - } - - public void setPetHP(int petHP) - { - this.petHP = petHP; - } - - public int getPetID() - { - return petID; - } - - public void setPetID(int petID) - { - this.petID = petID; - } - - public int getPetLevel() - { - return petLevel; - } - - public void setPetLevel(int petLevel) - { - this.petLevel = petLevel; - } - - public int getPetMAtk() - { - return petMAtk; - } - - public void setPetMAtk(int petMAtk) - { - this.petMAtk = petMAtk; - } - - public int getPetMaxFeed() - { - return petMaxFeed; - } - - public void setPetMaxFeed(int petMaxFeed) - { - this.petMaxFeed = petMaxFeed; - } - - public int getPetMDef() - { - return petMDef; - } - - public void setPetMDef(int petMDef) - { - this.petMDef = petMDef; - } - - public int getPetExp() - { - return petExp; - } - - public void setPetExp(int petExp) - { - this.petExp = petExp; - } - - public int getPetMP() - { - return petMP; - } - - public void setPetMP(int petMP) - { - this.petMP = petMP; - } - - public int getPetPAtk() - { - return petPAtk; - } - - public void setPetPAtk(int petPAtk) - { - this.petPAtk = petPAtk; - } - - public int getPetPDef() - { - return petPDef; - } - - public void setPetPDef(int petPDef) - { - this.petPDef = petPDef; - } - - public int getPetRegenHP() - { - return petRegenHP; - } - - public void setPetRegenHP(int petRegenHP) - { - this.petRegenHP = petRegenHP; - } - - public int getPetRegenMP() - { - return petRegenMP; - } - - public void setPetRegenMP(int petRegenMP) - { - this.petRegenMP = petRegenMP; - } - public String toString() { - return "PetID: " + getPetID() + "\t" + - "PetLevel: " + getPetLevel() + "\t" + - PET_MAX_FEED + ": " + getPetMaxFeed() + "\t" + - PET_FEED_BATTLE + ": " + getPetFeedBattle() + "\t" + - PET_FEED_NORMAL + ": " + getPetFeedNormal() + "\t" + - PET_PATK + ": " + getPetPAtk() + "\t" + - PET_PDEF + ": " + getPetPDef() + "\t" + - PET_MATK + ": " + getPetMAtk() + "\t" + - PET_MDEF + ": " + getPetMDef() + "\t" + - PET_HP + ": " + getPetHP() + "\t" + - PET_MP + ": " + getPetMP() + "\t" + - PET_REGEN_HP + ": " + getPetRegenHP() + "\t" + - PET_REGEN_MP + ": " + getPetRegenMP() + "\t" + - PET_EXP + ": " + getPetExp(); + return "PetID: " + getPetID() + " \t" + + "PetLevel: " + getPetLevel() + " \t" + +// PET_EXP + ": " + getPetExp() + " \t" + + PET_MAX_EXP + ": " + getPetMaxExp() + " \t" + +// PET_HP + ": " + getPetHP() + " \t" + + PET_MAX_HP + ": " + getPetMaxHP() + " \t" + +// PET_MP + ": " + getPetMP() + " \t" + + PET_MAX_MP + ": " + getPetMaxMP() + " \t" + + PET_PATK + ": " + getPetPAtk() + " \t" + + PET_PDEF + ": " + getPetPDef() + " \t" + + PET_MATK + ": " + getPetMAtk() + " \t" + + PET_MDEF + ": " + getPetMDef() + " \t" + + PET_ACCURACY + ": " + getPetAccuracy() + " \t" + + PET_EVASION + ": " + getPetEvasion() + " \t" + + PET_CRITICAL + ": " + getPetCritical() + " \t" + + PET_SPEED + ": " + getPetSpeed() + " \t" + + PET_ATK_SPEED + ": " + getPetAtkSpeed() + " \t" + + PET_CAST_SPEED + ": " + getPetCastSpeed() + " \t" + +// PET_FEED + ": " + getPetFeed() + " \t" + + PET_MAX_FEED + ": " + getPetMaxFeed() + " \t" + + PET_FEED_BATTLE + ": " + getPetFeedBattle() + " \t" + + PET_FEED_NORMAL + ": " + getPetFeedNormal() + " \t" + +// PET_LOAD + ": " + getPetLoad() + " \t" + + PET_MAX_LOAD + ": " + getPetMaxLoad() + " \t" + + PET_REGEN_HP + ": " + getPetRegenHP() + " \t" + + PET_REGEN_MP + ": " + getPetRegenMP(); } } Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java (working copy) @@ -4462,19 +4462,19 @@ public final double calcStat(Stats stat, double init, L2Character target, L2Skill skill) { return getStat().calcStat(stat, init, target, skill); } // Property - Public - public final int getAccuracy() { return getStat().getAccuracy(); } + public int getAccuracy() { return getStat().getAccuracy(); } public final float getAttackSpeedMultiplier() { return getStat().getAttackSpeedMultiplier(); } public final int getAtkCancel() { return getStat().getAtkCancel(); } public int getCON() { return getStat().getCON(); } public int getDEX() { return getStat().getDEX(); } public final double getCriticalDmg(L2Character target, double init) { return getStat().getCriticalDmg(target, init); } - public final int getCriticalHit(L2Character target, L2Skill skill) { return getStat().getCriticalHit(target, skill); } - public final int getEvasionRate(L2Character target) { return getStat().getEvasionRate(target); } + public int getCriticalHit(L2Character target, L2Skill skill) { return getStat().getCriticalHit(target, skill); } + public int getEvasionRate(L2Character target) { return getStat().getEvasionRate(target); } public int getINT() { return getStat().getINT(); } public final int getMagicalAttackRange(L2Skill skill) { return getStat().getMagicalAttackRange(skill); } public final int getMaxCp() { return getStat().getMaxCp(); } public int getMAtk(L2Character target, L2Skill skill) { return getStat().getMAtk(target, skill); } - public final int getMAtkSpd() { return getStat().getMAtkSpd(); } + public int getMAtkSpd() { return getStat().getMAtkSpd(); } public int getMaxMp() { return getStat().getMaxMp(); } public int getMaxHp() { return getStat().getMaxHp(); } public final int getMCriticalHit(L2Character target, L2Skill skill) { return getStat().getMCriticalHit(target, skill); } @@ -4493,7 +4493,7 @@ public double getPDefUndead(L2Character target) { return getStat().getPDefUndead(target); } public int getPDef(L2Character target) { return getStat().getPDef(target); } public final int getPhysicalAttackRange() { return getStat().getPhysicalAttackRange(); } - public final int getRunSpeed() { return getStat().getRunSpeed(); } + public int getRunSpeed() { return getStat().getRunSpeed(); } public final int getShldDef() { return getStat().getShldDef(); } public int getSTR() { return getStat().getSTR(); } public final int getWalkSpeed() { return getStat().getWalkSpeed(); } Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/PetSummon.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/PetSummon.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/PetSummon.java (working copy) @@ -60,9 +60,15 @@ if (activeChar.getPet() != null) { - if (Config.DEBUG) _log.fine("player has a pet already. ignore use item"); + activeChar.sendMessage("You already have a pet summoned."); return; } + + if ( activeChar.isAttackingNow() ) + { + activeChar.sendMessage("You cannot summon a pet during combat."); + return; + } if (activeChar.isMounted()) return; @@ -155,12 +161,57 @@ newpet.spawnMe(activeChar.getX()+50, activeChar.getY()+100, activeChar.getZ()); PetInfo pInfo = new PetInfo(newpet); activeChar.sendPacket(pInfo); - newpet.startFeed(); + newpet.startFeed( false ); // continue execution in 1 seconds ClientScheduler.getInstance().scheduleLow(new SummonFinalizer(activeChar, newpet), 900); + + // if pet died of hunger last time it was summoned + if ( newpet.getCurrentFed() <= 0 ) + { + // wait 1 minute for owner to feed + ClientScheduler.getInstance().scheduleLow(new FeedWait(activeChar, newpet), 60000); + } + else + { + // start normal feeding + newpet.startFeed( false ); + } } + static class FeedWait implements Runnable + { + private L2PcInstance _activeChar; + private L2PetInstance _newpet; + + FeedWait(L2PcInstance activeChar, L2PetInstance newpet) + { + _activeChar = activeChar; + _newpet = newpet; + } + + public void run() + { + try + { + // owner didn't feed on time + if ( _newpet.getCurrentFed() <= 0 ) + { + _newpet.unSummon(_activeChar); + } + else + { + // normal feeding + _newpet.startFeed( false ); + } + } + catch (Throwable e) + { + _log.severe(e.toString()); + } + } + } + static class SummonFinalizer implements Runnable { private L2PcInstance _activeChar; Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/GameServer.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -141,7 +141,7 @@ import net.sf.l2j.gameserver.model.AutoChatHandler; import net.sf.l2j.gameserver.model.AutoSpawnHandler; import net.sf.l2j.gameserver.model.L2World; -import net.sf.l2j.gameserver.script.faenor.FaenorScriptEngine; +import net.sf.l2j.gameserver.model.L2PetDataTable; import net.sf.l2j.gameserver.taskmanager.TaskManager; import net.sf.l2j.status.Status; @@ -406,7 +406,8 @@ GmListTable.getInstance(); - FaenorScriptEngine.getInstance(); + // read pet stats from db + L2PetDataTable.getInstance().loadPetsData(); Universe.getInstance(); Index: E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/script/faenor/FaenorInterface.java =================================================================== --- E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/script/faenor/FaenorInterface.java (revision 1610) +++ E:/workspace enigma/l2jc4/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/script/faenor/FaenorInterface.java (working copy) @@ -28,7 +28,6 @@ import net.sf.l2j.gameserver.EventDroplist; import net.sf.l2j.gameserver.model.L2DropData; import net.sf.l2j.gameserver.model.L2PetData; -import net.sf.l2j.gameserver.model.L2PetDataTable; import net.sf.l2j.gameserver.script.DateRange; import net.sf.l2j.gameserver.script.EngineInterface; import net.sf.l2j.gameserver.script.Expression; @@ -166,7 +165,6 @@ context.undeclareBean("level"); } - L2PetDataTable.getInstance().addPetData(petData); } }