Техническая поддержка сервиса Quadro.Boards

Объявление

Новости сервиса

О форуме

Quadro.Support – это форум технической поддержки различных проектов и сервисов Quadro.Systems LLC, на котором грамотные технические специалисты всегда смогут помочь вам в решении проблем, или же подсказать ответы на самые сложные вопросы. Так же на форуме собрана обширная база знаний по различным аспектам наших сервисов. Не забывайте пользоваться поиском ;)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Техническая поддержка сервиса Quadro.Boards » Архив » Скрипты по подгрузке API WoW


Скрипты по подгрузке API WoW

Сообщений 41 страница 60 из 129

41

на тему авок, два вопроса:

1. Если у юзера не заполнено поле Главный перс - отображается стандартная ава. Если у юзера заполнено поле некорректно - отображается стандартная ава.
Но если у юзера заполнено поле правильно, однако персонаж не существует  (например, человек трансфернул персонажа на другой сервер с другим ником) - она не отображается.
вот, например, вписала юзеру Гуру "подземье,Гуруг"
http://blackteam.mmohost.ru/viewtopic.php?id=105#p1273
еще есть вот такой юзер (как раз ситуация с трансфером): http://blackteam.mmohost.ru/viewtopic.php?id=136#p1119

возможно заставить аватарку по умолчанию отобразиться при таком раскладе?

2. тут вопрос из серии того, что мне кажется гемморным, если это реально но народ жаждит - возможно заставить аватары батлюнета работать в ЛС?

0

42

Герда написал(а):

возможно заставить аватарку по умолчанию отобразиться при таком раскладе?

Да, можно, сделаю

Герда написал(а):

2. тут вопрос из серии того, что мне кажется гемморным, если это реально но народ жаждит - возможно заставить аватары батлюнета работать в ЛС?

А вот тут уже сложнее. В ЛС допполя не отображаются. Можно, конечно, запросить допполе с профиля, потом отправить запрос на баттлнет, сохранить все это в локалсторадж на неделю. Сделать можно все, насколько это надо - решать тебе.

Кстати, есть еще одна особенность скрипта сейчас - у тех, у кого локальное хранилище не работает (в древних ИЕ, некоторых мобильных браузерах) - аватары отображаться не будут совсем. Я могу сделать так, чтобы у всех работало, но у тех, у кого хранилища нет будет с каждой страницы топика при каждом его обновлении будет по 25 запросов к баттлнету.

+1

43

sadhaka написал(а):

в древних ИЕ, некоторых мобильных браузерах

...и хрен с ними
на таких браузерах и дизайн будет работать криво - ибо лень под них подстраиваться.

sadhaka написал(а):

Сделать можно все, насколько это надо - решать тебе.

давай насяду те на шею с этим... :)
много просят - оказывается, пвп-шники гильдии по лс о встречах договариваются и хотят видеть кто к ним просится.

0

44

Герда написал(а):

давай насяду те на шею с этим... :)
много просят - оказывается, пвп-шники гильдии по лс о встречах договариваются и хотят видеть кто к ним просится.

Окей, но это займет немного времени.
Постараюсь завтра дописать автообновление (в выходные лениво что-то делать), с ЛС-ками чуть попозже.

0

45

ноу проблем - подождут, не сгорят :)

0

46

sadhaka написал(а):

Да, можно, сделаю

А вот тут уже сложнее. В ЛС допполя не отображаются. .

Я бы вообще составил массив  из ника, доп полей и ссылки на Авву  и после первой загрузки грузил на Локаль Стораге
Если уж Стораге очищен, тады делаем запрос ( там стандартная функция, считывания доп полей - распарс и Аякс)

0

47

Герда

Следующий вариант, пока только с блекджеком.
Реализовано: стандартный аватар для неправильных персонажей и очистка локалсторадж в среду.

Код:
<style>
  .pa-avatar.item2, .pa-fld2 {display: none;}
</style>


<script>
$(function() {

    var arrParam, urlParam, newAva, idParam, arrStorage,
    date = new Date, dayX;
    dayX = date.getDay();

    if (dayX == 3 && localStorage.getItem('battlenetAvaRenew') == null) { 
      localStorage.removeItem('battlenetAva');
      localStorage.setItem('battlenetAvaRenew', 1);
    }
    if (dayX == 4 && localStorage.getItem('battlenetAvaRenew') != null) { 
      localStorage.removeItem('battlenetAvaRenew');
    }

    function getUrlAva(id, aux, url, realm, nick, placeAva) {
      $.ajax({
          url: url,
          dataType: "jsonp",
          jsonp : "jsonp",
          async : false,
          success: function(data){
            if(data.thumbnail) {
              arrStorage[id] = data.thumbnail;
              localStorage.setItem('battlenetAva', JSON.stringify(arrStorage));
               
              $(placeAva).append('<a href="http://eu.battle.net/wow/ru/character/'+realm+'/'+nick+'/simple" title="оружейная"> <img alt="'+aux+'" src="http://eu.battle.net/static-render/eu/'+data.thumbnail+'"> </a>');                
            }
             else $(placeAva).html('<img src="https://forumstatic.ru/files/0012/ad/ab/72354.jpg" title="персонаж неизвестен" />');
          }
       });
    }

    if(document.URL.indexOf("viewtopic.php")!=-1 && window.localStorage) {

      if (localStorage.getItem('battlenetAva') == null) arrStorage = {};         
      else  arrStorage = $.parseJSON(localStorage.getItem('battlenetAva'));         

        $(".post-author").each(function(e) {

            if ($(this).find(".pa-fld2").text()) arrParam = $(this).find(".pa-fld2").text().split(":")[1].split(",");
            else arrParam = [];

            newAva = $('<li class="pa-avatar item3"></li>').insertAfter($(this).find(".pa-title"));

            if(arrParam.length < 2) { $(newAva).html('<img src="https://forumstatic.ru/files/0012/ad/ab/72354.jpg" title="персонаж неизвестен" />'); return; }

            idParam = $(this).find(".pa-respect a[href*='respect.php']").attr('href').split('id=')[1];     
            urlParam = encodeURI('http://eu.battle.net/api/wow/character/'+arrParam[0]+'/'+arrParam[1]);

            if(!arrParam[2]) arrParam[2] = "0";

            if (arrStorage[idParam]) $(newAva).append('<a href="http://eu.battle.net/wow/ru/character/'+arrParam[0]+'/'+arrParam[1]+'/simple" title="оружейная"> <img alt="'+arrParam[2]+'" src="http://eu.battle.net/static-render/eu/'+arrStorage[idParam]+'"> </a>');
               else getUrlAva(idParam, arrParam[2], urlParam, arrParam[0], arrParam[1], newAva);
        });
    }
});
</script>

*поле меняем на единичку ))

Deff написал(а):

Я бы вообще составил массив  из ника, доп полей и ссылки на Авву

Не вижу смысла в нике и допполе. Когда в локалсторадж будет хранится 200 или 300 комбинаций, найти там нужные данные (помним, что это строка), будет дольше, чем сделать 25 запросов к внешнему серверу. Это при том, что я пользую json запись и работаю фактически с ассоциативным массивом.
А по проходу по ДОМу все равно нужно искать и проверять хотя бы ник, так что будет также или незаметно дольше. Зато если человек описАлся в допполе, не придется запускать принудительную очистку локалсторадж, чтобы исправить ошибку.

0

48

sadhaka
1.pa-fld2 ? Вродь .pa-fld1.
2. Ты возражала против доп. поля в Storage, а сама суешь всю получемую строку, хотя пока достаточно Аввы
3.   

if (dayX == 3 && localStorage.getItem('battlenetAvaRenew') == null) {
      localStorage.removeItem('battlenetAva');
      localStorage.setItem('battlenetAvaRenew', 1);
    }
    if (dayX == 4 && localStorage.getItem('battlenetAvaRenew') != null) {
      localStorage.removeItem('battlenetAvaRenew');
    }

Чот - изврат имхо - ставишь параметр DатаSet - первым в Storage['battlenetAva'], если разница между текущей и  DатаSet превышает  неделю - чистим 'battlenetAva',

а так скрипт достаточно симпатичный ...
----------
В ЛС можно типо:(ставим Авву из сохраненного в сторадж, иначе - Авва по умолчанию)
Хотя, сделать запрос(async : false)  в Профиль для fld1, несложно, и такая функция всё равно потребуется, для установки Аввы в минипрофиле текущего Юзера на главной в Шапке

Поправил свою функцию чтения  и для Гостя(действует и в ЛС)

function getUsNickID(post) {
    var Nick = "Гость",id = 0; //Гость;
    var a = post.find('.pa-author a');
    if(a){ Nick = a.html();
        var a1 = post.find('.post-links .pl-email a[href*="profile.php?"]');
        if(!a1.length) a1 = a;
        id = a1.attr('href').split('profile.php?id=')[1];
    }  return [Nick,id];
}

//alert(getUsNickID($('.post:first')))

Отредактировано Deff (11.11.2014 14:11:45)

0

49

Deff написал(а):

Ты возражала против доп. поля в Storage, а сама суешь всю получемую строку, хотя пока достаточно Аввы

Какую всю? в локалсторадж только айди и ссылка

Deff написал(а):

Чот - изврат имхо - ставишь параметр DатаSet - первым в Storage['battlenetAva'], если разница между текущей и  DатаSet превышает  неделю - чистим 'battlenetAva',

Вынесла специально, чтобы можно было почистить хранилище в любое время.
Захочет Герда обновить локалсторадж сегодня, впишет циферку и обновит. любые другие манипуляции - будут сложнее.
Кроме того, период - очень неправильное измерение в данном случае. У всех в разное время может быть создана запись, так что нельзя быть уверенным, что у всех обновится.
В моем варианте тоже нельзя быть уверенным. Не зашел на форум в среду - не обновился. Но можно обновить ручками. Полностью этот процесс все равно не автоматизировать с помощью js.

Deff написал(а):

Поправил свою функцию чтения  и для Гостя(действует и в ЛС)

Не вижу связи с обсуждаемой темой

0

50

sadhaka написал(а):

Вынесла специально, чтобы можно было почистить хранилище в любое время.

Логично, ток лучше не смешивать тады функции ручной принудительной очистки и автомата...

sadhaka написал(а):

Кроме того, период - очень неправильное измерение в данном случае. У всех в разное время может быть

DataSet - дата первого сохранения строки на Storage при изначальном null

sadhaka написал(а):

Не вижу связи с обсуждаемой темой

В личке по ID ищешь Авву в Storage

Отредактировано Deff (11.11.2014 15:15:46)

0

51

Deff написал(а):

DataSet - дата первого сохранения строки на Storage при изначальном null

Блин, Дефф, включи мозги: если ты пишешь дату, то считать будешь период: день, неделю, месяц с даты, а поскольку дата разная у всех. У только зарегавшегося - обновится через неделю, в то время как у постоянных участников - сегодня.

Deff написал(а):

В личке по ID ищешь Авву в Storage

Не вижу смысла смешивать личку и топик, в личке будет выполнятся один код, в топике другой. Гостей в личке быть не может.

0

52

sadhaka написал(а):

Блин, Дефф, включи мозги: если ты пишешь дату, то считать будешь период: день, неделю, месяц с даты, а поскольку дата разная у всех. У только зарегавшегося - обновится через неделю, в то время как у постоянных участников - сегодня.

Блин DataSet = +(new Data) при первой записи в очередной Storage со значением = null с компа пользователя и сверяецо тож с компа пользователя

sadhaka написал(а):

Не вижу смысла смешивать личку и топик, в личке будет выполнятся один код, в топике другой. Гостей в личке быть не может.

Ну я думал сделать общий кусок, по крайней мере функцию

Отредактировано Deff (11.11.2014 16:38:19)

0

53

Deff написал(а):

Блин DataSet = +(new Data) при первой записи в очередной Storage со значением = null с компа пользователя и сверяецо тож с компа пользователя

Да понятно, что с компа пользователя.
Ты предлагаешь записать дату создания записи в хранилище и считать от этой даты.
Окей, я сегодня зашла на форум, у меня стоит дата 11.11, новый юзер зарегится завтра и у него будет 12.11, кто-то спал два дня - у него будет 13.11. Неделя у всех будет разная.
Можно только если установить заранее в скрипте дату, допустим 11.11.2014 и через каждые 7 дней от нее чистить локалсторадж. Тогда будет у всех обновляться одновременно.
Но для этого придется вычесть из сегодня дату в скрипте, поделить на 7, если в остатке 0, проверить, что в ДатаСет не сегодня и выполнить обновление. Если в остатке не ноль, вычислить дату последнего обновления, сравнить с датой в ДатаСет, если там меньше, обновить сторадж и записать новую дату.
Тогда железно у всех обновится автоматом неактуальное хранилище.
Но мы все равно устанавливаем обновление по расписанию, а не по факту, т.е. энное количество времени информация все равно может быть неактуальна. Так смысл извращаться, если есть инструмент, который лениво обновит локалсторадж автоматом, а если захочется обновить сейчас, нужно будет только циферку исправить?

0

54

sadhaka написал(а):

Да понятно, что с компа пользователя.
Ты предлагаешь записать дату создания записи в хранилище и считать от этой даты.

(Ну на яндексе стандартное такое требование)
Просто казал на автомате

0

55

sadhaka написал(а):

Можно только если установить заранее в скрипте дату, допустим 11.11.2014 и через каждые 7 дней от нее чистить локалсторадж. Тогда будет у всех обновляться одновременно.

+(new Date()) - она в ms
Вычитаешь текущую делишь на (7*24*60*60*1000)
На счет среды - Герда загнула - ибо неизвестно кады обновится, думаю, - достаточно раз в неделю у каждого

sadhaka написал(а):

Но мы все равно устанавливаем обновление по расписанию, а не по факту, т.е. энное количество времени информация все равно может быть неактуальна. Так смысл извращаться, если есть инструмент, который лениво обновит локалсторадж автоматом, а если захочется обновить сейчас, нужно будет только циферку исправить?

Ну как желаете - я сказал подсознательно, а оставить ручной сброс в виде переменной в начале скрипта (или вне при загружаемом варианте) - точно стоит.

Отредактировано Deff (11.11.2014 17:33:11)

0

56

Герда
ты живая? Надо скрипт-то дописывать?

0

57

Прет всем!
Сори за выпадание из движняка - дренор настал.  :blush:
зато мы топ-1 за орду на сервере пока что. :)

sadhaka написал(а):

Реализовано: стандартный аватар для неправильных персонажей и очистка локалсторадж в среду.

вкорячено, тестим.

пока стандартный аватар для некорректного поля не виднеется:
http://blackteam.mmohost.ru/viewtopic.p … ;p=2#p1249 (пост 27 - перса подземье,Сорзул больше нет)

0

58

Герда
странно, у на моем форуме работает http://sadhaka.rusff.me/viewtopic.php?id=21#p218
Глянешь по поводу конфликтов? Посмотрю сам скрипт в пн, честно говоря уже не помню, что там может быть

0

59

sadhaka
Мож сразу вкрячивать всем умолчальную, а ежли есть - ставить нужную ?

Отредактировано Deff (06.12.2014 16:07:56)

0

60

sadhaka написал(а):

Глянешь по поводу конфликтов?

было вытащено все из всех форм настроек - не пашет. стиль вырублен - не пашет.
мб я с косяком вкорячила?

Код:
<!-- аватары -->
<style>
.pa-avatar.item2, .pa-fld1 {display: none;}
</style>
<script>
$(function() {

    var arrParam, urlParam, newAva, idParam, arrStorage,
    date = new Date, dayX;
    dayX = date.getDay();

    if (dayX == 3 && localStorage.getItem('battlenetAvaRenew') == null) { 
      localStorage.removeItem('battlenetAva');
      localStorage.setItem('battlenetAvaRenew', 1);
    }
    if (dayX == 4 && localStorage.getItem('battlenetAvaRenew') != null) { 
      localStorage.removeItem('battlenetAvaRenew');
    }

    function getUrlAva(id, aux, url, realm, nick, placeAva) {
      $.ajax({
          url: url,
          dataType: "jsonp",
          jsonp : "jsonp",
          async : false,
          success: function(data){
            if(data.thumbnail) {
              arrStorage[id] = data.thumbnail;
              localStorage.setItem('battlenetAva', JSON.stringify(arrStorage));
               
              $(placeAva).append('<a href="http://eu.battle.net/wow/ru/character/'+realm+'/'+nick+'/simple" title="оружейная"> <img alt="'+aux+'" src="http://eu.battle.net/static-render/eu/'+data.thumbnail+'"> </a>');                
            }
             else $(placeAva).html('<img src="https://forumstatic.ru/files/0012/ad/ab/72354.jpg" title="персонаж неизвестен" />');
          }
       });
    }

    if(document.URL.indexOf("viewtopic.php")!=-1 && window.localStorage) {

      if (localStorage.getItem('battlenetAva') == null) arrStorage = {};         
      else  arrStorage = $.parseJSON(localStorage.getItem('battlenetAva'));         

        $(".post-author").each(function(e) {

            if ($(this).find(".pa-fld1").text()) arrParam = $(this).find(".pa-fld1").text().split(":")[1].split(",");
            else arrParam = [];

            newAva = $('<li class="pa-avatar item3"></li>').insertAfter($(this).find(".pa-title"));

            if(arrParam.length < 2) { $(newAva).html('<img src="https://forumstatic.ru/files/0012/ad/ab/72354.jpg" title="персонаж неизвестен" />'); return; }

            idParam = $(this).find(".pa-respect a[href*='respect.php']").attr('href').split('id=')[1];     
            urlParam = encodeURI('http://eu.battle.net/api/wow/character/'+arrParam[0]+'/'+arrParam[1]);

            if(!arrParam[2]) arrParam[2] = "0";

            if (arrStorage[idParam]) $(newAva).append('<a href="http://eu.battle.net/wow/ru/character/'+arrParam[0]+'/'+arrParam[1]+'/simple" title="оружейная"> <img alt="'+arrParam[2]+'" src="http://eu.battle.net/static-render/eu/'+arrStorage[idParam]+'"> </a>');
               else getUrlAva(idParam, arrParam[2], urlParam, arrParam[0], arrParam[1], newAva);
        });
    }
});
</script>

вкорячила версию Деффа - пашет.
если нет нареканий к коду, то, собсвенна, чекд. :)

0


Вы здесь » Техническая поддержка сервиса Quadro.Boards » Архив » Скрипты по подгрузке API WoW


Рейтинг форумов | Создать форум бесплатно