Загрузка данных


// ==UserScript==
// @grant       none
// @run-at      document-idle
// @namespace   Mist
// @include     https://world.mist-game.ru/
// @include     https://world.stage.mist-game.ru/
// @name        Mist - Расширение архива
// @description По возможности отображает источник или получателя платежа в архиве банка и рынка и инициатора оплаты в истории КО
const tradeHistory = function ()
{
  if (!C || !C.PR || !C.PR.intf || !C.PR.data)
    return;
 
  const markerAlreadyProcessed = 'MextTradeHistoryProcessedMarker';
 
  if (C.PR.intf == 'municipalityClanExp')
  {
    if (!C.PR.data.history || !C.PR.data.history.length)
      return;
 
    const table = $('#cln_bills');
    if (table.length == 0 || table.hasClass (markerAlreadyProcessed))
      return;
 
    const clanExpPlayerInfo = function (id)
    {
      let playerInfoHtml = MOD.name ({login:'<профиль>', sex:2, level:0, id:id});
      /* здесь надо запускать запрос к профилю пользователя, парсить оттуда инфу и кешировать её в отдельный словарь */
      return playerInfoHtml;
    };
 
    C.PR.data.history.forEach (function (entry, idx, obj)
    {
      let dealInfo;
 
      /* Покупка кланового улучшения */
      if (entry.op_type == 36)
      {
        dealInfo = `Приобрёл: ${clanExpPlayerInfo (entry.fk_operator)}`;
      }
 
      if (dealInfo)
      {
        table.find ('tbody tr').eq (idx+1)
          .children ('td').eq (3)
          .append ('<br><nobr>' + dealInfo + '</nobr>');
      }
    });
 
    /* зачем этот лимит по ширине? */
    table.parent ().removeClass ('w700')
 
    table.addClass (markerAlreadyProcessed);
  }
 
  else if (C.PR.intf == 'marketHistory')
  {
    if (!C.PR.data.reports || !C.PR.data.reports.length)
      return;
 
    const table = $('#mp_log');
    if (table.length == 0 || table.hasClass (markerAlreadyProcessed))
      return;
 
  	let tableRows = table.find ('tbody tr');
    tableRows.eq (0).append ('<th>Покупатель</th>');
 
    const marketPlayerInfo = function (id)
    {
      let infoClass = (id && C.PR.data.users.hasOwnProperty (id)) ? C.PR.data.users [id] : undefined;
      return ( infoClass ? MOD.name ( infoClass ) : 'неизвестно' );
    };
 
    C.PR.data.reports.forEach (function ( entry, idx, obj )
    {
      tableRows.eq (idx+1).append (`<td><nobr>${marketPlayerInfo (entry.src.fk_owner)}</nobr></td>` );
    });
 
    /* надо выключить ограничение ширины, а то места не хватает */
    $('#scr_center').removeClass ('w700');
 
    table.addClass (markerAlreadyProcessed);
  }
 
  else if (C.PR.intf == 'bankHistory')
  {
    if (!C.PR.data.history || !C.PR.data.history.length)
      return;
 
    const table = $('#bnk_bills');
    if (table.length == 0 || table.hasClass (markerAlreadyProcessed))
      return;
 
    const bankPlayerInfo = function (id)
    {
      let infoClass = (id && C.PR.data.chars.hasOwnProperty (id)) ? C.PR.data.chars [id] : undefined;
      return infoClass ? MOD.name (infoClass) : 'неизвестно';
    };
 
    const bankClanInfo = function (id)
    {
      return id ? MOD.clan (id) : 'неизвестно';
    };
 
    const accountType = C.PR.data.account.type;
    if (accountType != 1 && accountType != 2)
    {
      console.log (`MEXT.tradeHistory: unknown account type`);
      return;
    }
 
    C.PR.data.history.forEach (function (entry, idx, obj)
    {
      let dealInfo;
 
      /* Продажа на аукционе */
      if (entry.op_type == 7)
      {
        if (accountType == 1)
          dealInfo = `Покупатель: ${bankPlayerInfo (entry.info3)}`;
      }
 
      /* Покупка на рынке */
      else if (entry.op_type == 14)
      {
        dealInfo = `Продавец: ${bankPlayerInfo (entry.dest.fk_owner)}`; // entry.info4
      }
 
      /* Торговая операция */
      /* Плата за услуги созидателя */
      /* Плата за изготовление рецепта */
      else if (entry.op_type == 15 || entry.op_type == 69 || entry.op_type == 115)
      {
        dealInfo = `${bankPlayerInfo (entry.src.fk_owner)} \u2192 ${bankPlayerInfo (entry.dest.fk_owner)}`;
      }
 
      /* Выкуп лота на аукционе */
      else if (entry.op_type == 28)
      {
        if (entry.info2 == 1)
          dealInfo = `Продавец: ${bankPlayerInfo (entry.info3)}`;
        else if (entry.info2 == 2)
          dealInfo = `Продавцы: клан ${bankClanInfo (entry.info3)}`;
        else
          dealInfo = `[неизвестное значение info2: ${entry.info2}]`;
      }
 
      /* Продажа на товарной бирже */
      else if (entry.op_type == 41)
      {
        dealInfo = `Покупатель: ${bankPlayerInfo (entry.info3)}`;
      }
 
      /* Перевод с кланового счёта */
      else if (entry.op_type == 61)
      {
        dealInfo = `Перевёл: ${bankPlayerInfo (entry.fk_operator)}`;
      }
 
			/* Выпало из дырявого кармана */
      else if (entry.op_type == 169)
      {
        if (entry.info2 == 1)
          dealInfo = `Потерявший: ${bankPlayerInfo (entry.info1)}`;
      }
 
      /* Покупка кланового улучшения */
      else if (entry.op_type == 36)
      {
        dealInfo = `Покупатель: ${bankPlayerInfo (entry.fk_operator)}`;
      }
 
      if (dealInfo)
      {
        table.find ('tbody tr').eq (idx+1)
          .children ('td').eq (3)
          .append ('<br><nobr>' + dealInfo + '</nobr>');
      }
    });
 
    table.addClass (markerAlreadyProcessed);
  }
};
 
window.eval ("$ ('html').ajaxSuccess (" + tradeHistory.toString () + ");");
// ==/UserScript==