Xmas Town (old script) 2018

Notification for items near you in christmas town map

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name        Xmas Town (old script) 2018
// @namespace   mafia.christmas
// @author      Mafia[610357]
// @description Notification for items near you in christmas town map
// @include     *.torn.com/christmas_town.php
// @version     2018.1.1
// @require     http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

'use strict';

this.$ = this.jQuery = jQuery.noConflict(true);

// global CSS
GM_addStyle(`
.pulse {
display: block;
width: 30px !important;
height: 30px !important;
border-radius: 50%;
background: #ffec02;
cursor: pointer;
z-index: 111;
box-shadow: 0 0 0 rgba(204,169,44, 0.4);
animation: pulse 2s infinite;
}
.pulse:hover {
animation: none;
}

@-webkit-keyframes pulse {
0% {
-webkit-box-shadow: 0 0 0 0 rgba(204,169,44, 0.4);
background: red;
}
70% {
-webkit-box-shadow: 0 0 0 10px rgba(204,169,44, 0);
background: yellow;
}
100% {
-webkit-box-shadow: 0 0 0 0 rgba(204,169,44, 0);
background: blue;
}
}
@keyframes pulse {
0% {
-moz-box-shadow: 0 0 0 0 rgba(204,169,44, 0.4);
box-shadow: 0 0 0 0 rgba(204,169,44, 0.4);
background: red;
}
70% {
-moz-box-shadow: 0 0 0 10px rgba(204,169,44, 0);
box-shadow: 0 0 0 10px rgba(204,169,44, 0);
background: yellow;
}
100% {
-moz-box-shadow: 0 0 0 0 rgba(204,169,44, 0);
box-shadow: 0 0 0 0 rgba(204,169,44, 0);
background: blue;
}
}

div#cmasnoti ul li { padding-bottom: 12px; }`
           );

var itemImg = [
    "chests-1",
    "chests-2",
    "chests-3",
    "chests-4",
    "keys-91",
    "keys-92",
    "keys-93",
    "180",
    "638",
    "550",
    "551",
    "552",
    "554",
    "553",
    "555",
    "530",
    "527",
    "210",
    "529",
    "556",
    "528"
];

var itemName = [
    "Wooden Chest",
    "Bronze Chest",
    "Silver Chest",
    "Golden Chest",
    "Bronze Key",
    "Silver Key",
    "Golden Key",
    "Bottle of Beer",
    "Bottle of Christmas Cocktail",
    "Bottle of Kandy Kane",
    "Bottle of Minty Mayhem",
    "Bottle of Mistletoe Madness",
    "Can of Rockstar Rudolph",
    "Can of Santa Shooters",
    "Can of X-MASS",
    "Can of Munster",
    "Bag of Candy Kisses",
    "Bag of Chocolate Kisses",
    "Bag of Chocolate Truffles",
    "Bag of Reindeer Droppings",
    "Bag of Tootsie Rolls"
];

function getItemName(src) {
    arr = src.split("/");
    if(arr[3] == "christmas_town") {
        id = arr[5].replace(".png", "");
    }
    else {
        id = arr[3];
    }

    return itemImg.indexOf(id) != -1 ? itemName[itemImg.indexOf(id)] : "";
}


function getPos(x,y) {
    var myPos = $("span[class^='position']").text().split(",");
    var myX = parseInt(myPos[0]);
    var myY = parseInt(myPos[1]);
    var mycordX = parseInt($(".ct-user:last-child").css("transform").split(",")[4]);
    var mycordY = parseInt($(".ct-user:last-child").css("transform").split(",")[5]);

    diffX = mycordX - parseInt(x);
    diffY = mycordY - parseInt(y);

    convX = Math.round(diffX) / 30;
    convY = Math.round(diffY) / 30;

    posX = parseInt(myX - convX);
    posY = parseInt(myY + convY);

    return posX + "," + posY;

}

function cmasNotification() {

    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            for (var i = 0; i < mutation.addedNodes.length; i++) {
                if (mutation.addedNodes[i].className === 'world ') {
                    var observer2 = new MutationObserver(function(mutations) {


                        if($("div#world").attr('class') == "world ")
                        {


                            var totalItems = $("div.items-layer div.ct-item").length;
                            var totalNPC = $(".npc").length;

                            if(totalItems > 0 && !$("#cmasnoti").is(":visible")){
                                $("#cmasnoti").slideDown(1000);
                            }
                            else if(totalNPC > 0 && !$("#cmasnoti").is(":visible")){
                                $("#cmasnoti span").text('OoPpss !!');
                                $("#cmasnoti").slideDown(1000);
                            }
                            else if(totalItems == 0 && totalNPC == 0) {
                                $("#cmasnoti").slideUp(1000);
                            }

                            setTimeout(() => {
                                $("#cmasnoti ul").empty();
                                var strItem = "";
                                $.each($("div.items-layer div.ct-item"), function() {
                                    $(this).addClass('pulse');
                                    src = $(this).find("img").attr("src");
                                    x = parseInt($(this).css("left"));
                                    y = parseInt($(this).css("top"));
                                    pos = getPos(x,y);
                                    strItem += "<li>You found <strong>" + getItemName(src) + "</strong> [" + $(this).html().replace("position: absolute;", "").replace("max-height: 30px;", "max-height: 22px;").replace("margin: auto;", "margin: -2px 0px;").replace("img", "img alt='"+getItemName(src)+"' title='"+getItemName(src)+"'") + "] at <strong>" + pos + "</strong></li>";
                                });


                                $.each($(".npc"), function() {
                                    x = parseInt($(this).css("transform").split(",")[4]);
                                    y = parseInt($(this).css("transform").split(",")[5]);
                                    pos = getPos(x,y);
                                    npc = $(this).html().replace('class="img-wrap"', 'style="float:left;margin-top:-12px;"');
                                    if(npc.search("santa") != -1) {
                                        strItem += "<li>" + npc + " is around you. Catch him near <strong>" + pos + "</strong></li>";
                                    }
                                    if(npc.search("grinch") != -1) {
                                        strItem += "<li> " + npc + " is around you at <strong>" + pos + "</strong>. <strong>RUN AWAY !!</strong> before he catch you to steal your items. </li>";
                                    }
                                });

                                if(totalNPC > 0 || totalItems > 0) {
                                    $("#cmasnoti span").text('OoPpss !!');
                                    $("#cmasnoti ul").append(strItem);
                                }

                            }, 500);
                        }

                    });
                    var observerTarget2 = $("div#world")[0];
                    var observerConfig2 = { attributes:true, childList: false, characterData: false, subtree: false };
                    observer2.observe(observerTarget2, observerConfig2);


                    $("#cmasnoti ul").empty();
                    var totalItems = $("div.items-layer div.ct-item").length;
                    var totalNPC = $(".npc").length;

                    if(totalItems > 0 && !$("#cmasnoti").is(":visible")){
                        $("#cmasnoti").slideDown(1000);
                    }
                    else if(totalNPC > 0 && !$("#cmasnoti").is(":visible")){
                        $("#cmasnoti span").text('OoPpss !!');
                        $("#cmasnoti").slideDown(1000);
                    }
                    else if(totalItems == 0 && totalNPC == 0) {
                        $("#cmasnoti").slideUp(1000);
                    }

                    var strItem = "";
                    $.each($("div.items-layer div.ct-item"), function() {
                        $(this).addClass('pulse');
                        src = $(this).find("img").attr("src");
                        x = parseInt($(this).css("left"));
                        y = parseInt($(this).css("top"));
                        pos = getPos(x,y);
                        strItem += "<li>You found <strong>" + getItemName(src) + "</strong> [" + $(this).html().replace("position: absolute;", "").replace("max-height: 30px;", "max-height: 22px;").replace("margin: auto;", "margin: -2px 0px;").replace("img", "img alt='"+getItemName(src)+"' title='"+getItemName(src)+"'") + "] at <strong>" + pos + "</strong></li>";
                    });

                    $.each($(".npc"), function() {
                        x = parseInt($(this).css("transform").split(",")[4]);
                        y = parseInt($(this).css("transform").split(",")[5]);
                        pos = getPos(x,y);
                        npc = $(this).html().replace('class="img-wrap"', 'style="float:left;margin-top:-12px;"');
                        if(npc.search("santa") != -1) {
                            strItem += "<li>" + npc + " is around you. Catch him near <strong>" + pos + "</strong></li>";
                        }
                        if(npc.search("grinch") != -1) {
                            strItem += "<li> " + npc + " is around you at <strong>" + pos + "</strong>. <strong>RUN AWAY !!</strong> before he catch you to steal your items. </li>";
                        }
                    });

                    if(totalNPC > 0 || totalItems > 0) {
                        $("#cmasnoti span").text('OoPpss !!');
                        $("#cmasnoti ul").append(strItem);
                    }



                    var games = `<b>Christmas Wreath</b> : 147,53<br/><b>Gingerbread Man</b> : 91,55<br/><b>Hang Man</b> : 119,81<br/><b>Pot (PvP)</b> : 104,67<br/><b>Present Pick</b> : 112,55<br/><b>Santa Claws</b> : 137,79<br/><b>Snowball Shooter</b> : 87,52<br/><b>Word Fixer</b> : 99,54`;
                    var shop = `<b>Beer Shop</b> : 109,68<br/><b>Candy Shop</b> : 147,67<br/><b>Gift Shop</b> : 124,67`;

                    $(".links-header").after(`<a class="new-thread t-clear h c-pointer  line-h24 right " href="#" title="${games}" style="padding-right: 20px;">
<span class="icon-wrap">
<i class="black-star-icon"></i>
</span>
<span id="new-thread">Games</span>
</a>`);
                    $(".links-header").after(`<a class="new-thread t-clear h c-pointer  line-h24 right " href="#" title="${shop}">
<span class="icon-wrap">
<i class="black-star-icon"></i>
</span>
<span id="new-thread">Shops</span>
</a>`);

                    observer.disconnect();
                    break;
                }
            }
        });
    });

    // start listening for changes
    var observerTarget = $("#christmastownroot")[0];
    var observerConfig = { attributes: false, childList: true, characterData: false, subtree: true };
    observer.observe(observerTarget, observerConfig);
}


$('div.content-wrapper').prepend(`<div id='cmasnoti' class="m-top10" style="display:none;">
<div class="title-green top-round" role="heading" aria-level="5">
<i class="ct-christmastown-icon"></i>
<span></span>
</div>
<div class="bottom-round cont-gray p10">
<p></p>
<ul></ul>
</div>
<!--div class="clear"></div-->
<hr class="page-head-delimiter m-top10">
</div>`);


if (location.href.indexOf('torn.com/christmas_town.php') !== -1) {
    cmasNotification();
}