Помоги со скриптом для Greasemonkey для Mozilla

Discussion in 'PHP' started by Rastamanka, 12 Aug 2011.

  1. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    В общем есть скрипт необходимо когда на таймере будет 5 секунд он продолжал прогружать локацию как я понимаю это выполняется функцией enterBattle(); сейчас прогруз происходит вручную когда жму на Entering battle... .
    Code:
    // ==UserScript==
    // @name           TM_ghost
    // @namespace      *
    // @include        http://*tmgame.ru/combat.php*
    // @include        http://*tmgame.ru/game.php*
    // ==/UserScript==
    var elBt;
    var el_body;
    var timer=0;
    var tmout;
    var enabled;
    var accepted=false;
    var loc;
    
    (function(){
       loc=document.location.href;
       enabled=GM_getValue('enabled',true);
       var css=""
            +"#switchs{position:absolute;left:3%;bottom:0;background-color:#F2D48C;cursor:pointer;padding:3px}"
            +"*[enabled=true]{color:green;font-weight:bold}"
            +"*[enabled=false]{color:red}"
            +""
            +""
       ;
       GM_addStyle(css);
       el_body = document.getElementsByTagName('body')[0];
      
       if(locCheck('combat.php') && enabled==true){
          var b_html = el_body.innerHTML;
          el_body.innerHTML = "";
       
          elBt = document.createElement("div");
       
    
          window.setTimeout(function(){
             if(!accepted){
                document.location='http://www.tmgame.ru/location.php';
             }
          }
          ,20000);
             
          tmout = window.setInterval(function(){
             timer++;
             if(!accepted){
                elBt.innerHTML = 'Бой заблокирован.<br>Щелкните чтобы войти в бой('+timer+') <br>'; 
    
                                   
             }
          	 
             //   enterBattle();
          }
          ,1000);
       
          elBt.setAttribute("ht",b_html);
          elBt.setAttribute("style",'width:100%;height:20%;color:red;font-size:20px;background:#F2D48C;cursor:pointer;');
          elBt.addEventListener('click', bar=function(){
             this.innerHTML='Entering battle...'  ;
             accepted=true;
    
    
             window.setTimeout(function(){
                enterBattle();
             }
             ,200);
          }
          , false);
          el_body.appendChild(elBt);
    
       }
       if(locCheck('game.php')){
          var el_switchs=addElemId(el_body,'span','','','switchs');
          el_switchs.innerHTML=enabled?"Выключить расформ":"Включить расформ";
          el_switchs.setAttribute('enabled',enabled);
          el_switchs.addEventListener('click', bar=function(){
             enabled=!enabled;
             el_switchs.innerHTML=enabled?"Выключить расформ":"Включить расформ";
             el_switchs.setAttribute('enabled',enabled);
             GM_setValue('enabled',enabled)
          }
          , false);
    
       }
       
    }
    )();
    
    function locCheck(substr){
       return loc.indexOf(substr)>=0;
    }
    function addElemId(parent,tag,iHtml,cl,id){
       var elem=document.createElement(tag);
       elem.innerHTML=iHtml;
       elem.value=iHtml;
       parent.appendChild(elem);
       elem.setAttribute('class',cl)
       elem.setAttribute('id',id)
       return elem;
    }
    
    
    function enterBattle(){
       el_body.innerHTML = elBt.getAttribute("ht");
    }
    
    
    Пробовала делать вот так. Входит в бой нормально на 5 секунде но через 5 секунд опять блокируется страница автоматом. Хотя когда жмем вручную на вход в бой блокировки в дальнейшем не происходит. Как это поправить?
     
  2. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    window.setTimeout(function(){
           accepted=true; //Вот этого не хватает.
           enterBattle();
    },1000);
    Там же по таймеру если !accepted, то выводить текст в элемент, что "Бой заблокирован.<br>Щелкните чтобы войти в бой('+timer+') <br>". Поставить на глобальную переменную тру и всё норм должно быть.

    А ещё лучше просто убить этот интервал.
    Code:
    window.setTimeout(function(){
           clearInterval(tmout);
           enterBattle();
    },1000);
     
    #2 Melfis, 12 Aug 2011
    Last edited: 12 Aug 2011
  3. Vova93

    Vova93 Banned

    Joined:
    5 Jul 2011
    Messages:
    1
    Likes Received:
    6
    Reputations:
    10
    Точно не знаю, но как вариант похоже, что tmout = window.setInterver (то что блокирует ваш бой, а затем пускает в бой); , выполняется с повторением раз в секунду и этот интервал нигде не убирается. Попробуйте clearInterval(tmout);

    Так же у вас похоже ошибка в document.location = 'http://...'; скорее тут loc = 'http://' раз вы выше сделали алиас или же document.location.href :)
     
  4. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    На сайте показывается меню блокировать окно или нет. Если блокировать то открывается вместо стандартного окна что бой заблокирован. Но при клике на нем (на этом окне) прогруз не загруженного элемента продолжается а accepted остается на месте вне зависимости от того нажал я для продолжения прогруза данного элемента или нет. Просто когда я прописываю что надо прогружать не загруженный элемент на 5 секунде он нормально прогружается через 5 секунд но опять через 5 секунд блокируется и через 5 секунд опять прогружается.В общем получается что он зацикливается. Но непонятно почему т.к. в enterbattle() я не вижу кода отвечающего за блок элемента а как раз наоборот.
     
  5. Vova93

    Vova93 Banned

    Joined:
    5 Jul 2011
    Messages:
    1
    Likes Received:
    6
    Reputations:
    10
    Прочти, что я написал - и попробуй в деле
     
  6. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    tmout = window.setInter используется только для того чтобы каждую секунду обновлять страницу блокировки а именно выводить на нее время в секундах с начала блока. Но при нажатии на надпись на блоке элемент спокойно грузиться и не блокируется в дальнейшем. А вот если именно ставить условие то тока в этом случае происходит блокировка и разблокировка через каждые 5 секунд.И собственно говоря как я без этого кода разблокирую страницу именно на 5 секунде? Ведь именно в этом коде они отсчитываются с момента когда на сайте подгружается страница combat.php. Повторюсь первый код который приведен работает на ура блокируется все правильно и разблокируеться но разблокировка происходит вручную то есть когда тыкаешь на элементе блокировки. А второй код это как мне надо то есть чтобы элемент блокировки снимался когда интервал равен 5 секундам. Сейчас получается так что блокировка снимается автоматом и потом опять ставиться через 5 секунд
     
    #6 Rastamanka, 12 Aug 2011
    Last edited: 12 Aug 2011
  7. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Раз не катит то, что писал, то значит без полного кода ничего тут не скажешь. Надо дебажить.
     
  8. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Код я полностью написала и сайт на котором это дело пашет написано в коде где собственно можно проверить.