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

 
Ответить в эту темуОткрыть новую тему
> Clothings Items And Durability Damage
mentirosso
сообщение 26.2.2012, 14:56
Сообщение #1


***

Novice
Сообщений: 60
Регистрация: 23.7.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.030



Всем привет, столкнулся с проблемой сервер одним словом засрали дез робами и т.д. вообщем клоз вещами они перестали ценится решил добавить в BaseClothing.cs durability. Все это хорошо все работает на вещах появилась дурабилити, но второй задачей стала как реализовать absorb durability? Аналогичным способом мы делали для бижутерии добавили метод onhit в BaseJewel и добавили проверку в BaseWeapon, на бижутерии дурабилити отнимается как надо но вот не выходит этим способом реализовать на всех вещах сделаных из Cloting.
Еще что хочу заметить что на всех Hats durability отнимается но не на робах и плащах.

Вот кусок кода онhit BaseCloth:
Код

public virtual int OnHit( BaseWeapon weapon, int damageTaken )
        {
            int Absorbed = Utility.RandomMinMax( 1, 4 );
            //double HalfAr = ClothingRating / 2.0;
            //int Absorbed = (int)(HalfAr + HalfAr*Utility.RandomDouble());

            damageTaken -= Absorbed;

            if ( damageTaken < 0 )
                damageTaken = 0;
                
            if ( Absorbed < 2 )
                Absorbed = 2;

            if ( 25 > Utility.Random( 100 ) ) // 25% chance to lower durability
            {
                if ( Core.AOS && m_AosClothingAttributes.SelfRepair > Utility.Random( 10 ) )
                {
                    HitPoints += 2;
                }
                else
                {
                    int wear;

                    if ( weapon.Type == WeaponType.Bashing )
                        wear = Absorbed / 1;
                    else
                        wear = Utility.Random( 1 );

                    if ( wear > 0 && m_MaxHitPoints > 0 )
                    {
                        if ( m_HitPoints >= wear )
                        {
                            HitPoints -= wear;
                            wear = 0;
                        }
                        else
                        {
                            wear -= HitPoints;
                            HitPoints = 0;
                        }

                        if ( wear > 0 )
                        {
                            if ( m_MaxHitPoints > wear )
                            {
                                MaxHitPoints -= wear;

                                if ( Parent is Mobile )
                                    ((Mobile)Parent).LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061121 ); // Your equipment is severely damaged.
                            }
                            else
                            {
                                Delete();
                            }
                        }
                    }
                }
            }

            return damageTaken;
        }


И кусок с BaseWeapon.cs:

Код

public virtual int AbsorbDamageAOS( Mobile attacker, Mobile defender, int damage )
        {
            bool blocked = false;

            if ( defender.Player || defender.Body.IsHuman )
            {
                blocked = CheckParry( defender );

                if ( blocked )
                {
                    defender.FixedEffect( 0x37B9, 10, 16 );
                    damage = 0;

                    // Successful block removes the Honorable Execution penalty.
                    HonorableExecution.RemovePenalty( defender );

                    if ( CounterAttack.IsCountering( defender ) )
                    {
                        BaseWeapon weapon = defender.Weapon as BaseWeapon;

                        if ( weapon != null )
                        {
                            defender.FixedParticles(0x3779, 1, 15, 0x158B, 0x0, 0x3, EffectLayer.Waist);
                            weapon.OnSwing( defender, attacker );
                        }

                        CounterAttack.StopCountering( defender );
                    }

                    if ( Confidence.IsConfident( defender ) )
                    {
                        defender.SendLocalizedMessage( 1063117 ); // Your confidence reassures you as you successfully block your opponent's blow.

                        double bushido = defender.Skills.Bushido.Value;

                        defender.Hits += Utility.RandomMinMax( 1, (int)(bushido / 12) );
                        defender.Stam += Utility.RandomMinMax( 1, (int)(bushido / 5) );
                    }

                    BaseShield shield = defender.FindItemOnLayer( Layer.TwoHanded ) as BaseShield;

                    if ( shield != null )
                    {
                        shield.OnHit( this, damage );
                    }
                }
            }

            if ( !blocked )
            {
                double positionChance = Utility.RandomDouble();

                Item armorItem;

                if( positionChance < 0.07 )
                    armorItem = defender.NeckArmor;
                else if( positionChance < 0.14 )
                    armorItem = defender.HandArmor;
                else if( positionChance < 0.28 )
                    armorItem = defender.ArmsArmor;
                else if( positionChance < 0.43 )
                    armorItem = defender.HeadArmor;
                else if( positionChance < 0.65 )
                    armorItem = defender.LegsArmor;
                else
                    armorItem = defender.ChestArmor;

                IWearableDurability armor = armorItem as IWearableDurability;
                
                if ( armor != null )
                    armor.OnHit( this, damage ); // call OnHit to lose durability
                    
                
                /* BaseJewel call OnHit to lose durability */
                BaseJewel jewelRing = defender.FindItemOnLayer( Layer.Ring ) as BaseJewel;
                
                BaseJewel jewelNecklace = defender.FindItemOnLayer( Layer.Neck ) as BaseJewel;
                
                BaseJewel jewelEarrings = defender.FindItemOnLayer( Layer.Earrings ) as BaseJewel;
                
                BaseJewel jewelBracelet = defender.FindItemOnLayer( Layer.Bracelet ) as BaseJewel;
                
                //BaseClothing clothRobe = defender.FindItemOnLayer( Layer.Robe ) as BaseClothing;
                


                if ( jewelRing != null )
                {
                    jewelRing.OnHit( this, damage );
                }
                
                if ( jewelNecklace != null )
                {
                    jewelNecklace.OnHit( this, damage );
                }
                
                if ( jewelEarrings != null )
                {
                    jewelEarrings.OnHit( this, damage );
                }
                
                if ( jewelBracelet != null )
                {
                    jewelBracelet.OnHit( this, damage );
                }    
                
                //if ( clothRobe != null )
                //{
                //    clothRobe.OnHit( this, damage );
                //}
            }

            return damage;
        }
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 26.2.2012, 19:56
Сообщение #2


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22568
Из: Северная Корея
Пользователь №: 11.273



у шапки Layer = Layer.Hat;
у роб, дез роб и т.п. Layer = Layer.OuterTorso;
Следовательно, нужно вписать этот вид в проверку, где уже перечислены прочие лаеры.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mentirosso
сообщение 26.2.2012, 21:39
Сообщение #3


***

Novice
Сообщений: 60
Регистрация: 23.7.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.030



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

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

 

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