Цитата(Sergius Grey @ 28.2.2015, 7:05)

Снова стал возиться с сервером, хочу реализовать задумка, например, кольцо с хит лайтнингом или перчатки с мана личем.
Собственно вопрос - каким способом можно прописать артефакту WeaponAttributes, ссылаясь на бейс веапон или что то вроде того?
В АОС.кс я добавлял из WeaponAttributes в просто АОСатрибутс свойства, они появлялись в пропсе, отображались на вещи, но не давали эффекта. И я понимаю почему. Просто хочется все это сделать с наименьшим количеством кода, это главная задача. А прописывать кучу строк в бейсАрмор и БейсДжевел не хочется, во избежании возможных конфликтов и косяков, которые могут всплыть со временем, так как я не уверен что смогу верно все расписать там. Проще говоря не хочется все это делать "брейнфаковским способом".
Может можно это сделать при помощи методов void OnAdded и void OnRemoved соответственно?
Но в идеале хотелось бы, чтоб кольца например просто могли принимать WeaponAttributes при создании новых скриптов артефактов.
Ранка 2.0
Зайди в AOS.cs
Найди там вот это:
Код
public static int GetValue( Mobile m, AosWeaponAttribute attribute )
{
if( !Core.AOS )
return 0;
List<Item> items = m.Items;
int value = 0;
for( int i = 0; i < items.Count; ++i )
{
Item obj = items[i];
if( obj is BaseWeapon )
{
AosWeaponAttributes attrs = ((BaseWeapon)obj).WeaponAttributes;
if( attrs != null )
value += attrs[attribute];
}
else if ( obj is ElvenGlasses )
{
AosWeaponAttributes attrs = ((ElvenGlasses)obj).WeaponAttributes;
if( attrs != null )
value += attrs[attribute];
}
}
return value;
}
Видишь блок с BaseWeapon? Под ElvenGlasses блоком, добавь аналогичный блок с BaseJewel и не забудь в BaseJewel прописать такие-же вот свойства, как и в BaseWeapon.:
Код
private AosWeaponAttributes m_AosWeaponAttributes;
[CommandProperty( AccessLevel.GameMaster )]
public AosWeaponAttributes WeaponAttributes
{
get{ return m_AosWeaponAttributes; }
set{}
}
Работы на минут 5, если ты понимаешь о чём я пишу и кода тут совсем не много, как видишь.
РанУО, конечно, такое РанУО...
Для проверки на вепонатрибуты фор луп по всем шмоткам проходится.... (IMG:
style_emoticons/default/sad.gif)
Правда ТСу это только на руку, лол
П.С. ТС, если хочешь совсем как про быть:
Создай общий класс для BaseWeapon & BaseArmor & BaseJewel & BaseQuiver & BaseTalisman.
Например WearableItem, у него пускай эти пять классов наследуют, а он у Item.
А потом вытащи из BaseWeapon то свойство что я описал выше + переменную и засунть в WearableItem.
Метод GetValue можешь смело переделывать на такой лад:
Код
public static int GetValue( Mobile m, AosWeaponAttribute attribute )
{
if( !Core.AOS )
return 0;
List<Item> items = m.Items;
int value = 0;
for( int i = 0; i < items.Count; ++i )
{
Item obj = items[i];
AosWeaponAttributes attrs = ((WearableItem)obj).WeaponAttributes;
if( attrs != null )
value += attrs[attribute];
}
return value;
}
Это тебе достаточно серьёзно сэкономит ресурсы сервера.
+строчек кода ещё меньше.
+ничего не надо добавлять в BaseJewel
+на армор, колчаны и талисманы тоже вепон свойства сможешь прописывать.