Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Возможность одевать наемника
Sergius Grey
сообщение 24.8.2015, 17:58
Сообщение #1


****

Apprentice
Сообщений: 149
Регистрация: 20.6.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.734
Возраст: 23



Приветствую всех! Вновь через много времени вынужден помучить вас снова.

Ранка 2.0
Суть проблемы:
Сделал я наемников по типу петов (тейм, бондед). Они гуманоиды (бодивейл 400 и 401 соответственно).
Сразу же понял, что со временем на них снаряжение кончится - сломается и слетит. Сделал им отдельные шмотки без прочности, прилочил к ним (movable false). Сделал вендера который их продает а так же которому их можно ставить как в стойло лошадей. Но все же хочется большего - одевать их самому, как вендеров. Просто открывая пепердол и снимать и одевать, без всяких заморочек. Рылся в коде вендеров - не одуплил. И не хочется разумеется много кода, хочется максимально чисто и просто это прописать.
Есть мысль сделать на основе аццес левел гейммастер для владельца наемника, но мои знания скудны в шарпе... Буду благодарен, если кто либо согласится помочь с этим.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergius Grey
сообщение 24.8.2015, 18:32
Сообщение #2


****

Apprentice
Сообщений: 149
Регистрация: 20.6.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.734
Возраст: 23



Нашел следующее, возможно на основе этого как то прописать условие? Вместо проверки на дом вписать проверку на владельца пета, но что именно вписать? =(

Код
public override bool AllowEquipFrom( Mobile from )
        {
            if ( BaseHouse.NewVendorSystem && IsOwner( from ) )
                return true;

            return base.AllowEquipFrom( from );
        }
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 24.8.2015, 18:49
Сообщение #3


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Код
public override bool AllowEquipFrom( Mobile from )
{
  return ControlMaster == from || base.AllowEquipFrom(from);
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergius Grey
сообщение 24.8.2015, 18:57
Сообщение #4


****

Apprentice
Сообщений: 149
Регистрация: 20.6.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.734
Возраст: 23



Большое спасибо! Работает. Стыдно за подобные вопросы, но охота сделать сильнее чувства стыда =)
Правда снять с наемника все равно нельзя, пишет мол скила воровства не хватает. Я думал что AllowEquipFrom отвечает и за снятие вещей и за одевание. Буду искать метод снятия вещей, как понимаю там можно сделать по аналогии.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 24.8.2015, 19:06
Сообщение #5


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Попробуй переопределить
Код
public virtual bool CheckNonlocalLift( Mobile from, Item item )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergius Grey
сообщение 24.8.2015, 20:20
Сообщение #6


****

Apprentice
Сообщений: 149
Регистрация: 20.6.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.734
Возраст: 23



Что я только не вписывал - не работает. НО: решил я просто скопировать весь регион с бекпеком который у пекхорсов или жуков, там как раз используется CheckNonlocalLift (копирования оттуда которого так же ничего не дало), и вуаля - все заработало. А добавил я именно вот весь этот код (на бекпек):

Код
#region Pack Animal Methods
        public override bool OnBeforeDeath()
        {
            if ( !base.OnBeforeDeath() )
                return false;

            PackAnimal.CombineBackpacks( this );

            return true;
        }

        public override DeathMoveResult GetInventoryMoveResultFor( Item item )
        {
            return DeathMoveResult.MoveToCorpse;
        }

        public override bool IsSnoop( Mobile from )
        {
            if ( PackAnimal.CheckAccess( this, from ) )
                return false;

            return base.IsSnoop( from );
        }

        public override bool OnDragDrop( Mobile from, Item item )
        {
            if ( CheckFeed( from, item ) )
                return true;

            if ( PackAnimal.CheckAccess( this, from ) )
            {
                AddToBackpack( item );
                return true;
            }

            return base.OnDragDrop( from, item );
        }

        public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
        {
            return PackAnimal.CheckAccess( this, from );
        }

        public override bool CheckNonlocalLift( Mobile from, Item item )
        {
            return PackAnimal.CheckAccess( this, from );
        }

        public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
        {
            base.GetContextMenuEntries( from, list );

            PackAnimal.GetContextMenuEntries( this, from, list );
        }
        #endregion


Я конечно и так планировал добавить им бекпеки, но теперь буду уже из этого всего смотреть на то, что именно отвечает за снятие итема с пепердола. Еще раз большое спасибо за помощь!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 22:56
Designed by Nickostyle