|
WeaponAttributes для армора и прочего |
|
|
Sergius Grey |
28.2.2015, 9:05
|
   
Apprentice
Сообщений: 149
Регистрация: 20.6.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.734
Возраст: 23

|
Снова стал возиться с сервером, хочу реализовать задумка, например, кольцо с хит лайтнингом или перчатки с мана личем.
Собственно вопрос - каким способом можно прописать артефакту WeaponAttributes, ссылаясь на бейс веапон или что то вроде того? В АОС.кс я добавлял из WeaponAttributes в просто АОСатрибутс свойства, они появлялись в пропсе, отображались на вещи, но не давали эффекта. И я понимаю почему. Просто хочется все это сделать с наименьшим количеством кода, это главная задача. А прописывать кучу строк в бейсАрмор и БейсДжевел не хочется, во избежании возможных конфликтов и косяков, которые могут всплыть со временем, так как я не уверен что смогу верно все расписать там. Проще говоря не хочется все это делать "брейнфаковским способом".
Может можно это сделать при помощи методов void OnAdded и void OnRemoved соответственно? Но в идеале хотелось бы, чтоб кольца например просто могли принимать WeaponAttributes при создании новых скриптов артефактов.
В общем если кто может подсказать, как сделать все аккуратненько, напишите пожалуйста способ.
Ранка 2.0
|
|
|
|
|
  |
Ответов
Aimed |
1.3.2015, 2:41
|

        
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 не позволяет выполнить блок. Если будет работать, прийдётся дальше возиться )
|
|
|
|
Сообщений в этой теме
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
|
|