Реализация Петов

  • Автор темы Автор темы Ancient
  • Дата начала Дата начала

Ancient

Заблокирован
Заблокирован
Сообщения
341
Розыгрыши
0
Репутация
-12
Реакции
77
Баллы
0
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.


ну бд под петов сами напишите если у вас нету)))

шарю для вас свой труд...
 
Последнее редактирование модератором:
Не понял, а в чем заключается ваш "труд"?
 
Тоже не понял что он дает ?!
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
в данной теме пакет PetDataTable в котором написаны все петы хроник HF
 
Можно поинтересоваться, где вы тут увидели пакет? Это таблица петов.
 
upload_2015-10-10_17-13-8.webp

Улыбнуло, что сделал пару правок, и присвоил авторство.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
возьмем пример
public static enum L2Pet
{
WOLF(PET_WOLF_ID, 2375, 2515, false, 1, 12, .30, 2, 2),
WOLF - название
PET_WOLF_ID, 2375 - ид ошейника
2515- корм
и так далее
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Код:
package org.mmocore.gameserver.tables;

import gnu.trove.TIntObjectHashMap;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.commons.lang3.ArrayUtils;
import org.mmocore.commons.dbutils.DbUtils;
import org.mmocore.gameserver.database.DatabaseFactory;
import org.mmocore.gameserver.model.PetData;
import org.mmocore.gameserver.model.items.ItemInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PetDataTable
{
    private static final Logger _log = LoggerFactory.getLogger(PetDataTable.class);

    private static final PetDataTable _instance = new PetDataTable();

    public static final PetDataTable getInstance()
    {
        return _instance;
    }

    public final static int PET_WOLF_ID = 12077;

    public final static int HATCHLING_WIND_ID = 12311;
    public final static int HATCHLING_STAR_ID = 12312;
    public final static int HATCHLING_TWILIGHT_ID = 12313;

    public final static int STRIDER_WIND_ID = 12526;
    public final static int STRIDER_STAR_ID = 12527;
    public final static int STRIDER_TWILIGHT_ID = 12528;

    public final static int RED_STRIDER_WIND_ID = 16038;
    public final static int RED_STRIDER_STAR_ID = 16039;
    public final static int RED_STRIDER_TWILIGHT_ID = 16040;

    public final static int WYVERN_ID = 12621;

    public final static int BABY_BUFFALO_ID = 12780;
    public final static int BABY_KOOKABURRA_ID = 12781;
    public final static int BABY_COUGAR_ID = 12782;

    public final static int IMPROVED_BABY_BUFFALO_ID = 16034;
    public final static int IMPROVED_BABY_KOOKABURRA_ID = 16035;
    public final static int IMPROVED_BABY_COUGAR_ID = 16036;

    public final static int SIN_EATER_ID = 12564;

    public final static int GREAT_WOLF_ID = 16025;
    public final static int WGREAT_WOLF_ID = 16037;
    public final static int FENRIR_WOLF_ID = 16041;
    public final static int WFENRIR_WOLF_ID = 16042;

    public final static int FOX_SHAMAN_ID = 16043;
    public final static int WILD_BEAST_FIGHTER_ID = 16044;
    public final static int WHITE_WEASEL_ID = 16045;
    public final static int FAIRY_PRINCESS_ID = 16046;
    public final static int OWL_MONK_ID = 16050;
    public final static int SPIRIT_SHAMAN_ID = 16051;
    public final static int TOY_KNIGHT_ID = 16052;
    public final static int TURTLE_ASCETIC_ID = 16053;
    public final static int DEINONYCHUS_ID = 16067;
    public final static int GUARDIANS_STRIDER_ID = 16068;

    private final TIntObjectHashMap<PetData> _pets = new TIntObjectHashMap<PetData>();

    private PetDataTable()
    {
        load();
    }

    public void reload()
    {
        load();
    }

    public PetData getInfo(int petNpcId, int level)
    {
        PetData result = null;
        while(result == null && level < 100)
        {
            result = _pets.get(petNpcId * 100 + level);
            level++;
        }

        return result;
    }

    private void load()
    {
        PetData petData;

        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rset = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT id, level, exp, hp, mp, patk, pdef, matk, mdef, acc, evasion, crit, speed, atk_speed, cast_speed, max_meal, battle_meal, normal_meal, loadMax, hpregen, mpregen FROM pet_data");
            rset = statement.executeQuery();
            while(rset.next())
            {
                petData = new PetData();
                petData.setID(rset.getInt("id"));
                petData.setLevel(rset.getInt("level"));
                petData.setExp(rset.getLong("exp"));
                petData.setHP(rset.getInt("hp"));
                petData.setMP(rset.getInt("mp"));
                petData.setPAtk(rset.getInt("patk"));
                petData.setPDef(rset.getInt("pdef"));
                petData.setMAtk(rset.getInt("matk"));
                petData.setMDef(rset.getInt("mdef"));
                petData.setAccuracy(rset.getInt("acc"));
                petData.setEvasion(rset.getInt("evasion"));
                petData.setCritical(rset.getInt("crit"));
                petData.setSpeed(rset.getInt("speed"));
                petData.setAtkSpeed(rset.getInt("atk_speed"));
                petData.setCastSpeed(rset.getInt("cast_speed"));
                petData.setFeedMax(rset.getInt("max_meal"));
                petData.setFeedBattle(rset.getInt("battle_meal"));
                petData.setFeedNormal(rset.getInt("normal_meal"));
                petData.setMaxLoad(rset.getInt("loadMax"));
                petData.setHpRegen(rset.getInt("hpregen"));
                petData.setMpRegen(rset.getInt("mpregen"));

                petData.setControlItemId(getControlItemId(petData.getID()));
                petData.setFoodId(getFoodId(petData.getID()));
                petData.setMountable(isMountable(petData.getID()));
                petData.setMinLevel(getMinLevel(petData.getID()));
                petData.setAddFed(getAddFed(petData.getID()));

                _pets.put(petData.getID() * 100 + petData.getLevel(), petData);
            }
        }
        catch(Exception e)
        {
            _log.error("", e);
        }
        finally
        {
            DbUtils.closeQuietly(con, statement, rset);
        }

        _log.info("PetDataTable: Loaded " + _pets.size() + " pets.");
    }

    public static enum L2Pet
    {
        WOLF(PET_WOLF_ID, 2375, 2515, false, 1, 12, .30, 2, 2),

        HATCHLING_WIND(HATCHLING_WIND_ID, 3500, 4038, false, 1, 12, .30, 2, 2),
        HATCHLING_STAR(HATCHLING_STAR_ID, 3501, 4038, false, 1, 12, .30, 2, 2),
        HATCHLING_TWILIGHT(HATCHLING_TWILIGHT_ID, 3502, 4038, false, 1, 100, .30, 2, 2),

        STRIDER_WIND(STRIDER_WIND_ID, 4422, 5168, true, 1, 12, .30, 2, 2),
        STRIDER_STAR(STRIDER_STAR_ID, 4423, 5168, true, 1, 12, .30, 2, 2),
        STRIDER_TWILIGHT(STRIDER_TWILIGHT_ID, 4424, 5168, true, 1, 100, .30, 2, 2),

        RED_STRIDER_WIND(RED_STRIDER_WIND_ID, 10308, 5168, true, 1, 12, .30, 2, 2),
        RED_STRIDER_STAR(RED_STRIDER_STAR_ID, 10309, 5168, true, 1, 12, .30, 2, 2),
        RED_STRIDER_TWILIGHT(RED_STRIDER_TWILIGHT_ID, 10310, 5168, true, 1, 100, .30, 2, 2),

        WYVERN(WYVERN_ID, 5249, 6316, true, 1, 12, .0, 2, 2),

        GREAT_WOLF(GREAT_WOLF_ID, 9882, 9668, false, 55, 10, .30, 2, 2),
        WGREAT_WOLF(WGREAT_WOLF_ID, 10307, 9668, true, 55, 12, .30, 2, 2),
        FENRIR_WOLF(FENRIR_WOLF_ID, 10426, 9668, true, 70, 12, .30, 2, 2),
        WFENRIR_WOLF(WFENRIR_WOLF_ID, 10611, 9668, true, 70, 12, .30, 2, 2),

        BABY_BUFFALO(BABY_BUFFALO_ID, 6648, 7582, false, 1, 12, .05, 2, 2),
        BABY_KOOKABURRA(BABY_KOOKABURRA_ID, 6650, 7582, false, 1, 12, .05, 2, 2),
        BABY_COUGAR(BABY_COUGAR_ID, 6649, 7582, false, 1, 12, .05, 2, 2),

        IMPROVED_BABY_BUFFALO(IMPROVED_BABY_BUFFALO_ID, 10311, 10425, false, 55, 12, .30, 2, 2),
        IMPROVED_BABY_KOOKABURRA(IMPROVED_BABY_KOOKABURRA_ID, 10313, 10425, false, 55, 12, .30, 2, 2),
        IMPROVED_BABY_COUGAR(IMPROVED_BABY_COUGAR_ID, 10312, 10425, false, 55, 12, .30, 2, 2),

        SIN_EATER(SIN_EATER_ID, 4425, 2515, false, 1, 12, .0, 2, 2),

        FOX_SHAMAN(FOX_SHAMAN_ID, 13020, -1, false, 25, 12, .30, 2, 2),
        WILD_BEAST_FIGHTER(WILD_BEAST_FIGHTER_ID, 13019, -1, false, 25, 12, .30, 2, 2),
        WHITE_WEASEL(WHITE_WEASEL_ID, 13017, -1, false, 25, 12, .30, 2, 2),
        FAIRY_PRINCESS(FAIRY_PRINCESS_ID, 13018, -1, false, 25, 12, .30, 2, 2),
        OWL_MONK(OWL_MONK_ID, 14063, -1, false, 25, 12, .30, 2, 2),
        SPIRIT_SHAMAN(SPIRIT_SHAMAN_ID, 14062, -1, false, 25, 12, .30, 2, 2),
        TOY_KNIGHT(TOY_KNIGHT_ID, 14061, -1, false, 25, 12, .30, 2, 2),
        TURTLE_ASCETIC(TURTLE_ASCETIC_ID, 14064, -1, false, 25, 12, .30, 2, 2),

        DEINONYCHUS(DEINONYCHUS_ID, 14828, 2515, false, 55, 12, .30, 2, 2),
        GUARDIANS_STRIDER(GUARDIANS_STRIDER_ID, 14819, 5168, true, 55, 12, .30, 2, 2);

        public static L2Pet[] VALUES = values();
        public static final int[] PET_CONTROL_ITEMS;

        private final int _npcId;
        private final int _controlItemId;
        private final int _foodId;
        private final boolean _isMountable;
        private final int _minLevel; // Уровень, ниже которого не может опускаться пет
        private final int _addFed; // На сколько процентов увеличивается полоска еды, при кормлении
        private final double _expPenalty;
        private final int _soulshots;
        private final int _spiritshots;

        private L2Pet(int npcId, int controlItemId, int foodId, boolean isMountabe, int minLevel, int addFed, double expPenalty, int soulshots, int spiritshots)
        {
            _npcId = npcId;
            _controlItemId = controlItemId;
            _foodId = foodId;
            _isMountable = isMountabe;
            _minLevel = minLevel;
            _addFed = addFed;
            _expPenalty = expPenalty;
            _soulshots = soulshots;
            _spiritshots = spiritshots;
        }

        public int getNpcId()
        {
            return _npcId;
        }

        public int getControlItemId()
        {
            return _controlItemId;
        }

        public int getFoodId()
        {
            return _foodId;
        }

        public boolean isMountable()
        {
            return _isMountable;
        }

        public int getMinLevel()
        {
            return _minLevel;
        }

        public int getAddFed()
        {
            return _addFed;
        }

        public double getExpPenalty()
        {
            return _expPenalty;
        }

        public int getSoulshots()
        {
            return _soulshots;
        }

        public int getSpiritshots()
        {
            return _spiritshots;
        }

        static
        {
            final L2Pet[] values = values();
            PET_CONTROL_ITEMS = new int[values.length];
            for (int i = 0; i < values.length; i++)
                PET_CONTROL_ITEMS[i] = values[i]._controlItemId;
        }
    }

    public static int getControlItemId(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getControlItemId();
        return 1;
    }

    public static int getFoodId(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getFoodId();
        return 1;
    }

    public static boolean isMountable(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.isMountable();
        return false;
    }

    public static int getMinLevel(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getMinLevel();
        return 1;
    }

    public static int getAddFed(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getAddFed();
        return 1;
    }

    public static double getExpPenalty(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getExpPenalty();
        return 0f;
    }

    public static int getSoulshots(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getSoulshots();
        return 2;
    }

    public static int getSpiritshots(int npcId)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getNpcId() == npcId)
                return pet.getSpiritshots();
        return 2;
    }

    public static int getSummonId(ItemInstance item)
    {
        for(L2Pet pet : L2Pet.VALUES)
            if(pet.getControlItemId() == item.getItemId())
                return pet.getNpcId();
        return 0;
    }

    public static boolean isPetControlItem(ItemInstance item)
    {
        return ArrayUtils.contains(L2Pet.PET_CONTROL_ITEMS, item.getItemId());
    }

    public static boolean isBabyPet(int id)
    {
        switch(id)
        {
            case BABY_BUFFALO_ID:
            case BABY_KOOKABURRA_ID:
            case BABY_COUGAR_ID:
                return true;
            default:
                return false;
        }
    }

    public static boolean isImprovedBabyPet(int id)
    {
        switch(id)
        {
            case IMPROVED_BABY_BUFFALO_ID:
            case IMPROVED_BABY_KOOKABURRA_ID:
            case IMPROVED_BABY_COUGAR_ID:
            case FAIRY_PRINCESS_ID:
                return true;
            default:
                return false;
        }
    }

    public static boolean isWolf(int id)
    {
        return id == PET_WOLF_ID;
    }

    public static boolean isHatchling(int id)
    {
        switch(id)
        {
            case HATCHLING_WIND_ID:
            case HATCHLING_STAR_ID:
            case HATCHLING_TWILIGHT_ID:
                return true;
            default:
                return false;
        }
    }

    public static boolean isStrider(int id)
    {
        switch(id)
        {
            case STRIDER_WIND_ID:
            case STRIDER_STAR_ID:
            case STRIDER_TWILIGHT_ID:
            case RED_STRIDER_WIND_ID:
            case RED_STRIDER_STAR_ID:
            case RED_STRIDER_TWILIGHT_ID:
            case GUARDIANS_STRIDER_ID:
                return true;
            default:
                return false;
        }
    }

    public static boolean isGWolf(int id)
    {
        switch(id)
        {
            case GREAT_WOLF_ID:
            case WGREAT_WOLF_ID:
            case FENRIR_WOLF_ID:
            case WFENRIR_WOLF_ID:
                return true;
            default:
                return false;
        }
    }

    public static boolean isVitaminPet(int id)
    {
        switch(id)
        {
            case FOX_SHAMAN_ID:
            case WILD_BEAST_FIGHTER_ID:
            case WHITE_WEASEL_ID:
            case FAIRY_PRINCESS_ID:
            case OWL_MONK_ID:
            case SPIRIT_SHAMAN_ID:
            case TOY_KNIGHT_ID:
            case TURTLE_ASCETIC_ID:
                return true;
            default:
                return false;
        }
    }
}

Ради примера выдрано с лоста.
 
делал это сам, вот и авторство
Интересно, каким макаром данная таблица появилась еще у фениксов(1)(они изобрели машину времени и украли у вас)? Именно про это вам и намекнули, если дополняете чужие скрипты и вам хочется подчеркнуть это, можно всегда добавить тэг @modified. Авторство можно ставить в скрипт в том случае, если вы его писали с 0.

(1) - если не ошибаюсь
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Интересно, каким макаром данная таблица появилась еще у фениксов(1)(они изобрели машину времени и украли у вас)? Именно про это вам и намекнули, если дополняете чужие скрипты и вам хочется подчеркнуть это, можно всегда добавить тэг @modified. Авторство можно ставить в скрипт в том случае, если вы его писали с 0.

(1) - если не ошибаюсь
в дальнейшем учту это...
 
А вот мой PetHolder, для примера
Код:
package l2p.gameserver.data.holder;

import java.util.ArrayList;
import java.util.List;
import java.sql.ResultSet;

import gnu.trove.map.hash.TIntObjectHashMap;
import l2p.commons.data.xml.AbstractHolder;
import l2p.commons.dbutils.DatabaseUtils;
import l2p.gameserver.database.DatabaseFactory;
import l2p.gameserver.database.FiltredPreparedStatement;
import l2p.gameserver.database.ThreadConnection;
import l2p.gameserver.enums.BaseStats;
import l2p.gameserver.enums.PetType;
import l2p.gameserver.model.Creature;
import l2p.gameserver.model.PetData;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.Summon;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.templates.StatsSet;

public class PetDataHolder extends AbstractHolder
{
    public final static int WOLF_ID = 12077;
    public final static int GREAT_WOLF_ID = 16025;
    public final static int WGREAT_WOLF_ID = 16037;
    public final static int FENRIR_WOLF_ID = 16041;
    public final static int WFENRIR_WOLF_ID = 16042;

    public final static int HATCHLING_WIND_ID = 12311;
    public final static int HATCHLING_STAR_ID = 12312;
    public final static int HATCHLING_TWILIGHT_ID = 12313;
    public final static int STRIDER_WIND_ID = 12526;
    public final static int STRIDER_STAR_ID = 12527;
    public final static int STRIDER_TWILIGHT_ID = 12528;
    public final static int RED_STRIDER_WIND_ID = 16038;
    public final static int RED_STRIDER_STAR_ID = 16039;
    public final static int RED_STRIDER_TWILIGHT_ID = 16040;
    public final static int GUARDIANS_STRIDER_ID = 16068;

    public final static int WYVERN_ID = 12621;

    public final static int BABY_BUFFALO_ID = 12780;
    public final static int BABY_KOOKABURRA_ID = 12781;
    public final static int BABY_COUGAR_ID = 12782;
    public final static int IMPROVED_BABY_BUFFALO_ID = 16034;
    public final static int IMPROVED_BABY_KOOKABURRA_ID = 16035;
    public final static int IMPROVED_BABY_COUGAR_ID = 16036;

    public final static int SIN_EATER_ID = 12564;

    public final static int LIGHT_PURPLE_MANED_HORSE_ID = 13130;
    public final static int TAWNY_MANED_LION_ID = 13146;
    public final static int STEAM_BEATLE_ID = 13147;

    public final static int AURA_BIRD_FALCON_ID = 13144;
    public final static int AURA_BIRD_OWL_ID = 13145;

    public final static int DEINONYCHUS_ID = 16067;

    public final static int FOX_SHAMAN_ID = 16043;
    public final static int WILD_BEAST_FIGHTER_ID = 16044;
    public final static int WHITE_WEASEL_ID = 16045;
    public final static int FAIRY_PRINCESS_ID = 16046;
    public final static int OWL_MONK_ID = 16050;
    public final static int SPIRIT_SHAMAN_ID = 16051;
    public final static int TOY_KNIGHT_ID = 16052;
    public final static int TURTLE_ASCETIC_ID = 16053;

    public final static int MAGUEN_ID = 16071;
    public final static int MAGUEN_ELITE_ID = 16072;

    public final static int BABY_RUDOLPH_A_ID = 1538;
    public final static int BABY_RUDOLPH_B_ID = 1561;

    public final static int DESHELOPH_A_ID = 1562;
    public final static int HYUM_A_ID = 1563;
    public final static int LEKANG_A_ID = 1564;
    public final static int LILIAS_A_ID = 1565;
    public final static int LAPHAM_A_ID = 1566;
    public final static int MAFUM_A_ID = 1567;
    public final static int DESHELOPH_B_ID = 1568;
    public final static int HYUM_B_ID = 1569;
    public final static int LEKANG_B_ID = 1570;
    public final static int LILIAS_B_ID = 1571;
    public final static int LAPHAM_B_ID = 1572;
    public final static int MAFUM_B_ID = 1573;

    public final static int SUPER_FELINE_QUEEN_Z_ID = 1601;
    public final static int SUPER_KAT_THE_CAT_Z_ID = 1602;
    public final static int SUPER_MEW_THE_CAT_Z_ID = 1603;

    private static TIntObjectHashMap<Pet> _pets = new TIntObjectHashMap<Pet>();
    private TIntObjectHashMap<PetData> _petData = new TIntObjectHashMap<PetData>();

    private static PetDataHolder _instance = new PetDataHolder();

    public static PetDataHolder getInstance()
    {
        return _instance;
    }

    public static final class Pet
    {
        public PetType type = PetType.NONE;
        public int controlItemId[] = new int[0];
        public int foodId = 0;
        public int minLevel = 0;
        public boolean isMountable = false;
        public boolean isSyncLevel = false;
        public boolean isAttacker = false;
        public boolean isRecharger = false;
    }

    public void addPet(int npcId, Pet pet)
    {
        _pets.put(npcId, pet);
    }

    public void addPetData(int npcId, StatsSet commonSet, StatsSet levelSet)
    {
        if (NpcHolder.getInstance().getTemplate(npcId) == null)
            return;

        PetData petData = new PetData();
        petData.setID(npcId);
        petData.setMaxLoad(commonSet.getInteger("load", 54510));
        petData.setHungryLimit(commonSet.getInteger("hungry_limit", 55) / 100);
        petData.setEvolve(commonSet.getIntegerArray("evolve", new int[0]));
        petData.setLevel(levelSet.getInteger("level"));
        petData.setExp(levelSet.getLong("exp"));
        petData.setHP((int) (levelSet.getInteger("hp") * BaseStatsBonusHolder.getBonus(BaseStats.CON, NpcHolder.getInstance().getTemplate(npcId).getBaseStatAttributes().getCON())));
        petData.setMP((int) (levelSet.getInteger("mp") * BaseStatsBonusHolder.getBonus(BaseStats.MEN, NpcHolder.getInstance().getTemplate(npcId).getBaseStatAttributes().getMEN())));
        petData.setPAtk(levelSet.getInteger("patk"));
        petData.setPDef(levelSet.getInteger("pdef"));
        petData.setMAtk(levelSet.getInteger("matk"));
        petData.setMDef(levelSet.getInteger("mdef"));
        petData.setAccuracy(37 + petData.getLevel());
        petData.setEvasion(33 + petData.getLevel());
        petData.setCritical(40);
        petData.setSpeed(137);
        petData.setAtkSpeed(278);
        petData.setCastSpeed(333);
        petData.setAddFed(levelSet.getInteger("add_fed", 12));
        petData.setFeedMax(levelSet.getInteger("max_meal"));
        petData.setFeedBattle(levelSet.getInteger("consume_meal_in_battle"));
        petData.setFeedNormal(levelSet.getInteger("consume_meal_in_normal"));
        petData.setHpRegen(levelSet.getInteger("hpreg"));
        petData.setMpRegen(levelSet.getInteger("mpreg"));
        petData.setSS(levelSet.getInteger("soulshot_count"));
        petData.setSpS(levelSet.getInteger("spiritshot_count"));
        petData.setExpPenalty(1.0f - levelSet.getInteger("get_exp_type", 100) * 0.01f);
        _petData.put(petData.getID() * 100 + petData.getLevel(), petData);
    }

    public PetData getInfo(int npcId, int level)
    {
        PetData result = null;

        while (result == null && level <= 100)
        {
            result = _petData.get(npcId * 100 + level);
            level++;
        }

        return result;
    }

    public static Pet getPet(int npcId)
    {
        return _pets.get(npcId);
    }

    public static int getFirstControlItemId(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).controlItemId[0] : 0;
    }

    public static int[] getControlItemId(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).controlItemId : new int[] { 0 };
    }

    public static int getFoodId(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).foodId : 0;
    }

    public static boolean isMountable(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).isMountable : false;
    }

    public static boolean isSyncLevel(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).isSyncLevel : false;
    }

    public static boolean isAttacker(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).isAttacker : false;
    }

    public static boolean isRecharger(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).isRecharger : false;
    }

    public static int getMinLevel(int npcId)
    {
        return _pets.containsKey(npcId) ? _pets.get(npcId).minLevel : 1;
    }

    public static int getPetId(ItemInstance item)
    {
        for (int petId : _pets.keys())
            for (int itemId : _pets.get(petId).controlItemId)
                if (itemId == item.getItemId())
                    return petId;

        return 0;
    }

    public static int[] getPetControlItems()
    {
        List<Integer> items = new ArrayList<Integer>();

        for (int petId : _pets.keys())
            for (int itemId : _pets.get(petId).controlItemId)
                if (itemId > 0)
                    items.add(itemId);

        int list[] = new int[items.size()];

        for (int i = 0; i < items.size(); i++)
            list[i] = items.get(i);

        return list;
    }

    public static boolean isPetControlItem(ItemInstance item)
    {
        for (int petId : _pets.keys())
            for (int itemId : _pets.get(petId).controlItemId)
                if (itemId == item.getItemId())
                    return true;

        return false;
    }

    public static boolean checkType(int npcId, PetType type)
    {
        return _pets.containsKey(npcId) && _pets.get(npcId).type == type;
    }

    public static boolean isWolf(int npcId)
    {
        return checkType(npcId, PetType.WOLF);
    }

    public static boolean isGreatWolf(int npcId)
    {
        return checkType(npcId, PetType.GREAT_WOLF);
    }

    public static boolean isHatchling(int npcId)
    {
        return checkType(npcId, PetType.HATCHLING);
    }

    public static boolean isStrider(int npcId)
    {
        return checkType(npcId, PetType.STRIDER);
    }

    public static boolean isWyvern(int npcId)
    {
        return checkType(npcId, PetType.WYVERN);
    }

    public static boolean isBaby(int npcId)
    {
        return checkType(npcId, PetType.BABY);
    }

    public static boolean isImproved(int npcId)
    {
        return checkType(npcId, PetType.IMPROVED);
    }

    public static boolean isPremium(int npcId)
    {
        return checkType(npcId, PetType.PREMIUM);
    }

    public static boolean isRoseSpirit(int npcId)
    {
        return checkType(npcId, PetType.ROSE_SPIRIT);
    }

    public static boolean isClan(int npcId)
    {
        return checkType(npcId, PetType.CLAN);
    }

    public void deletePet(ItemInstance item, Creature owner)
    {
        int petObjectId = 0;

        ThreadConnection con = null;
        FiltredPreparedStatement statement = null;
        ResultSet rset = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT objId FROM pets WHERE item_obj_id=?");
            statement.setInt(1, item.getObjectId());
            rset = statement.executeQuery();
            while (rset.next())
                petObjectId = rset.getInt("objId");

            DatabaseUtils.closeQuietly(statement, rset);

            Summon summon = owner.getPlayer().getSummonList().getPet();
            if (summon != null && summon.getObjectId() == petObjectId)
                owner.getPlayer().getSummonList().unsummonPet(false);

            Player player = owner.getPlayer();
            if (player != null && player.isMounted() && player.getMountObjId() == petObjectId)
                player.setMount(0, 0, 0);

            // if it's a pet control item, delete the pet
            statement = con.prepareStatement("DELETE FROM pets WHERE item_obj_id=?");
            statement.setInt(1, item.getObjectId());
            statement.execute();
        }
        catch (Exception e)
        {
            error("could not restore pet objectid:", e);
        }
        finally
        {
            DatabaseUtils.closeQuietly(con, statement, rset);
        }
    }

    public void unSummonPet(ItemInstance oldItem, Creature owner)
    {
        int petObjectId = 0;

        ThreadConnection con = null;
        FiltredPreparedStatement statement = null;
        ResultSet rset = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT objId FROM pets WHERE item_obj_id=?");
            statement.setInt(1, oldItem.getObjectId());
            rset = statement.executeQuery();

            while (rset.next())
                petObjectId = rset.getInt("objId");

            if (owner == null)
                return;

            Summon summon = owner.getPlayer().getSummonList().getPet();
            if (summon != null && summon.getObjectId() == petObjectId)
                owner.getPlayer().getSummonList().unsummonPet(false);

            Player player = owner.getPlayer();
            if (player != null && player.isMounted() && player.getMountObjId() == petObjectId)
                player.setMount(0, 0, 0);
        }
        catch (Exception e)
        {
            error("could not restore pet objectid:", e);
        }
        finally
        {
            DatabaseUtils.closeQuietly(con, statement, rset);
        }
    }

    @Override
    public int size()
    {
        return _pets.size();
    }

    @Override
    public void clear()
    {
        _pets.clear();
        _petData.clear();
    }
}
константы с идшиками вобщем оставлены уже чисто для удобства, чтобы наглядней было использовать в коде, а не просто ид пета напрямую указывать.

З.Ы. а да, хранить до сих пор статичные данные по петам в бд? это же некомильфо...
 
Назад
Сверху Снизу