Hernoem Bevelen

DeletedUser72568

Guest
Titel Script: Hernoem Bevelen

Functiebeschrijving script:

Dit script hernoemt bevelen op het dorpoverzicht en andere pagina's. (bv aankomend, bevelen, ...)
Wanneer je het script activeert zal er een prompt komen die je vraagt wat de nieuwe naam moet zijn.

Verder kun je in het script het type en prefix aanpassen.
Type:
  • 'outgoing': hernoemt alleen uitgaande bevelen
  • 'incoming': hernoemt alleen inkomende bevelen
  • 'all': hernoemt alles
Prefix:
  • true: hetgeen je invoert in de prompt wordt vooraan de bestaande bevelnaam toegevoegd
  • false: hernoem het volledige bevel

Keuring Ticket ID (Cijfer van de ticketID) t12398621

ScriptCode

PHP:
javascript: /* @author: Unfriendly Sander @description: Renames commands on current page */ void((() => {
    const settings = {
   type: 'outgoing', // values: outgoing, incoming, all
   prefix: false     // values: true, false => on true it will add what you put in the prompt BEFORE the current command name if it is not there already
    },
     selectors = {   // here for convenience, if something breaks, it will probably need a fix in the selectors methods
         $outgoing() {
         if (game_data.screen === 'overview_villages') {
           return $('.quickedit');
         }
         return $('.quickedit-out');
         },

         $incoming() {
         return $('.quickedit').not('.quickedit-out');
         },

         $allCommands() {
         return $('.quickedit, .quickedit-out');
         },

         getId($command) {
         return $command.attr('data-id');
         },

         extractLabel($command) {
         return $command.find('.quickedit-label').text().trim();
         },

         editLabel($command, txt) {
         $command.find('.quickedit-label').text(txt);
         }
     };

    // load twAjax if not defined
    (() => {
   if (typeof window.$.twAjax === 'undefined') {
       window.$.twAjax = (function () {
       let Ajax = function (options, promise) {
           this.options = options;
           this.promise = promise;
       };

       let Queue = (() => {
           let Queue = function () {
           this.list = [];
           this.working = false;
           this.length = 0;
           };

           Queue.prototype.doNext = function () {
           let item = this.dequeue(),
               self = this;

           $.ajax(item.options).done(function () {
               item.promise.resolve.apply(null, arguments);
               self.start();
           }).fail(function () {
               item.promise.reject.apply(null, arguments);
               self.start();
           });
           };

           Queue.prototype.start = function () {
           if (this.length) {
               this.working = true;
               this.doNext();
           } else {
               this.working = false;
           }
           };

           Queue.prototype.dequeue = function () {
           this.length -= 1;
           return this.list.shift();
           };

           Queue.prototype.enqueue = function (item) {
           this.list.push(item);
           this.length += 1;

           if (!this.working) {
               this.start();
           }
           };

           return Queue;
       })();

       let orchestrator = (() => {
           // Create 5 queues to distribute requests on
           let queues = (() => {
           const needed = 5;
           let arr = [];

           for (let i = 0; i < needed; i++) {
               arr[i] = new Queue();
           }

           return arr;
           })();

           let distribute = (item) => {
           let leastBusyQueue = queues.map(q => q.length).
               reduce((next, curr) => (curr < next) ? curr : next, 0);
           queues[leastBusyQueue].enqueue(item);
           };

           return distribute;
       })();

       return function(options) {
           let promise = $.Deferred(),
           item = new Ajax(options, promise);

           orchestrator(item);

           return promise;
       };
       })();
   }
    })();

    let rename = (() => {
   return (settings.prefix) ? (txt, name) => {
       let l = name.length,
       sub = txt.substring(0, l);

       if (sub !== name) {
       return name + ' ' + txt;
       }
       return txt;
   } : (txt, name) => name;
    })();

    let persistentRename = (id, $command, label) => {
   return $.twAjax({
       url: `game.php?screen=info_command&ajaxaction=edit_own_comment&id=${id}&h=${game_data.csrf}`,
       method: 'POST',
       data: { text: label }
   }).then(() => {
       selectors.editLabel($command, label);
   });
    };

    let getCommands = (() => {
   let $commands = (() => {
       switch (settings.type) {
       case 'outgoing':
       return selectors.$outgoing;
       case 'incoming':
       return selectors.$incoming;
       case 'all':
       return selectors.$allCommands;
       }
   })();

   return () => $commands();
    })();

    (function exec() {
   let name = prompt('Hernoem bevelen naar:', ''),
       $commands = getCommands();

   if (!name.length) {
       return false;
   }

   for (let i = 0, l = $commands.length; i < l; i++) {
       let label = selectors.extractLabel($commands.eq(i)),
       newLabel = rename(label, name);

       if (label === newLabel) {
       continue;
       }

       persistentRename(selectors.getId($commands.eq(i)), $commands.eq(i), newLabel);
   }
    })();
})());
 

Single Malt

The Wall Breaker 2019
Reactiescore
2.544
Deze werkt niet bij mij?
 

Single Malt

The Wall Breaker 2019
Reactiescore
2.544
Alles. Ik klik er op en hij doet niets. Komt geen prompt zoals vermeld wordt. Op meerdere pagina's geprobeerd (dorpsoverzicht, aankomende bevelen, uitgaande bevelen, etv)
 
Reactiescore
807
Dat is vreemd... Kan je eens kijken naar errors ?

Wanneer je in TW bent rechter klik ergens in de pagina, en dan element inspecteren (of iets in die aard), daar dan zoeken naar de console. Eenmaal die open staat op het script klikken en dan hier laten weten wat er dan in de console verschijnt.
 

DeletedUser70435

Guest
@Unfriendly Sander Hij mist er steeds wat aanvallen met hernoemen, waarschijnlijk omdat er geen ingebouwde timer oid in zit. Wat ik daarmee bedoel, is dat hij geen rekening houdt met de 5 acties per seconde.
 

DeletedUser72568

Guest
Over hoeveel bevelen heb je het dan ongeveer @Victorious. ?
Ik heb het zelf met een hondertal getest en werkt hier perfect. Een timer is ook niet nodig, je hebt 5 workers ter beschikking en daar wordt rekening mee gehouden. ;)
 

DeletedUser70435

Guest
Enkel getest met 1000 bevelen, dus daar ligt het wrss aan. Was ook maar enkel een testje, ga normaal echt niet al mn farms hernoemen :p
 

DeletedUser71679

Guest
@Unfriendly Sander
@Victorious.

Ik denk dat het in dit geval voldoende is om de queue gewoon op 4 te zetten
Ja hij is dan 1/5 langzamer en zit je niet presies op die 200ms wand er hoeft maar een beetje storing te zijn en het is mis
Als de queues op 4 staat bou je zelf meer ruimte in en is het dus minder gevoelig af gesteld

Dit werkte bij mij prima om het zelfde probleem te verhelpen
 
Reactiescore
807
@Unfriendly Sander
@Victorious.

Ik denk dat het in dit geval voldoende is om de queue gewoon op 4 te zetten
Ja hij is dan 1/5 langzamer en zit je niet presies op die 200ms wand er hoeft maar een beetje storing te zijn en het is mis
Als de queues op 4 staat bou je zelf meer ruimte in en is het dus minder gevoelig af gesteld

Dit werkte bij mij prima om het zelfde probleem te verhelpen
Sorry maar hier klopt werkelijk niks van...

Ten eerste werkt Sander zijn fix voor 5 acties / seconde (wat de eenvoudige benaming is, want in werkelijkheid zijn het er helemaal geen 5 per seconde maar gewoon 5 workers) niet op basis van elke keer 200ms er tussen. Zijn code wacht netjes tot er 1 afgehandeld is om dan de volgende te doen met zo een max van 5. Kortom er is geen enkele manier waarop die sneller kan gaan dan TW toelaat en storingen kunnen onmogelijk voor komen. Dit is de meest nette en correcte manier van werken die je kan hebben, veel beter dan gewoon 200ms er tussen gebruiken...

Ten 2de gebruik ik Sander zijn code voor dit al sinds het begin in al mijn tools die het nodig hebben en ik heb nergens en nooit last van request die niet gedaan worden oid. Meer zelfs ik heb net met het script uit dit topic 1000 aanvallen hernoemt en er is er geen enkele die niet hernoemt is!

Bij deze kan ik dus met zeer veel zekerheid zeggen dat het probleem niet in dat stuk code ligt, als het al in de code ligt en niet gewoon gebruikers gerelateerd is. Ik denk dus dat er meer informatie nodig is van @Victorious. om te zien onder welke omstandigheden dit voorkomt.
 

DeletedUser70435

Guest
@warre ik zal vanavond even testen om het te herproduceren! Weet ook niet zeker of het via PC of via mobiel was.
 

DeletedUser71679

Guest
Sorry maar hier klopt werkelijk niks van...

Ten eerste werkt Sander zijn fix voor 5 acties / seconde (wat de eenvoudige benaming is, want in werkelijkheid zijn het er helemaal geen 5 per seconde maar gewoon 5 workers) niet op basis van elke keer 200ms er tussen. Zijn code wacht netjes tot er 1 afgehandeld is om dan de volgende te doen met zo een max van 5. Kortom er is geen enkele manier waarop die sneller kan gaan dan TW toelaat en storingen kunnen onmogelijk voor komen. Dit is de meest nette en correcte manier van werken die je kan hebben, veel beter dan gewoon 200ms er tussen gebruiken...

Ten 2de gebruik ik Sander zijn code voor dit al sinds het begin in al mijn tools die het nodig hebben en ik heb nergens en nooit last van request die niet gedaan worden oid. Meer zelfs ik heb net met het script uit dit topic 1000 aanvallen hernoemt en er is er geen enkele die niet hernoemt is!

Bij deze kan ik dus met zeer veel zekerheid zeggen dat het probleem niet in dat stuk code ligt, als het al in de code ligt en niet gewoon gebruikers gerelateerd is. Ik denk dus dat er meer informatie nodig is van @Victorious. om te zien onder welke omstandigheden dit voorkomt.
leg mij dan eens uit waarom het bij 4 wel allemaal hernoemd en bij 5 niet allemaal
het zou best aan de internet verbinding kunnen liggen maar het feit dat hij bij 4 wel hernoemt en bij 5 niet
 
Reactiescore
807
leg mij dan eens uit waarom het bij 4 wel allemaal hernoemd en bij 5 niet allemaal
het zou best aan de internet verbinding kunnen liggen maar het feit dat hij bij 4 wel hernoemt en bij 5 niet
Maar hij doet het gewoon goed met 5 :confused2:
 

DeletedUser71679

Guest
Ja bij mij slaat hij er ongeveer 8 overbop 1000 bevelen als hij op 5 staat en op 4 niet dus kendelijk een slechte internet verbinding
 

DeletedUser70435

Guest
Werkt niet meer bij mij. Past het niet aan. Gaat heel snel door de eerste 20 bevelen, stopt dan, en bij refreshen is niets aangepast.
 
Reactiescore
880
@Unfriendly Sander
Helaas werkt het script niet meer bij mij, hij hernoemt wel alles alleen wanneer ik naar een andere pagina ga dan zijn de hernoemingen weer ongedaan gemaakt.

Vond het een plezierig script om te gebruiken, zou het kunnen waarderen als iemand met wat meer script kennis dan ik het script weer werkend kan krijgen^^
 
Reactiescore
880
@kingsdorp

ik heb het script getest werkt nog prima
al geprobeerd om even opnieuw te te voegen ?
Jep heb hem vandaag nog toegevoegd zelfs, had het erbij moeten vermelden... maar de problemen treden bij mij op bij het hernoemen van incommings dus niet bevelen die verstuurd worden :). Deze krijg ik wel hernoemd alleen die hernoeming is niet permanent, helaas.
 

DeletedUser71679

Guest
gebruik je nog andere user scripts ?

dat kan invloet op elkaar hebben