Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
надпись о получении Exp, SP
#1
При убийстве Моба мы получаем такую надпись:

[Изображение: 8428e0fa0bbc.jpg]

Так же надпись распространяется и на гвардов и еще множество инстансов.
в PcStat.java я нашел следующий метод:

Код:
@Override
    public boolean addExpAndSp(long addToExp, int addToSp)
    {
        float ratioTakenByPet = 0;

        //Player is Gm and acces level is below or equal to GM_DONT_TAKE_EXPSP and is in party, don't give Xp/Sp
        L2PcInstance activeChar = getActiveChar();
        if(!activeChar.getAccessLevel().canGainExp() && activeChar.isInParty())
            return false;

        // if this player has a pet that takes from the owner's Exp, give the pet Exp now

        if(activeChar.getPet() instanceof L2PetInstance)
        {
            L2PetInstance pet = (L2PetInstance) activeChar.getPet();
            ratioTakenByPet = pet.getPetData().getOwnerExpTaken();

            // only give exp/sp to the pet by taking from the owner if the pet has a non-zero, positive ratio
            // allow possible customizations that would have the pet earning more than 100% of the owner's exp/sp
            if(ratioTakenByPet > 0 && !pet.isDead())
            {
                pet.addExpAndSp((long) (addToExp * ratioTakenByPet), (int) (addToSp * ratioTakenByPet));
            }

            // now adjust the max ratio to avoid the owner earning negative exp/sp
            if(ratioTakenByPet > 1)
            {
                ratioTakenByPet = 1;
            }

            addToExp = (long) (addToExp * (1 - ratioTakenByPet));
            addToSp = (int) (addToSp * (1 - ratioTakenByPet));

            pet = null;
        }

        if(!super.addExpAndSp(addToExp, addToSp))
            return false;

        // Send a Server->Client System Message to the L2PcInstance
        SystemMessage sm = new SystemMessage(SystemMessageId.YOU_EARNED_S1_EXP_AND_S2_SP);
        sm.addNumber((int) addToExp);
        sm.addNumber(addToSp);
        getActiveChar().sendPacket(sm);
        sm = null;

        activeChar = null;

        return true;
    }

Подскажите, как сделать проверку на определенный инстанс, допустим L2Guard, и если игрок убивает именно L2Guard - то надпись об получении экспы и сп не выводится. В противном случае (убийство любых других инстансов типа мобов - надпись выводилась стандартно как есть).
Заранее примного благодарен!
clan: Soprano :redlol:
Ответ
#2
Эту проверку надо не тут делать, а там от куда дергается этот метод.
Ответ
#3
Код:
// Send a Server->Client System Message to the L2PcInstance
if(!(npc instanceof L2Guard))
{
        SystemMessage sm = new SystemMessage(SystemMessageId.YOU_EARNED_S1_EXP_AND_S2_SP);
        sm.addNumber((int) addToExp);
        sm.addNumber(addToSp);
        getActiveChar().sendPacket(sm);
}

Это уберет само сообщение... минимальный примитив.
Ответ
#4
pchayka,спс!!!

Цитата:Эту проверку надо не тут делать, а там от куда дергается этот метод.
почему же? в любом случае он будет дергаться но уже с поправкой=)
clan: Soprano :redlol:
Ответ
#5
doDie Написал:pchayka,спс!!!


почему же? в любом случае он будет дергаться но уже с поправкой=)
Потому, что в этом методе не известно за что дали экспу, за убийство моба или может быть из квеста.
По этому в любом случае придется где то "выше" делать проверку, либо добавить в метод пар-ры.
Ответ
#6
rage прав, тут нужно менять сигнатуру метода и передавать источник опыта, чтобы проверять его. на уровень выше толку нет проверять, т.к. отправка самого сообещния тут.
Ответ
#7
pchayka Написал:rage прав, тут нужно менять сигнатуру метода и передавать источник опыта, чтобы проверять его. на уровень выше толку нет проверять, т.к. отправка самого сообещния тут.
Я так понимаю автор хочет из гвардов сделать что то типа игроков и не только убрать мессадж о получении опыта но и вообще убрать получение опыта с гвардов. Так, что можно проверку и повыше написать, что бы метод не дергалсь вообще. Либо как уже сказано передавать в метод источник опыта.
Ответ
#8
Добавьте проверку "до" этого метода, где есть нпц которго убили, там срезать по классу.
Ответ
#9
Цитата:Потому, что в этом методе не известно за что дали экспу, за убийство моба или может быть из квеста.
По этому в любом случае придется где то "выше" делать проверку, либо добавить в метод пар-ры.
немного не понял.. какая разница квест или еще что-то.

главное что тип инстанса L2Guard, и все остальные проверки - не сыграют роли. я не прав?

Цитата:и не только убрать мессадж о получении опыта но и вообще убрать получение опыта с гвардов
с гвардов всегда дает 0 XP и 0 SP. смысл убирать что-то кроме самой надписи?Smile ведь экспа за убийство походу вообще в дб указать можно, если там ноль то и помех нет.

Цитата:Так, что можно проверку и повыше написать, что бы метод не дергалсь вообще. Либо как уже сказано передавать в метод источник опыта.
простите, немного не понял как этоSad
clan: Soprano :redlol:
Ответ
#10
Код:
с гвардов всегда дает 0 XP и 0 SP. смысл убирать что-то кроме самой надписи?
Если она вам так мешает сделайте

Код:
if(exp>0)
{
   // ....... sending message
}
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Нужно убрать надпись onetwo 3 2,212 04-14-2013, 03:42 PM
Последний пост: onetwo
  Сообщение при получении уровня Nasdomlan 7 1,521 04-03-2013, 06:42 PM
Последний пост: Nasdomlan
  Убрать надпись, о версии БД strelock 0 1,335 02-17-2011, 08:56 PM
Последний пост: strelock
  Надпись при логине Navakasi 1 2,076 08-02-2009, 07:55 PM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)