您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Create randomized bonus games on Warlight.
- // ==UserScript==
- // @name Randomized Bonus
- // @namespace Deadman_RB
- // @version 1.02
- // @description Create randomized bonus games on Warlight.
- // @author Deadman
- // @match https://www.warlight.net/Profile?p=*
- // @grant GM_xmlhttpRequest
- // ==/UserScript==
- // Compute Player Ids
- var idRegex = /p=(\d+)/;
- var yourProfileLink = document.evaluate('/html/body/div[1]/span/div/a[2]',
- document, null, XPathResult.ANY_TYPE, null).iterateNext();
- var yourId = yourProfileLink.href.match(idRegex)[1];
- var opponentId = document.URL.match(idRegex)[1];
- if (yourId == opponentId) {
- opponentId = "OpenSeat";
- }
- // Add text box and button
- var levelElement = document.evaluate(
- '//*[@id="MainSiteContent"]/table/tbody/tr[2]/td[2]/table/tbody/tr/td/big',
- document, null, XPathResult.ANY_TYPE, null).iterateNext();
- addRandomizedButton(levelElement);
- function getSampleGameId() {
- /// <summary>
- /// Gets the sample game Id and checks if it is a number.
- /// </summary>
- /// <returns type="number">Game Id.</returns>
- var gameIdElement = document.getElementById("gameId");
- if (gameIdElement !== undefined) {
- return parseInt(gameIdElement.value, 10);
- }
- }
- function extractGameSettings() {
- /// <summary>
- /// Extract game settings from the sample game using GameFeed API.
- /// </summary>
- var sampleGameId = getSampleGameId();
- if (isNaN(sampleGameId)) {
- alert("Invalid GameId");
- } else {
- doAsyncRequest("POST",
- 'https://www.warlight.net/API/GameFeed?GameID=' +
- sampleGameId.toString() + '&GetHistory=true', {},
- "GameFeed");
- }
- }
- function setupRandomizedGame(response) {
- /// <summary>
- /// From the GameFeed API response, randomize bonuses and create a game
- /// using the template.
- /// </summary>
- /// <param name="response" type="string">
- /// The GameFeed API response for the provided sample game.
- /// </param>
- var obj = JSON.parse(response);
- if (obj != undefined) {
- var templateId = obj.templateID;
- var bonuses = [];
- for (var i = 0; i < obj.map.bonuses.length; i++) {
- var bonusObj = obj.map.bonuses[i];
- if (bonusObj.value != 0) {
- var bonus = [];
- var originalBonusValue = parseInt(bonusObj.value, 10);
- // set the bonus value to (original-1, original+1)
- bonus.push(bonusObj.name);
- bonus.push(originalBonusValue - 1);
- bonus.push(originalBonusValue + 1);
- bonuses.push(bonus);
- }
- }
- }
- createGame(templateId, bonuses);
- }
- function addRandomizedButton(levelElement) {
- /// <summary>
- /// Add a text box(for sample game Id) and a button to create randomized
- /// game.
- /// </summary>
- /// <param name="levelElement" type="Element">
- /// The parent element if text box and button.
- /// </param>
- var br = document.createElement('br');
- var gameId = document.createElement("input");
- gameId.setAttribute("id", "gameId");
- gameId.setAttribute("type", "text");
- var createButton = document.createElement("input");
- createButton.setAttribute("type", "button");
- createButton.setAttribute("value", "Create Randomized game");
- createButton.onclick = function () {
- var oldValue = createButton.value;
- createButton.setAttribute('disabled', true);
- createButton.value = '...processing...';
- setTimeout(function(){
- createButton.value = oldValue;
- createButton.removeAttribute('disabled');
- }, 1000);
- extractGameSettings();
- };
- // used to store response from GameFeed API
- var hiddenResponse = document.createElement("input");
- hiddenResponse.setAttribute("type", "hidden");
- hiddenResponse.setAttribute("id", "WLresponse");
- hiddenResponse.onchange = function (value) {
- setupRandomizedGame(hiddenResponse.value);
- };
- levelElement.appendChild(br);
- levelElement.appendChild(gameId);
- levelElement.appendChild(createButton);
- levelElement.appendChild(hiddenResponse);
- }
- function createGame(templateId, bonuses) {
- /// <summary>
- /// Create a game on Warlight between the two players on given settings.
- /// </summary>
- /// <param name="templateId" type="number">
- /// The game template Id.
- /// </param>
- /// <param name="bonuses" type="array">
- /// All bonuses on the map and the range of values they can take.
- /// </param>
- var template = templateId;
- var postDataObject = {
- "gameName": "Randomized bonuses game",
- "personalMessage": "Check bonuses carefully as they may have been altered",
- "templateID": template,
- "players": [{
- "token": yourId,
- "team": "None"
- }, {
- "token": opponentId,
- "team": "None"
- }],
- "overriddenBonuses": []
- };
- if (bonuses !== null) {
- for (var i = 0; i < bonuses.length; i++) {
- var bonusName = bonuses[i][0];
- var min = bonuses[i][1];
- var max = bonuses[i][2];
- postDataObject.overriddenBonuses.push({
- "bonusName": bonusName,
- value: getRandomInt(min, max) // Randomize the bonus
- });
- }
- }
- var response = doAsyncRequest("POST",
- 'https://www.warlight.net/API/CreateGame', JSON.stringify(
- postDataObject), "CreateGame");
- }
- function getRandomInt(min, max) {
- /// <summary>
- /// Pick a random number in the interval (min, max)
- /// </summary>
- /// <param name="min" type="number">
- /// lower bound of number
- /// </param>
- /// <param name="max" type="number">
- /// upper bound of number
- /// </param>
- /// <returns type="number">
- /// Random number in the interval
- /// </returns>
- return Math.floor(Math.random() * (max - min + 1)) + min;
- }
- function doAsyncRequest(method, url, data, api) {
- /// <summary>
- /// Perform an asynchronous request to create a game on Warlight.
- /// </summary>
- /// <param name="method" type="string">
- /// GET/POST
- /// </param>
- /// <param name="url" type="string">
- /// The request url.
- /// </param>
- /// <param name="data" type="dictionary">
- /// Request parameters
- /// </param>
- /// <param name="api" type="string">
- /// Warlight api type
- /// </param>
- GM_xmlhttpRequest({
- method: method,
- url: url,
- data: data,
- onreadystatechange: function (response) {
- if (response.readyState != 4) return;
- if (api === "GameFeed") {
- var hiddenResponse = document.getElementById(
- "WLresponse");
- hiddenResponse.value = response.responseText;
- hiddenResponse.onchange();
- } else if (api === "CreateGame") {
- var obj = JSON.parse(response.responseText);
- if (obj.gameID !== undefined) {
- window.open(
- "https://www.warlight.net/MultiPlayer?GameID=" +
- obj.gameID, '_parent ');
- } else if (obj.error !== undefined) {f
- alert("Cannot create game. Warlight says: " +
- obj.error);
- }
- }
- }
- });
- }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址