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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Animal Tameng System
ReSpoT
сообщение 13.4.2009, 7:12
Сообщение #1


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Скачал с рауно систему для таменга (включает в себя уровни петам, шринки ну и вапще много чего), все ето добро под мл-вский дефолт итти не хотело, пришлось доделывать. Переделал, все запустилось, все оказалось рабочее.. но вот при тесте стало видно, что не совсем все работает...
Вот прошу помощи по таким вопросам :
1) Как сделать чтобы кол-во експы необходимое мобайлу на лвл росло с каждым полученным лвл.
2) Как сделать чтобы чем сильнее моб тем больше ему надо експы на лвл.
3) Как поменять необходимый експ на первый лвл (чтоб он изменялся в зависимости от силы мобайла)

вроде бы все.

Сообщение отредактировал ReSpoT - 14.6.2009, 13:14
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 13.4.2009, 7:26
Сообщение #2


********

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



Требуемая экспа с каждым левелом и так вроде растет. В PetLeveling.cs:
Код
int nextLevel = attacker.NextLevel * attacker.Level;

Да и все остальное можно отрегулировать в этом же файле. Вопрос только в том насколько это впишется в существующую систему
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 13.4.2009, 8:17
Сообщение #3


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Нуда точно, експ на след лвл растет, я етого не заметил. но серавно пету даже на 30 лвл достаточно убить 1 любого мобайлса. Но как вот сделать чтобы пету на первый лвл надо было больше експ
слабым, крысе например 3000 експы.
А сильным CuSidhe например 30000,
И не понятно как сделать чтобы кол-во експы требуемое на след уровень увеличивалось скажем на величину равную експе необходимой на предыдущий лвл.
И еще как сделать чтобы пет не получал експу если разница в Fame у убитого мобайла и пета больше чем 5000
?????
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 13.4.2009, 8:35
Сообщение #4


********

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



Думаю это вопрос математики и твоей фантазии, а не программирования или RunUO. Поменяй формулу, привязав "int nextLevel" не к текущему и следующему уровням существа, а к его статам например. Что-нибудь вроде
Код
int nextLevel = ( attacker.Str + attacker.Dex + attacker.Int ) * 100 * attacker.Level + ( attacker.Str + attacker.Dex + attacker.Int ) * 100 * ( attacker.Level - 1 );

Тогда например при сумме скиллов в 100 распределение будет следующим:
2 уровень = 1000 опыта;
3 уровень = 2000 + 1000 опыта;
4 уровень = 3000 + 2000 опыта;
5 уровень = 4000 + 3000 опыта;

Надо экспериментировать, подбирать
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 13.4.2009, 9:08
Сообщение #5


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Вот с получением експы почти разобрался. но вот проблема: пет не может получить даж первый лвл
т.к. не определенно скока ему надо експы на лвл
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 13.4.2009, 10:02
Сообщение #6


********

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



То что там отображается рассчитывается по той же формуле. Не идет экспа или не получаешь уровень - это все регулируется в PetLeveling.cs
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 13.4.2009, 16:45
Сообщение #7


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Вот как я понял ето дело :
Код
expgainmin = bc.HitsMax * 1;
                    expgainmax = bc.HitsMax * 5;

тут расщет експы от хп мобайла
Код
if ( attacker.Level <= attacker.MaxLevel - 1 && bc.Fame - attacker.Fame >= 4000 )

тут показываеца при каких условиях будет начисляца експа пету
Код
int nextLevel = attacker.NextLevel * attacker.Level;

тут показывает сколько надо будет експы чтобы пет получил новый уровень
Код
if ( attacker.Exp >= nextLevel && attacker.Level <= attacker.MaxLevel - 1 )

тут что будет если у пета експы набереца на точто требует след.лвл
Код
 attacker.Level += 1;

тут показываеца как будут добавляца уровни пету
Код
attacker.Exp = 0;

тут видимо то сколько експы у пета.

Где-то я не правильно понял ?

Не могу сделать, чтобы пету "было куда стремица" т.е. даж в гампе не отображаеца сколько ему надо експы на некст лвл. У меня все получаеца либо пет просто набирает експу, а уровень не поднимаеца, либо пет убивая моба за которого експу не дают получает уровень, либо за убийство любого моба получает уровень.
Помогите плз разобраца
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 13.4.2009, 17:15
Сообщение #8


********

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



Понял все правильно, и в гампе все должно отражаться правильно. Запость измененные файлы, посмотрим где не так считает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 13.4.2009, 17:43
Сообщение #9


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Понял в чем была ошибка, в basecreature не было описания этого самого некстлвл
Код
            #region FS:ATS Edits
            if (this.Tamable == true)
            {
                if (this.NextLevel == 0)
                {
                    int totalstats = this.Str + this.Dex + this.Int + this.HitsMax + this.StamMax + this.ManaMax + this.PhysicalResistance + this.FireResistance + this.ColdResistance + this.EnergyResistance + this.PoisonResistance + this.DamageMin + this.DamageMax + this.VirtualArmor;
                    int nextlevel = totalstats * 10;

                    this.NextLevel = nextlevel;
                }

                if (this.MaxLevel == 0)
                {
                    this.MaxLevel = Utility.RandomMinMax(10, 30);
                }

после вставки етого изменения все заработало (IMG:style_emoticons/default/smile.gif)
Но возникла еще одна проблемка :
Затаймленные петы - криминалы, и отмываца от него не хотят.
Как ето устранить можно ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NonExistencE
сообщение 13.4.2009, 20:31
Сообщение #10


******

Группа: Пользователи
Наличность: 0
Пользователь №: 10.626



ищи в бейскриэйчер, в эвентах где после таминга присваиваеться criminal true, это идет в таймере, там сбой пошел у тебя какойто, и таймер не вызываеться, а крим вешаеться =) Чтобы исправить, поправь таймер, или напиши новый, чтобы снимал крима через опр вермя, но такой вариант будет снимать ЛЮБОЙ крим статус(тоесть даже от удара синего и тп), через это время)


--------------------
2.3 – Запрещено размещение ссылок в подписи на сторонние ресурсы
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 14.4.2009, 11:46
Сообщение #11


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Вот после того как доделал ету систему, решил проверить ее с сейвами самого серва, загрузил сейвы с хоста и вот что я получил :
Код
Exception:
System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
   в Server.Mobiles.LesserHiryu.<Deserialize>b__1()
   в Server.Timer.DelayCallTimer.OnTick()
   в Server.Timer.Slice()
   в Server.Core.Main(String[] args)

нужна помощь
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.4.2009, 12:41
Сообщение #12


********

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



В LesserHiryu.cs в методе Deserialize попробуй заменить
Код
if( version <= 1 )
    Timer.DelayCall( TimeSpan.Zero, delegate { InternalItem.Hue = this.Hue; } );

на
Код
if( version <= 1 )
    Timer.DelayCall( TimeSpan.Zero, delegate { if( InternalItem != null ) InternalItem.Hue = this.Hue; } );
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 14.4.2009, 13:04
Сообщение #13


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



вот как у меня выгляит метод Deserialize в LesserHiryu.cs
Код
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
            int version = reader.ReadInt();

            if( version == 0 )
                Timer.DelayCall( TimeSpan.Zero, delegate { Hue = GetHue(); } );

            if (version <= 1)
                Timer.DelayCall(TimeSpan.Zero, delegate { if (InternalItem != null) InternalItem.Hue = this.Hue; });
        }

вот так он выглядел до правки
Код
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
            int version = reader.ReadInt();

            if( version == 0 )
                Timer.DelayCall( TimeSpan.Zero, delegate { Hue = GetHue(); } );

            if( version <= 1 )
                Timer.DelayCall( TimeSpan.Zero, delegate { InternalItem.Hue = this.Hue; } );
        }

но тотже краш серавно
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.4.2009, 13:10
Сообщение #14


********

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



Может так (IMG:style_emoticons/default/smile.gif)
Код
Timer.DelayCall( TimeSpan.Zero, delegate { if( InternalItem != null ) InternalItem.Hue = this.Hue; } );

на
Код
Timer.DelayCall( TimeSpan.Zero, delegate { if( this != null && !this.Deleted && InternalItem != null ) InternalItem.Hue = this.Hue; } );


P.S. Чуть исправил

Сообщение отредактировал Soteric - 14.4.2009, 13:13
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 14.4.2009, 15:46
Сообщение #15


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



эх, и ето не помогло - аналогичный краш (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.4.2009, 15:49
Сообщение #16


********

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



Убери это вообще (IMG:style_emoticons/default/smile.gif)
Код
 if( version == 0 )
                Timer.DelayCall( TimeSpan.Zero, delegate { Hue = GetHue(); } );

            if( version <= 1 )
                Timer.DelayCall( TimeSpan.Zero, delegate { InternalItem.Hue = this.Hue; } );
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 14.4.2009, 22:13
Сообщение #17


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Ето помогло. Крашей не стало.
Запустил сервер, но после авторестарта выдает вот такую штуку
Код
World: Loading...An error was encountered while loading a saved object
-Type: Server.Mobiles.Nightmare
- Serial: 0x000115A7
Delete the object? (y/n)

и так он просит удалять и удалять и удалять.. всех!!!
изза чего ? помогите как ето устранить (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.4.2009, 22:50
Сообщение #18


********

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



Видимо что-то сделал не так с сериализацией в BaseCreature.cs. Запость его
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ReSpoT
сообщение 14.4.2009, 22:54
Сообщение #19


*****

Группа: Пользователи
Наличность: 0
Пользователь №: 11.559
Возраст: 23



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.4.2009, 23:01
Сообщение #20


********

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



Вот это сериализовано
Код
// Version 17 FS:ATS EDITS
            writer.Write((bool)m_IsMating);
            writer.Write((int)m_ABPoints);
            writer.Write((int)m_Exp);
            writer.Write((int)m_NextLevel);
            writer.Write((int)m_Level);
            writer.Write((int)m_MaxLevel);
            writer.Write((bool)m_AllowMating);
            writer.Write((bool)m_Evolves);
            writer.Write((int)m_Gen);
            writer.Write((DateTime)m_MatingDelay);
            writer.Write((int)m_Form1);
            writer.Write((int)m_Form2);
            writer.Write((int)m_Form3);
            writer.Write((int)m_Form4);
            writer.Write((int)m_Form5);
            writer.Write((int)m_Form6);
            writer.Write((int)m_Form7);
            writer.Write((int)m_Form8);
            writer.Write((int)m_Form9);
            writer.Write((int)m_Sound1);
            writer.Write((int)m_Sound2);
            writer.Write((int)m_Sound3);
            writer.Write((int)m_Sound4);
            writer.Write((int)m_Sound5);
            writer.Write((int)m_Sound6);
            writer.Write((int)m_Sound7);
            writer.Write((int)m_Sound8);
            writer.Write((int)m_Sound9);
            writer.Write((bool)m_UsesForm1);
            writer.Write((bool)m_UsesForm2);
            writer.Write((bool)m_UsesForm3);
            writer.Write((bool)m_UsesForm4);
            writer.Write((bool)m_UsesForm5);
            writer.Write((bool)m_UsesForm6);
            writer.Write((bool)m_UsesForm7);
            writer.Write((bool)m_UsesForm8);
            writer.Write((bool)m_UsesForm9);
            writer.Write((bool)m_F0);
            writer.Write((bool)m_F1);
            writer.Write((bool)m_F2);
            writer.Write((bool)m_F3);
            writer.Write((bool)m_F4);
            writer.Write((bool)m_F5);
            writer.Write((bool)m_F6);
            writer.Write((bool)m_F7);
            writer.Write((bool)m_F8);
            writer.Write((bool)m_F9);
            writer.Write((int)m_RoarAttack);
            writer.Write((int)m_PetPoisonAttack);
            writer.Write((int)m_FireBreathAttack);

но отсутствует в десериализации
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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