Цитата(Sergius Grey @ 1.3.2015, 1:47)

Тестю во всех возможных вариантах!
Juzzver, а куда конкретно прописать, что то у меня башка уже кругом...
int laChance = (int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitLowerAttack) * propertyBonus);
int ldChance = (int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitLowerDefend) * propertyBonus);
у меня таких строк там вообще нет. Ранка 2.0 финал если что.
На счет отображения не нужно, я если что сделаю. Главное эффект, и чтоб можно было скриптам с артами просто прописывать строчки, а не в ста местах для каждого арта такого затычки делать.
https://drive.google.com/file/d/0B1QGeQJizp...iew?usp=sharingесли кому интересно вот файл АОС, чтоб сюда его не выкладывать кодом а то огромный очень.
Я изначально как сделал - просто скопировал в АОС.кс нужные свойства из AosWeaponAttribute в разделы AosAttribute, и например хитлайтнинг можно было пропсом вписать любой шмотке у которой был раздел AosAttribute. Оно и отображалось, и в пропсе было, и в скрипте оно добавлялось и проходило. Но оно не работало, как собственно и сейчас =(
Конечно не работало, потому что шанс на удар лайтнингом высчитывается только в методе OnHit, который находится в BaseWeapon.
Высчитывается он только через AosWeaponAttribute.
Если ты сделал всё что я сказал - должно работать.
У меня есть вариант, что если ты тестишь с кольцом но без оружия, то OnHit не срабатывает, потому что у тебя нету оружия в руках.
Только внятного кода где видно как определяется оружие в руках, если у тебя в руках ничего нету, я не нашёл кроме:
Код
[CommandProperty( AccessLevel.GameMaster )]
public virtual IWeapon Weapon
{
get
{
Item item = m_Weapon as Item;
if( item != null && !item.Deleted && item.Parent == this && CanSee( item ) )
return m_Weapon;
m_Weapon = null;
item = FindItemOnLayer( Layer.OneHanded );
if( item == null )
item = FindItemOnLayer( Layer.TwoHanded );
if( item is IWeapon )
return (m_Weapon = (IWeapon)item);
else
return GetDefaultWeapon();
}
}
public virtual IWeapon GetDefaultWeapon()
{
return m_DefaultWeapon;
}
И это:
Код
private static IWeapon m_DefaultWeapon;
public static IWeapon DefaultWeapon
{
get
{
return m_DefaultWeapon;
}
set
{
m_DefaultWeapon = value;
}
}
Это из Mobile.cs
Поэтому, если у тебя прописано призначение в конструкторах BaseItem & BaseJewel, если в методе GetValue в AosWeaponAttribute есть соответствующие иф блоки
и если прописаны свойства в сами артефакты - всё должно работать при наличии BaseWeapon на чаре, потому что именно он делает все вычисления и вызывает всякие личи и лайтнинги с ударов.
Цитата(Juzzver @ 1.3.2015, 1:43)

В моем случае это работает с другими вещами (IMG:
style_emoticons/default/smile.gif), соответственно должно сработать и для браслета.
Твой вариант без set тоже работает (IMG:
style_emoticons/default/smile.gif)
Да, но это ведь бред, явным образом прописывать класс артефакта в том месте и делать для него отдельную проверку, если для этого уже есть метод проверки в GetValue.
Если через GetValue не работает, то и по твоему не будет и значит причина в чем-то совсем другом.
Например в неимении BaseWeapon на чаре, тоесть не запускается сам OnHit и т.д.
А без set почему работает, я уже обьяснил.
Свойство - обьект. Мы меняем не сам обьект на другой обьект, а свойство в этом обьекте.
Вот если попробовать сам обьект AosWeaponAttributes заменить, а не одно из его свойств - тогда компилятор будет ругаться.
И это не в моем случае, а в случае дефолтного ранУО кода)) Я и сам не знал что так будет работать, пока ты на это не обратил внимание.