VendorAI.csМетод:
public override void OnSpeech
В нём:
Код
if ( m_Mobile is BaseVendor && from.InRange( m_Mobile, Core.AOS ? 1 : 4 ) && !e.Handled )
{
if ( e.HasKeyword( 0x14D ) ) // *vendor sell*
{
e.Handled = true;
((BaseVendor)m_Mobile).VendorSell( from );
m_Mobile.FocusMob = from;
}
else if ( e.HasKeyword( 0x3C ) ) // *vendor buy*
{
e.Handled = true;
((BaseVendor)m_Mobile).VendorBuy( from );
m_Mobile.FocusMob = from;
}
else if ( WasNamed( e.Speech ) )
{
if ( e.HasKeyword( 0x177 ) ) // *sell*
{
e.Handled = true;
((BaseVendor)m_Mobile).VendorSell( from );
}
else if ( e.HasKeyword( 0x171 ) ) // *buy*
{
e.Handled = true;
((BaseVendor)m_Mobile).VendorBuy( from );
}
m_Mobile.FocusMob = from;
}
}
Если у нас аос и мы обращаемся к вендору в радиусе одной клетки, то он проверяет посылаемые ему кейворды, в данном случае *vendor buy* / *vendor sell*.
else if ( WasNamed( e.Speech ) ) - так же мы можем обратиться по имени вендора + buy/sell кейворд.
Если экспансия у нас выбрана ниже аоса, то данные правила будут отрабатывать в радиусе 4х клеток от вендора по тем же кейвордам, что и при аосе.
Если мы хотим добавить реакцию на sell/buy без примесей, то делаем следующее:
В начале метода создаем переменную в которую будет записываться текст вводимый игроком для нпц:
Код
string speech = e.Speech.ToLower();
и в условиях проверяем, нужное ли это для нас слово или нет:
Цитата
if ( e.HasKeyword( 0x14D ) ) // *vendor sell*
- дописываем условие:
if ( e.HasKeyword( 0x14D ) || speech == "sell") // *vendor sell*
аналогично делаем и для Buy:
Цитата
else if ( e.HasKeyword( 0x3C ) || speech == "buy" ) // *vendor buy*
И теперь вендоры реагируют на Buy / Sell кейворды, в точности как и на поле
Цитата
Кстати отключал я эти функции, менюшки покупки/продажи все равно есть, выбор персонажей работает как и прежде, урон над персонажем не проверял, да и не буду.
Ты отключал ObjectPropertyList, т.е. тултипы (подсказки), которые срабатывают при наведении на что либо.
То что открываются менюшки при клике на торговцев - это называется контекстное меню, отключить его можно будет скорее всего в базовом скрипте ContextMenu/ContextMenuEntry, или же просто обрубить обработку пакета с контекстными менюшками.
Цитата
урон над персонажем не проверял, да и не буду.
Это настривается строчкой:
Mobile.VisibleDamageType = VisibleDamageType.None;
в Misc/CurrentExpanshion.cs
Вверх