Page 1 of 1

Buy/Sell на RunUO

Posted: 2006-05-12 00:03:38
by omi4
Сфере еще как-то можно понять, как этим пользоваться, то на RunUO это не так просто. В отличии от Сферы клиент передает серверу не текст, а ключ. Естественно инжа ключи передавать не умеет, по этому нужно изогнутся с тем что есть…

Code: Select all

sub buy()
   var ID_Vendor = 0x00000000
   UO.Say(',buy regi')
   UO.Say(',vendormenu ID_Vendor 2')
endsub


Code: Select all

sub sell()
   var ID_Vendor = 0x00000000
   repeat
      UO.Say(',sell poison')
      UO.Say(',vendormenu ID_Vendor 3')
      wait(1500)
   until not UO.Count(0x0F0A)
endsub

Конструкции не претендуют на шедевр, но работают.

Но это еще не самое ужасное, названия предметов для продажи или покупки на RunUO закодированы. Вот пример листа.

Code: Select all

   <shoplist name="regi">
      <shopitem name="1023976" want="-1"/>
      <shopitem name="1023973" want="-1"/>
      <shopitem name="1023974" want="-1"/>
      <shopitem name="1023980" want="-1"/>
      <shopitem name="1023963" want="-1"/>
      <shopitem name="1023962" want="-1"/>
      <shopitem name="1023972" want="-1"/>
      <shopitem name="1023981" want="-1"/>
   </shoplist>

Вот как их вычисляет сервер

Code: Select all

      public override int LabelNumber
      {
         get
         {
            MultiComponentList mcl = this.Components;

            if ( mcl.List.Length > 0 )
               return 1020000 + (mcl.List[0].m_ItemID & 0x3FFF);

            return base.LabelNumber;
         }
      }

А теперь на русском, как его вычислить простым смертным.

Берем тип предмета, например NS 0x0F88
Переводим 0F88 в десятичный вид и получаем 3976
1020000 + 3976 = <shopitem name="1023976" ……/>