Вытянуть значение из базы - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Архив

Архив Темы с сомнительной полезностью.

Ответ
Опции темы
Непрочитано 26.06.2011, 22:09   #11
Аватар для Aaron
Пользователь

Автор темы (Топик Стартер) Re: Вытянуть значение из базы

Azagthtot, Вы правы, проще будет, если "озвучу" свою предконечную цель.
Хотел реализовать похожее на GvE мод. Тобишь если у чаров совпадают SpiritId то они не могут атаковать друг друга, если разные, то могут.

У меня получалось похожее реализовать в PcInstance, но получалось так, что схожие ID просто не могут убить друг друга, а атаковать могут.
Мои догадки привели меня к файлу AttackRequest - что там нужно делать ту самую проверку на SpiritId. Будте добры, подскажите прав я или нет и где нужно делать эту саму проверку на SpiritId ?
Aaron вне форума Отправить сообщение для Aaron с помощью ICQ Ответить с цитированием
Непрочитано 26.06.2011, 22:23   #12
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Вытянуть значение из базы

Цитата:
Сообщение от Array Посмотреть сообщение
Так наверное отмечается
Приватный или защищенный метод\свойство.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 26.06.2011, 22:30   #13
Аватар для Azagthtot
Эксперт

По умолчанию Re: Вытянуть значение из базы

Цитата:
Сообщение от Aaron Посмотреть сообщение
Azagthtot, Вы правы, проще будет, если "озвучу" свою предконечную цель.
Хотел реализовать похожее на GvE мод. Тобишь если у чаров совпадают SpiritId то они не могут атаковать друг друга, если разные, то могут.

У меня получалось похожее реализовать в PcInstance, но получалось так, что схожие ID просто не могут убить друг друга, а атаковать могут.
Мои догадки привели меня к файлу AttackRequest - что там нужно делать ту самую проверку на SpiritId. Будте добры, подскажите прав я или нет и где нужно делать эту саму проверку на SpiritId ?
Ну я так и думал. Однако, вы не правы. Точнее правы, но частично.
Вам надо проверку ставить "ниже", а конкретно в методе isAutoAttackable() и второе в методе addDamageHate() класса L2PcInstance
В первом за то можно ли атаковать чара, а во втором, что бы случайно ему скиллом не снесло жизнь.
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 27.06.2011, 03:11   #14
Аватар для Aaron
Пользователь

Автор темы (Топик Стартер) Re: Вытянуть значение из базы

Господа, подскажите, из-за чего может быть такое :
При создании чара сервер выдаёт такую ошибку -
Unknown Packet : d0:3d on State : AUTHED Client

* Всё, разобрался сам. Клиент не подходил ))

Добавлено через 13 часов 53 минуты
Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Ну я так и думал. Однако, вы не правы. Точнее правы, но частично.
Вам надо проверку ставить "ниже", а конкретно в методе isAutoAttackable() и второе в методе addDamageHate() класса L2PcInstance
В первом за то можно ли атаковать чара, а во втором, что бы случайно ему скиллом не снесло жизнь.
Уважаемый Azagthtot, в сервере L2j T2.4 , есть только такой isAutoAttackable. ( В IT находил ещё один isAutoAttackable(player) ).

PHP код:
    public boolean isAutoAttackable(L2Character attacker)
    {

        
// Check if the attacker isn't the L2PcInstance Pet
        
if (attacker == this || attacker == getPet())
            return 
false;
    
        
// TODO: check for friendly mobs
        // Check if the attacker is a L2MonsterInstance
        
if (attacker instanceof L2MonsterInstance)
            return 
true;

        
// Check if the attacker is not in the same party
        
if (getParty() != null && getParty().getPartyMembers().contains(attacker))
            return 
false;

        
// Check if the attacker is in olympia and olympia start
        
if (attacker instanceof L2PcInstance && ((L2PcInstance)attacker).isInOlympiadMode() ){
            if (
isInOlympiadMode() && isOlympiadStart() && ((L2PcInstance)attacker).getOlympiadGameId()==getOlympiadGameId())
                return 
true;
            else
                return 
false;
        }

        
// Check if the attacker is in TvT and TvT is started
        
if (TvTEvent.isStarted() && TvTEvent.isPlayerParticipant(getObjectId()))
            return 
true;

        
// Check if the attacker is not in the same clan
        
if (getClan() != null && attacker != null && getClan().isMember(attacker.getObjectId()))
            return 
false;

        if(
attacker instanceof L2Playable && isInsideZone(ZONE_PEACE))
            return 
false;

        
// Check if the L2PcInstance has Karma
        
if (getKarma() > || getPvpFlag() > 0)
            return 
true;

        
// Check if the attacker is a L2Playable
        
if (attacker instanceof L2Playable)
        {
            
// Get L2PcInstance
            
L2PcInstance cha attacker.getActingPlayer();
            
            
// is AutoAttackable if both players are in the same duel and the duel is still going on
            
if ( getDuelState() == Duel.DUELSTATE_DUELLING
                    
&& getDuelId() == cha.getDuelId())
                return 
true;
            
// Check if the L2PcInstance is in an arena or a siege area
            
if (isInsideZone(ZONE_PVP) && cha.isInsideZone(ZONE_PVP))
                return 
true;

            if (
getClan() != null)
            {
                
Siege siege SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
                if (
siege != null)
                {
                    
// Check if a siege is in progress and if attacker and the L2PcInstance aren't in the Defender clan
                    
if (siege.checkIsDefender(cha.getClan()) &&
                            
siege.checkIsDefender(getClan()))
                        return 
false;

                    
// Check if a siege is in progress and if attacker and the L2PcInstance aren't in the Attacker clan
                    
if (siege.checkIsAttacker(cha.getClan()) &&
                            
siege.checkIsAttacker(getClan()))
                        return 
false;
                }

                
// Check if clan is at war
                
if (getClan() != null && cha.getClan() != null
                                           
&& getClan().isAtWarWith(cha.getClanId())
                                           && 
cha.getClan().isAtWarWith(getClanId())
                                           && 
getWantsPeace() == 0
                                           
&& cha.getWantsPeace() == 0
                                           
&& !isAcademyMember())
                return 
true;
            }
        }
        else if (
attacker instanceof L2DefenderInstance)
        {
            if (
getClan() != null)
            {
                
Siege siege SiegeManager.getInstance().getSiege(this);
                return (
siege != null && siege.checkIsAttacker(getClan()));
            }
        }
        return 
false;
    } 

Не могу разобраться, как при выполнении проверки, сравнивать getSpiritId игрока и чара выбранного по таргету ?
Я пытался сделать таким образом :

PHP код:
if (getSpiritId() != target.getSpiritId()) 
Пробывал и targetPlayer... Либо я не туда вписываю, либо таргет не предусмотрен в isAutoAttackable. Прошу, подскажите в чём я заблуждаюсь и по возможности укажите выход из "тупика".
Благодарю.

Последний раз редактировалось Aaron; 27.06.2011 в 17:04. Причина: Добавлено сообщение
Aaron вне форума Отправить сообщение для Aaron с помощью ICQ Ответить с цитированием
Непрочитано 27.06.2011, 17:47   #15
Аватар для Array
Супергерой

По умолчанию Re: Вытянуть значение из базы

В функцию передается не target, а attacker.
public boolean isAutoAttackable(L2Character attacker)
Code: Java
Тогда будет:
if (getSpiritId() == attacker.getSpiritId())
    return false;
Code: Java
Эту проверку поставить лучше после проверки на TvT.

Фэйл, не тот класс =\

Последний раз редактировалось Array; 27.06.2011 в 18:31.
Array вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 27.06.2011, 17:51   #16
Аватар для Azagthtot
Эксперт

По умолчанию Re: Вытянуть значение из базы

Aaron,
оффтоп:
Свернуть ↑Развернуть ↓
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 27.06.2011, 18:10   #17
Аватар для Aaron
Пользователь

Автор темы (Топик Стартер) Re: Вытянуть значение из базы

Цитата:
Сообщение от Array Посмотреть сообщение
В функцию передается не target, а attacker.
public boolean isAutoAttackable(L2Character attacker)
Code: Java
Тогда будет:
if (getSpiritId() == attacker.getSpiritId())
    return false;
Code: Java
Эту проверку поставить лучше после проверки на TvT.
Сделал после проверки на TvT, но снова выдаёт ошибку, что SpiritId не найден. Хотя я его прописал.

Цитата:
C:\Server-Amadeus\Amadeus_L2jGraciaFinal(2.4)\L2J_2.4-WorkMe\Source\java\com\l2jserver\gameserver\model\ actor\instance\L2PcInstance.java (8587:34) cannot find symbol
C:\Server-Amadeus\Amadeus_L2jGraciaFinal(2.4)\L2J_2.4-WorkMe\Source\java\com\l2jserver\gameserver\model\ actor\instance\L2PcInstance.java:8587: cannot find symbol
symbol : method getSpiritId()
location: class com.l2jserver.gameserver.model.actor.L2Character
PHP код:
        // Check if the attacker is in TvT and TvT is started
        
if (TvTEvent.isStarted() && TvTEvent.isPlayerParticipant(getObjectId()))
            return 
true;

    
// Attack SpiritId
    
if (getSpiritId() == attacker.getSpiritId())
    return 
false;
     
        
// Check if the attacker is not in the same clan
        
if (getClan() != null && attacker != null && getClan().isMember(attacker.getObjectId()))
            return 
false;

        if(
attacker instanceof L2Playable && isInsideZone(ZONE_PEACE))
            return 
false

Azagthtot, я конечно же с Вами согласен, изучаю. Просто это последнее что мне нужно, остальное я реализовал. Поэтому и спешу побыстрей с этим разобраться.

Спасибо всем за терпение, адекватные ответы и помощь. Очень благодарен.
Aaron вне форума Отправить сообщение для Aaron с помощью ICQ Ответить с цитированием
Непрочитано 27.06.2011, 18:28   #18
Аватар для Azagthtot
Эксперт

По умолчанию Re: Вытянуть значение из базы

Вы понимаете простейшую вещь?
Аксиома 1. Вы определили getSpiritId() в L2PcInstance
Аксиома 2. В isAutoAttackable() передается L2Character
Вы пытаетесь получить getSpiritId() от attacker, который является L2Character
Следствие. Компилятор сомневается в ваших способностях
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 27.06.2011, 22:39   #19
Аватар для Aaron
Пользователь

Автор темы (Топик Стартер) Re: Вытянуть значение из базы

Спасибо всем огромное. Всё получилось.
В L2Character прописал

PHP код:

private int _SpiritId;


public 
int getSpiritId()
    {
        return 
_SpiritId;
    }
public 
int setSpiritId(int SpiritId)
    {
        
_SpiritID SpiritId;
    } 
Этого было достаточно. Спасибо ещё раз - добра и счастья
Aaron вне форума Отправить сообщение для Aaron с помощью ICQ Ответить с цитированием
Непрочитано 27.06.2011, 23:00   #20
Аватар для Azagthtot
Эксперт

По умолчанию Re: Вытянуть значение из базы


Вы уж простите за откровенность, но вы пошли по принципу "Если что-то можно сделать через ж... то надо именно так и делать"
С вашим методом саммоны будут грызть кого угодно.
И так, как стоит сделать
Код:
public boolean isAutoAttackable(L2Character attacker) 
    { 

        // Check if the attacker isn't the L2PcInstance Pet 
        if (attacker == this || attacker == getPet()) 
            return false; 
     
        // TODO: check for friendly mobs 
        // Check if the attacker is a L2MonsterInstance 
        if (attacker instanceof L2MonsterInstance) 
            return true; 

        // Check if the attacker is not in the same party 
        if (getParty() != null && getParty().getPartyMembers().contains(attacker)) 
            return false; 

        // Check if the attacker is in olympia and olympia start 
        if (attacker instanceof L2PcInstance && ((L2PcInstance)attacker).isInOlympiadMode() ){ 
            if (isInOlympiadMode() && isOlympiadStart() && ((L2PcInstance)attacker).getOlympiadGameId()==getOlympiadGameId()) 
                return true; 
            else 
                return false; 
        } 

        // Check if the attacker is in TvT and TvT is started 
        if (TvTEvent.isStarted() && TvTEvent.isPlayerParticipant(getObjectId())) 
            return true; 
                
        if(attacker instanceof L2Playable) {
          L2Player cha = attacker.getActingPlayer();
          if(getSpiritId() == ((L2PcInstance)cha).getSpiritId())
                      return false;
       }
                // Check if clan is at war 

        // Check if the attacker is not in the same clan 
        if (getClan() != null && attacker != null && getClan().isMember(attacker.getObjectId())) 
            return false; 

        if(attacker instanceof L2Playable && isInsideZone(ZONE_PEACE)) 
            return false; 

        // Check if the L2PcInstance has Karma 
        if (getKarma() > 0 || getPvpFlag() > 0) 
            return true; 

        // Check if the attacker is a L2Playable 
        if (attacker instanceof L2Playable) 
        { 
            // Get L2PcInstance 
            L2PcInstance cha = attacker.getActingPlayer(); 
             
            // is AutoAttackable if both players are in the same duel and the duel is still going on 
            if ( getDuelState() == Duel.DUELSTATE_DUELLING 
                    && getDuelId() == cha.getDuelId()) 
                return true; 
            // Check if the L2PcInstance is in an arena or a siege area 
            if (isInsideZone(ZONE_PVP) && cha.isInsideZone(ZONE_PVP)) 
                return true; 

            if (getClan() != null) 
            { 
                Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ()); 
                if (siege != null) 
                { 
                    // Check if a siege is in progress and if attacker and the L2PcInstance aren't in the Defender clan 
                    if (siege.checkIsDefender(cha.getClan()) && 
                            siege.checkIsDefender(getClan())) 
                        return false; 

                    // Check if a siege is in progress and if attacker and the L2PcInstance aren't in the Attacker clan 
                    if (siege.checkIsAttacker(cha.getClan()) && 
                            siege.checkIsAttacker(getClan())) 
                        return false; 
                } 
                if (getClan() != null && cha.getClan() != null 
                                           && getClan().isAtWarWith(cha.getClanId()) 
                                           && cha.getClan().isAtWarWith(getClanId()) 
                                           && getWantsPeace() == 0 
                                           && cha.getWantsPeace() == 0 
                                           && !isAcademyMember()) 
                return true; 
            } 
        } 
        else if (attacker instanceof L2DefenderInstance) 
        { 
            if (getClan() != null) 
            { 
                Siege siege = SiegeManager.getInstance().getSiege(this); 
                return (siege != null && siege.checkIsAttacker(getClan())); 
            } 
        } 
        return false; 
    }
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение desc eleminator Серверная часть 7 31.05.2011 06:05
Базы и брут Nox2236778 Lineage II 17 24.02.2011 21:18
Потерялись базы Wolfas Серверная часть 11 08.09.2010 19:00
Вернуть стандартные значение HP NPC langes Lineage II 0 15.02.2010 00:36
Ошибка базы maxo Lineage II 1 13.12.2008 11:14


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 12:36. Часовой пояс GMT +3.

Вверх