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

> WeaponAttributes для армора и прочего
Sergius Grey
сообщение 28.2.2015, 9:05
Сообщение #1


****

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



Снова стал возиться с сервером, хочу реализовать задумка, например, кольцо с хит лайтнингом или перчатки с мана личем.

Собственно вопрос - каким способом можно прописать артефакту WeaponAttributes, ссылаясь на бейс веапон или что то вроде того?
В АОС.кс я добавлял из WeaponAttributes в просто АОСатрибутс свойства, они появлялись в пропсе, отображались на вещи, но не давали эффекта. И я понимаю почему. Просто хочется все это сделать с наименьшим количеством кода, это главная задача. А прописывать кучу строк в бейсАрмор и БейсДжевел не хочется, во избежании возможных конфликтов и косяков, которые могут всплыть со временем, так как я не уверен что смогу верно все расписать там. Проще говоря не хочется все это делать "брейнфаковским способом".

Может можно это сделать при помощи методов void OnAdded и void OnRemoved соответственно?
Но в идеале хотелось бы, чтоб кольца например просто могли принимать WeaponAttributes при создании новых скриптов артефактов.

В общем если кто может подсказать, как сделать все аккуратненько, напишите пожалуйста способ.

Ранка 2.0
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Aimed
сообщение 1.3.2015, 2:41
Сообщение #2


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5688
Пользователь №: 15.607



Прям мистика какая-то с этим сеттером, я сам из гита ковыряю скрипты, т.к. у меня серьёзный форк стоит, но и там так-же. Как это понимать?))

Цитата(Sergius Grey @ 1.3.2015, 0:32) *

Aimed, черт да, я тупанул я думал у меня там прописано.
Дописал
m_AosWeaponAttributes = new AosWeaponAttributes( this );
Теперь нету Нулл кстати, можно все прописывать. С этим разобрались.
Шмотка добавляется, эффект на ней есть, не отображается правда при наведении но это не так важно, с этим я разберусь.
С этим да, разобрались. Но в итоге щас имеем то же, что у меня и было но с моим кривым способом - эффект прописан, но он не работает, увы... =( Ни один параметр не работает - ни лич какой нибудь, ни фаерэрия, ни хитлайтнинг и все прочее соответственно. В этом то и проблема =(


Вообще-то должно работать, т.к. GetValue по шмоткам перебирает и в методе OnHit в BaseWeapon(где он вызывается), проставляет шансы на твои веп атрибуты:

Код
if ( Core.AOS )
            {
                int lifeLeech = 0;
                int stamLeech = 0;
                int manaLeech = 0;
                int wraithLeech = 0;

                if ( (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLeechHits ) * propertyBonus) > Utility.Random( 100 ) )
                    lifeLeech += 30; // HitLeechHits% chance to leech 30% of damage as hit points

                if ( (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLeechStam ) * propertyBonus) > Utility.Random( 100 ) )
                    stamLeech += 100; // HitLeechStam% chance to leech 100% of damage as stamina

                if ( (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLeechMana ) * propertyBonus) > Utility.Random( 100 ) )
                    manaLeech += 40; // HitLeechMana% chance to leech 40% of damage as mana

                if ( m_Cursed )
                    lifeLeech += 50; // Additional 50% life leech for cursed weapons (necro spell)

                context = TransformationSpellHelper.GetContext( attacker );

                if ( context != null && context.Type == typeof( VampiricEmbraceSpell ) )
                    lifeLeech += 20; // Vampiric embrace gives an additional 20% life leech

                if ( context != null && context.Type == typeof( WraithFormSpell ) )
                {
                    wraithLeech = (5 + (int)((15 * attacker.Skills.SpiritSpeak.Value) / 100)); // Wraith form gives an additional 5-20% mana leech

                    // Mana leeched by the Wraith Form spell is actually stolen, not just leeched.
                    defender.Mana -= AOS.Scale( damageGiven, wraithLeech );

                    manaLeech += wraithLeech;
                }

                if ( lifeLeech != 0 )
                    attacker.Hits += AOS.Scale( damageGiven, lifeLeech );

                if ( stamLeech != 0 )
                    attacker.Stam += AOS.Scale( damageGiven, stamLeech );

                if ( manaLeech != 0 )
                    attacker.Mana += AOS.Scale( damageGiven, manaLeech );

                if ( lifeLeech != 0 || stamLeech != 0 || manaLeech != 0 )
                    attacker.PlaySound( 0x44D );
            }

            if ( m_MaxHits > 0 && ((MaxRange <= 1 && (defender is SlimeOld || defender is AcidElementalOld)) || Utility.Random( 25 ) == 0) ) // Stratics says 50% chance, seems more like 4%..
            {
                if ( MaxRange <= 1 && (defender is SlimeOld || defender is AcidElementalOld) )
                    attacker.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500263 ); // *Acid blood scars your weapon!*

                if ( Core.AOS && m_AosWeaponAttributes.SelfRepair > Utility.Random( 10 ) )
                {
                    HitPoints += 2;
                }
                else
                {
                    if ( m_Hits > 0 )
                    {
                        --HitPoints;
                    }
                    else if ( m_MaxHits > 1 )
                    {
                        --MaxHitPoints;

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

            if ( attacker is VampireBatFamiliar )
            {
                BaseCreature bc = (BaseCreature)attacker;
                Mobile caster = bc.ControlMaster;

                if ( caster == null )
                    caster = bc.SummonMaster;

                if ( caster != null && caster.Map == bc.Map && caster.InRange( bc, 2 ) )
                    caster.Hits += damage;
                else
                    bc.Hits += damage;
            }

            if ( Core.AOS )
            {
                int physChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitPhysicalArea ) * propertyBonus);
                int fireChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitFireArea ) * propertyBonus);
                int coldChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitColdArea ) * propertyBonus);
                int poisChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitPoisonArea ) * propertyBonus);
                int nrgyChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitEnergyArea ) * propertyBonus);

                if ( physChance != 0 && physChance > Utility.Random( 100 ) )
                    DoAreaAttack( attacker, defender, 0x10E,   50, 100, 0, 0, 0, 0 );

                if ( fireChance != 0 && fireChance > Utility.Random( 100 ) )
                    DoAreaAttack( attacker, defender, 0x11D, 1160, 0, 100, 0, 0, 0 );

                if ( coldChance != 0 && coldChance > Utility.Random( 100 ) )
                    DoAreaAttack( attacker, defender, 0x0FC, 2100, 0, 0, 100, 0, 0 );

                if ( poisChance != 0 && poisChance > Utility.Random( 100 ) )
                    DoAreaAttack( attacker, defender, 0x205, 1166, 0, 0, 0, 100, 0 );

                if ( nrgyChance != 0 && nrgyChance > Utility.Random( 100 ) )
                    DoAreaAttack( attacker, defender, 0x1F1,  120, 0, 0, 0, 0, 100 );

                int maChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitMagicArrow ) * propertyBonus);
                int harmChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitHarm ) * propertyBonus);
                int fireballChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitFireball ) * propertyBonus);
                int lightningChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLightning ) * propertyBonus);
                int dispelChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitDispel ) * propertyBonus);

                if ( maChance != 0 && maChance > Utility.Random( 100 ) )
                    DoMagicArrow( attacker, defender );

                if ( harmChance != 0 && harmChance > Utility.Random( 100 ) )
                    DoHarm( attacker, defender );

                if ( fireballChance != 0 && fireballChance > Utility.Random( 100 ) )
                    DoFireball( attacker, defender );

                if ( lightningChance != 0 && lightningChance > Utility.Random( 100 ) )
                    DoLightning( attacker, defender );

                if ( dispelChance != 0 && dispelChance > Utility.Random( 100 ) )
                    DoDispel( attacker, defender );

                int laChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLowerAttack ) * propertyBonus);
                int ldChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLowerDefend ) * propertyBonus);

                if ( laChance != 0 && laChance > Utility.Random( 100 ) )
                    DoLowerAttack( attacker, defender );

                if ( ldChance != 0 && ldChance > Utility.Random( 100 ) )
                    DoLowerDefense( attacker, defender );
            }


У тебя Core.AOS вообще?

Вот эта хрено-конструкция что выше, при каждом ударе вызывается)))

Попробуй ради теста сделай так:
Найди в OnHit:
Код

                int maChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitMagicArrow ) * propertyBonus);
                int harmChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitHarm ) * propertyBonus);
                int fireballChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitFireball ) * propertyBonus);
                int lightningChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitLightning ) * propertyBonus);
                int dispelChance = (int)(AosWeaponAttributes.GetValue( attacker, AosWeaponAttribute.HitDispel ) * propertyBonus);

                if ( maChance != 0 && maChance > Utility.Random( 100 ) )
                    DoMagicArrow( attacker, defender );

                if ( harmChance != 0 && harmChance > Utility.Random( 100 ) )
                    DoHarm( attacker, defender );

                if ( fireballChance != 0 && fireballChance > Utility.Random( 100 ) )
                    DoFireball( attacker, defender );

                if ( lightningChance != 0 && lightningChance > Utility.Random( 100 ) )
                    DoLightning( attacker, defender );


Пропиши себе на на DoLightning, lightningChance 100% что-бы были, остальное можешь хоть закомментить, тоесть у тебя при любом ударе, даже без шмотки на лайт и т.д., всегда должен лайт вылетать.

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

Сообщений в этой теме
Sergius Grey   WeaponAttributes для армора и прочего   28.2.2015, 9:05
Aimed   Снова стал возиться с сервером, хочу реализовать ...   28.2.2015, 14:24
Sergius Grey   Большое спасибо! Только проснулся, щас буду пр...   28.2.2015, 21:34
Sergius Grey   На счет первого способа. Компиляция проходит, но п...   28.2.2015, 22:46
Aimed   Cтоп. Что ты конкретно сделал. Лучше б со скринами...   1.3.2015, 0:32
Sergius Grey   Отрывок из БейсДжевел: { None, StarSapphire, ...   1.3.2015, 1:02
Aimed   А конктрукторы BaseItem & BaseJewel ? public...   1.3.2015, 2:15
Juzzver   get указан, а set отсутствует - по этому в пропсе...   1.3.2015, 2:20
Aimed   get указан, а set отсутствует - по этому в пропсе...   1.3.2015, 2:26
Aimed   get указан, а set отсутствует - по этому в пропсе...   1.3.2015, 3:19
Sergius Grey   Aimed, черт да, я тупанул я думал у меня там пропи...   1.3.2015, 2:32
Sergius Grey   У меня точно АОС, точнее СЕ, МЛ я вырубил только. ...   1.3.2015, 2:59
Juzzver   попробуй добавить в тот блок с Core.AOS: ...   1.3.2015, 3:10
Aimed   А как ты тестишь? С мечом и без кольца и с кольцом...   1.3.2015, 3:31
Juzzver   В моем случае это работает с другими вещами :), с...   1.3.2015, 3:43
Sergius Grey   Тестю во всех возможных вариантах! Juzzver, а...   1.3.2015, 3:47
Aimed   Тестю во всех возможных вариантах! Juzzver, ...   1.3.2015, 4:09
Juzzver   эти блоки с чанасами я копировал из цитату сверху...   1.3.2015, 4:11
Aimed   Код, который запостил Juzzver из метода OnHit в Ba...   1.3.2015, 4:23
Sergius Grey   Aimed Оружие в руках есть, простой даггер, одет пр...   1.3.2015, 4:29
Aimed   можно поподробнее про это? Это я все понял с про...   1.3.2015, 4:45
Sergius Grey   Juzzver, работает то что ты сказал. Я прописал это...   1.3.2015, 4:51
Aimed   Хмм... А помнишь в AosWeaponAttribute.GetValue из...   1.3.2015, 4:59
Sergius Grey   У меня нету очков в моей версии ранки. В общем сп...   1.3.2015, 5:02
Aimed   В любом случаи всем спасибо что помогаете разобр...   1.3.2015, 5:17
Juzzver   Работает без оружия в руке по тому, что Fists(кул...   1.3.2015, 15:23
Sergius Grey   Создал скрипт очков, скопировал этот что ты мне ки...   1.3.2015, 18:09
Aimed   Я ведь правильно понимаю, что скрипт на очки долж...   1.3.2015, 18:50
Sergius Grey   Черт точно, я ж забыл их прописать в аос. Момент. ...   1.3.2015, 19:02
Aimed   Сделай себе строку с дебагом в этом методе. А в иф...   1.3.2015, 19:08


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

 

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