// ==UserScript== // @name TW Friends // @version 0.03 // @description Friend Management for The West Events // @author hiroaki // @include http://*.the-west.*/game.php* // @namespace https://greasyfork.org/users/3197 // @downloadURL none // ==/UserScript== function hf(fn) { var script = document.createElement('script'); script.setAttribute("type", "application/javascript"); script.textContent = '(' + fn + ')();'; document.body.appendChild(script); document.body.removeChild(script); } hf (function() { var VERSION = 0.03; var eventName = 'Independence'; var refreshMs = 2 * 60 * 1000; // 2 minutes HiroFriends = { version: VERSION, storageItem: "HiroFriends.version", eventName : '', eventInfo : {}, friends : [], total : 0, avail: 0, }; HiroFriends.init = function(eventName) { if (undefined === Game.sesData[eventName] || undefined === Game.sesData[eventName].friendsbar) return false; HiroFriends.eventName = eventName; HiroFriends.eventInfo = Game.sesData[eventName].friendsbar; var base_href = (undefined === Game.cdnURL) ? "http://westzz.innogamescdn.com" : Game.cdnURL; var hiro_div = document.createElement('div'); var event_image = base_href + "/images/interface/friendsbar/events/Independence.png"; // to be based on the event hiro_div.setAttribute("style", "position: absolute; top: 32px; right: 50%; margin-right: 120px; z-index: 16; width: 180px; height: 36px; text-align: left; text-shadow: 1px 1px 1px #000; background: url('"+base_href+"/images/interface/custom_unit_counter_sprite.png?2') no-repeat scroll 50% 0px transparent;"); hiro_div.innerHTML='
(' + val.time.formatDurationBuffWay() + ') | '); else { td = $('' + HiroFriends.eventInfo.label + " | ").click({ id: val.id, ev: HiroFriends.eventName }, function (e) { $(this).parent().remove(); var t = e.handleObj.data; Ajax.remoteCall("friendsbar", "event", { player_id: t.id, event: t.ev }, function (e) { if (e.error) return MessageError(e.msg).show(); MessageSuccess(e.msg).show(); HiroFriends.friends[key].time = HiroFriends.eventInfo.cooldown; if (HiroFriends.avail) -- HiroFriends.avail; HiroFriends.update(); }) }) } tbl.append($('
' + idx + '. | ' + val.name + " | "), td)) ++ idx; }); var hiroWindow = wman.open("HiroFriends_"+HiroFriends.eventName, null, "noreload").setMiniTitle(HiroFriends.eventInfo.label).setTitle(HiroFriends.eventInfo.label); var hiroPane = new west.gui.Scrollpane; hiroPane.appendContent(tbl); hiroWindow.appendToContentPane(hiroPane.getMainDiv()) }); }; HiroFriends.update = function() { document.getElementById("hiro_friends").innerHTML = HiroFriends.avail+' / '+HiroFriends.total+''; } HiroFriends.fetch = function() { if (interval !== false) clearInterval (interval); var event_times = {}; var friends = [], total = 0, avail = 0; var server_time = (new ServerDate).getTime() / 1e3, activation_time, friend_time; return $.post( "/game.php?window=friendsbar&mode=search", { search_type: "friends" } , function (data) { $.each(data.eventActivations, function (key, val) { if (val.event_name == HiroFriends.eventName) event_times[val.friend_id] = val.activation_time; }); $.each(data.players, function (key, val) { if (val.name !== Character.name) { activation_time = (event_times[val.player_id] !== undefined) ? event_times[val.player_id]: 0; friend_time = activation_time + HiroFriends.eventInfo.cooldown - server_time; friends.push ({ id: val.player_id, name: val.name, time: friend_time }); ++ total; if (friend_time <= 0) ++ avail; } }); if (total) friends.sort(HiroFriends.compare); HiroFriends.friends = friends; HiroFriends.avail = avail; HiroFriends.total = total; interval = setInterval(function() { HiroFriends.fetch(); }, refreshMs); HiroFriends.update(); }); }; var interval = false; if (HiroFriends.init(eventName)) HiroFriends.fetch(); });