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);
}
}