Greasy Fork

Greasy Fork is available in English.

Grepolis Resources Manager

A little handy script to help with resource management and more

当前为 2020-02-28 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Grepolis Resources Manager
// @version      0.1_ALPHA
// @include		/http[s]{0,1}://[a-z]{2}[0-9]{1,2}\.grepolis\.com/game*/
// @include		https://*.forum.grepolis.com/*
// @require		http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @description  A little handy script to help with resource management and more
// @author       Ezio76
// @copyright    2020+
// @grant        unsafeWindow
// @grant        GM_addStyle
// @namespace http://greasyfork.icu/users/451401
// ==/UserScript==

//TODO: fix dropdown for selecting levels

// GM-API?
GM = (typeof GM_info === 'object');
var uw = unsafeWindow

GM_addStyle(`
#GRM_window{background-color: #ffe2a2;
    display: block;
    height: 550px;
    width: 780px;
    z-index: 1100;
    position: absolute;
    top: 100px;
    left: 30vw;
    border: 2px black solid
}
#GRM_toolbar{
    height: 30px;
    border-bottom: 2px black solid;
}
#GRM_toolbar_list{
    list-style-type: none;
    margin: 0;
    padding-top:3px;
    padding-left: 1px;
    overflow: hidden;
    top: 10px;
}
#GRM_title{
    padding-top: 3px;
    float: left;
    width: 40%;
    text-align: left;
}
.GRM_toolbar_item{
    height: 25px;
    float: left;
    width: 27%;
    text-align: center;
    border-left: 1px solid black;
    border-right: 1px solid black;
    border-top: 1px solid black;
    border-top-left-radius: 5px 5px;
    border-top-right-radius: 5px 5px;
    margin: 1px
}
#GRM_close{
    padding-top: 5px;
    float: left;
}
#GRM_close_img{
    margin-left: 10px;
}
.GRM_building_image{
    height: 40px;
    width: 40px;
    letter-spacing: -1px;
    margin: 0;
    display: inline-grid;
}

.GRM_building_level{
    position: relative;
    bottom: -25px;
    right: -10px;
    color: white;
    font-weight: bolder;
}

.GRM_selector{
    height: 40px;
    width: 30px;
    display: inline;
}

.GRM_input{
    width: 25px;
}
`);

function openGRMWindow(){
   var grmWindow = document.querySelector("#GRM_window");
    if (grmWindow === null) {
        initializeGRMWindow();
        openGRMWindow();
        return;
    }
    //console.log(uw.ITowns.getCurrentTown());
    fillGRMWindow(uw.ITowns.getCurrentTown());
    $("#GRM_window").css("display","block");
}

function fillGRMWindow(town){
    $("#GRM_city_name").text(`${town.getName()}`)
    const buildings = town.getBuildings().getLevels();
    $("#GRM_main_level").text(`${buildings.main}`);
    $("#GRM_hide_level").text(`${buildings.hide}`);
    $("#GRM_place_level").text(`${buildings.place}`);
    $("#GRM_lumber_level").text(`${buildings.lumber}`);
    $("#GRM_stoner_level").text(`${buildings.stoner}`);
    $("#GRM_ironer_level").text(`${buildings.ironer}`);
    $("#GRM_market_level").text(`${buildings.market}`);
    $("#GRM_docks_level").text(`${buildings.docks}`);
    $("#GRM_barracks_level").text(`${buildings.barracks}`);
    $("#GRM_wall_level").text(`${buildings.wall}`);
    $("#GRM_storage_level").text(`${buildings.storage}`);
    $("#GRM_farm_level").text(`${buildings.farm}`);
    $("#GRM_academy_level").text(`${buildings.academy}`);
    $("#GRM_temple_level").text(`${buildings.temple}`);
    var json_data = uw.ITowns.getCurrentTown().getBuildings().getBuildings();
    var result = [];

    var counter = 0;
    for(var i in json_data){
        if(counter !== 14){
            counter++;
            continue;
        }
        result.push([i, json_data [i]]);
    }

    var special1 = getSpecialBuilding(result.slice(0,4));
    var special2= getSpecialBuilding(result.slice(4));


    var specialImage1 = special1 === null ? 'url(https://i.imgur.com/ScMZ4ns.png)' : `url('https://gpnl.innogamescdn.com/images/game/main/${special1}.png')`;
    var specialImage2 = special2 === null ? 'url(https://i.imgur.com/L26ZuJ4.png)' : `url('https://gpnl.innogamescdn.com/images/game/main/${special2}.png')`;


    $("#GRM_special_1_background").css("background-image", specialImage1);
    $("#GRM_special_2_background").css("background-image", specialImage2);
}

function getSpecialBuilding(specialList){
 var specialBuilding = null;
    for(let i in specialList){
        if(specialList[i][1]===1) return specialList[i][0];
    }
    return null;
}

function initializeGRMWindow(){
    var left = document.querySelector("body").clientWidth;
   $("body").append(`
<div id="GRM_window">
    <div id="GRM_toolbar">
        <ul id="GRM_toolbar_list">
            <li class="GRM_toolbar" id="GRM_title">Grepolis Resources Manager</li>
            <li class="GRM_toolbar_item" id="GRM_builder">City Manager</li>
            <li class="GRM_toolbar_item" id="GRM_resources">Resource Manager</li>
            <li id="GRM_close"><img id="GRM_close_img" src="https://i.imgur.com/cceOkEu.png"></li>
        </ul>
    </div>
    <form id="GRM_buildings">
        <label id="city_name"></label>
        <table>
            <tr>
                <th colspan="4" id="GRM_city_name">
                </th>
            </tr>
            <tr>
                <td colspan="4" id="GRM_main" class="building">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/main.png');">
                            <span class="GRM_building_level" id="GRM_main_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_main_level_pick">
                            <input type="text" class="GRM_input ac_input" value="1" disabled="false" tabindex="100" id="GRM_main_input" name="Main Level">
                        </div>
                    </div>
                </td>
            </tr>
            <tr>
                <td id="GRM_lumber">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/lumber.png');">
                            <span class="GRM_building_level" id="GRM_lumber_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_lumber_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_farm">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/farm.png');">
                            <span class="GRM_building_level" id="GRM_farm_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_lumber_farm">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_stoner">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/stoner.png');">
                            <span class="GRM_building_level" id="GRM_stoner_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_stoner_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_storage">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/storage.png');">
                            <span class="GRM_building_level" id="GRM_storage_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_storage_selector">LEVEL</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td id="GRM_ironer">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/ironer.png');">
                            <span class="GRM_building_level" id="GRM_ironer_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_ironer_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_barracks">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/barracks.png');">
                            <span class="GRM_building_level" id="GRM_barracks_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_barracks_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_temple">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/temple.png');">
                            <span class="GRM_building_level" id="GRM_temple_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_temple_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_market">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/market.png');">
                            <span class="GRM_building_level" id="GRM_market_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_market_selector">LEVEL</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td id="GRM_docks">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/docks.png');">
                            <span class="GRM_building_level" id="GRM_docks_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_docks_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_academy">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/academy.png');">
                            <span class="GRM_building_level" id="GRM_academy_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_academy_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_wall">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/wall.png');">
                            <span class="GRM_building_level" id="GRM_wall_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_wall_selector">LEVEL</div>
                    </div>
                </td>
                <td id="GRM_hide">
                    <div class="GRM_container">
                        <div class="GRM_building_image"
                             style="background-image: url('https://gpnl.innogamescdn.com/images/game/main/hide.png');">
                            <span class="GRM_building_level" id="GRM_hide_level"></span>
                        </div>
                        <div class="GRM_selector" id="GRM_hide_selector">LEVEL</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td colspan="2" id="GRM_special_1">
                    <div class="GRM_building_image GRM_special" id="GRM_special_1_background"></div>
                </td>
                <td colspan="2" id="GRM_special_2">
                    <div class="GRM_building_image GRM_special" id="GRM_special_2_background"></div>
                </td>
            </tr>
        </table>
    </form>
</div>`);
    var grmWindow = document.querySelector("#GRM_window");
    dragElement(grmWindow);
    var close = document.querySelector("#GRM_close_img");
    close.addEventListener("click", function(){
        $("#GRM_window").css("display","none");
    });
}

function addMenuItem(){
    $("#ui_box > div.nui_main_menu > div.middle > div.content > ul").append(
    `<li id="GRM_Button">
        <span class="content_wrapper">
            <span class="button_wrapper">
                <span class="button">
                    <span class="icon" style="background: url(&quot;https://s19.directupload.net/images/200222/6wtpwmkp.png&quot;) no-repeat;"></span>
                </span>
            </span>
            <span class="name_wrapper">
                <span class="name">GRM</span>
            </span>
        </span>
    </li>`);
    var li = document.querySelector("#GRM_Button");
    li.addEventListener("click", openGRMWindow);
}

function dragElement(elmnt) {
  var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
  if (document.getElementById(elmnt.id + "header")) {
    // if present, the header is where you move the DIV from:
    document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown;
  } else {
    // otherwise, move the DIV from anywhere inside the DIV:
    elmnt.onmousedown = dragMouseDown;
  }

  function dragMouseDown(e) {
    e = e || window.event;
    e.preventDefault();
    // get the mouse cursor position at startup:
    pos3 = e.clientX;
    pos4 = e.clientY;
    document.onmouseup = closeDragElement;
    // call a function whenever the cursor moves:
    document.onmousemove = elementDrag;
  }

  function elementDrag(e) {
    e = e || window.event;
    e.preventDefault();
    // calculate the new cursor position:
    pos1 = pos3 - e.clientX;
    pos2 = pos4 - e.clientY;
    pos3 = e.clientX;
    pos4 = e.clientY;
    // set the element's new position:
    elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
    elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
  }

  function closeDragElement() {
    // stop moving when mouse button is released:
    document.onmouseup = null;
    document.onmousemove = null;
  }
}

function startup() {
    'use strict';
    addMenuItem();
    //console.log(uw.GameModels.TownIdList());

};

startup();