DC_trop_ouha

Super secret project

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         DC_trop_ouha
// @author       Ladoria
// @version		 0.1
// @namespace    DC_custom
// @description  Super secret project
// @match        http://www.dreadcast.net/Main
// @grant        none
// ==/UserScript==

var pokereuils = [];
var pokedoll = null;
var map_pos = null;
var main_char_pos = null;

var style = '<style>/*circle on map*/#dc_sensors_overlay {position: absolute;    left: 3px;    top: 3px;}/*circle + tooltip to show*/#dc_sensors_tooltips {position: absolute;    left: 3px;    top: 3px;    width: 525px;    height: 525px;border: 1px solid #86898a; /*because fuck it*/overflow: hidden;}#dc_sensors_tooltips .dc_pokereuil {display: none;}.dc_pokereuil {    margin: -3px 0 0 -3px;position: absolute;z-index: 1000;}.dc_pokereuil .circle {background: url(http://image.noelshack.com/fichiers/2016/47/1479820995-overlay-circle.png) no-repeat;background-size: 25px 25px;width: 25px;height: 25px;position: absolute;top: 0px;left: 0px;cursor: pointer;}/*#dc_sensors_overlay .dc_pokereuil:hover > .circle_background {display: block;}#dc_sensors_tooltips .dc_pokereuil:hover {display: block;}#dc_sensors_tooltips .dc_pokereuil:hover > .tooltip {display: block;}*/.circle_background {display: none;width: 25px;height: 25px;position: absolute;top: 0px;left: 0px;}.circle_right {background: url(http://image.noelshack.com/fichiers/2016/49/1480962666-overlay-circle-right.png) no-repeat;background-size: 25px 25px;}.circle_left {display: none;background: url(http://image.noelshack.com/fichiers/2016/49/1480963031-overlay-circle-left.png) no-repeat;background-size: 25px 25px;}.dc_pokereuil .tooltip {display: block;    position: absolute;top: 0px;left: 25px;height: 25px;background: url(../../../images/fr/design/box7_fond_0.png);padding-right: 2px;}.dc_pokereuil .tooltip.overlay_left{left: auto;right: 0px;}.dc_pokereuil .tooltip .infos {    margin: 0 0 0 3px;}.dc_pokereuil .text {font-size: 12px;line-height: initial;margin: 0 1px 0 1px;color: #41e4ee;cursor: pointer;}.dc_pokereuil .border_y {background: url(http://image.noelshack.com/fichiers/2016/49/1480979103-overlay-border-y.png);height: 100%;    width: 2px;position: absolute;top: 0px;}.dc_pokereuil .border_right {right: -2px;}.dc_pokereuil .border_left {left: -2px;}.dc_pokereuil .border_x {/*background: url(http://image.noelshack.com/fichiers/2016/49/1480978567-overlay-y-dart.png);*/height: 100%;    height: 2px;position: absolute;}.dc_pokereuil .border_top {top: -2px;}.dc_pokereuil .border_bottom {bottom: -2px;}#dc_secret  {position: absolute;top: 150px;left: 525px;width: 150px;}#dc_secret .image {margin: -3px;cursor: pointer;}#dc_secret .interieur {margin: 7px;}#dc_secret .message {position: absolute;top: 38px;    left: 15px;}#dc_secret .fakeToolTip .deco1 {left: 20px;}#dc_secret .secondToolTip  {position: relative;margin-top: 6px;top: 0px;left: 0px;}#dc_secret .secondToolTip .deco1 {display: none;}</style>';

var Doll = function(character) {
	this.character = character;
	this.activated = false;
	this.fakeTooltipId = 0;
	
	this.toggleDoll = function () {
		this.activated = !this.activated;
		
		if(true == this.activated) {
			this.showDoll();
		}
		else
			this.hideDoll();
		
		return;
	};
	
	this.updateDoll = function(character) {
		this.character = character;
		
		this.destroy();
		this.putHtmlDoll();
	};
	
	this.showDoll = function () {
		$('#dc_secret').fadeTo(300, 1, function() { $('#dc_secret').show(); });
		this.activated = true;
	};
	
	this.hideDoll = function () {
		$('#dc_secret').fadeTo(300, 0, function() { $('#dc_secret').hide(); });
		this.activated = false;
	};
	
	this.putHtmlDoll = function () {
		$('#zone_infoBoxFixed').append('<div id="dc_secret" class="zone_conteneurs_displayed"><div class="conteneur ui-draggable"><div class="titreConteneur">' + this.character.name + '</div><div class="conteneur_content"><div class="fond1"></div><div class="fond2"></div><div class="fond3"></div><div class="fond4"></div><div class="fond5"></div><div class="fond6"></div><div class="fond7"></div><div class="fond8"></div><div id="doll" class="objects"><div class="interieur info_objet"><img class="image" src="' + this.character.silhouette + '"><div class="notThere member"></div></div></div><div class="close link"></div></div></div></div>');
		
		$('#dc_secret').draggable();
		
		$('#dc_secret .close').on('click', function() {
			pokedoll.hideDoll();
		});
		
		$('#dc_secret .image').on('click', function() {
			pokedoll.showMessage('Aaaaaaaaaaah !!!');
		});
	};
	
	this.destroy = function () {
		$('#dc_secret').remove();
	};
	
	this.showMessage = function (message) {
		var tooltipId = this.fakeTooltipId; // variable range issue
		this.fakeTooltipId++;
		
		$('#dc_secret .conteneur_content').append('<div id="' + tooltipId + '" class="message fakeToolTip"><div class="deco1"></div><span>' + message + '</span></div>');
		
		// fadeTo 1 -> temporize -> fadeTo 0 -> remove.
		$('#dc_secret #' + tooltipId).fadeTo(300, 1,
			function() {
				setTimeout(
					function() { $('#dc_secret #' + tooltipId).fadeTo(300, 0,
						function() { $('#dc_secret #' + tooltipId).remove()}); }
				,1000)
		});
	}
}

var Character = function(name, silhouette, positions) {
	this.name = name;
	this.silhouette = silhouette;
	
	if (null !== positions) this.positions = positions;
	else this.positions = [];
	
	this.equals = function(character) {
		if (this.name == character.name) return true;
		return false;
	};
	
	this.addPosition = function(position) {
		for (var i = 0; i < this.positions.length; i++) {
			if (true === positions[i].equals(position)) return;
		}
		
		positions.push(position);
	};
	
	this.isWatched = function () {
		for (var i = 0; i < pokereuils.length; i++) {
			if (pokereuils[i].equals(this)) return true;
		}
		
		return false;
	};
};

Character.getCharacter = function (name) {
	for (var i = 0; i < pokereuils.length; i++) {
		if (name == pokereuils[i].name)
			return pokereuils[i];
	}
	
	return null;
};

var Position = function(x, y, timestamp) {
	this.x = x;
	this.y = y;
	
	if ('undefined' !== timestamp) this.timestamp = timestamp;
	else this.timestamp = Date.now();
	
	this.equals = function(position) {
		if (	this.x == position.x
			&&	this.y == position.y) return true;
		return false;
	};
	
	this.isVisible = function() {
		if (	Math.abs(this.x - map_pos.x) > 20
			||	Math.abs(this.y - map_pos.y) > 20) return false;
			return true;
	};
};

function update_char(character) {
	for (var i = 0; i < pokereuils.length; i++) {
		if (character.name == pokereuils[i].name) {
			pokereuils[i] = character;
			
			return;
		}
	}
}

function update_map_pos() {
	var posX = parseInt(/[0-9]+/.exec($('#carte_fond').css('background-position-x'))) / 25;
	var posY = parseInt(/[0-9]+/.exec($('#carte_fond').css('background-position-y'))) / 25;
	
	map_pos = new Position(posX,posY);
	
	posX += 10;
	posY += 10;
	
	main_char_pos = new Position(posX,posY);
}

function char_pos(overlay_id) {
	return new Position(map_pos.x + parseInt(/([0-9]+)_([0-9]+)/.exec(overlay_id)[1]),
						map_pos.y + parseInt(/([0-9]+)_([0-9]+)/.exec(overlay_id)[2]));
}

function is_overflowed_x(id) {
	var tooltip = $('#' + id + '_overlay .tooltip');
	
	var posX = parseInt(/[0-9]+/.exec($('#' + id +'_overlay').css('top'))) + parseInt(/[0-9]+/.exec(tooltip.css('top')));
	var heightX = parseInt(/[0-9]+/.exec(tooltip.css('height')));
	
	if (posX + heightX < $('#dc_sensors_tooltips').width()) return false;
	
	return true;
}

function show_overlay() {	//console.log('-------------------------------\n overlay');
	for (var i = 0; i < pokereuils.length; i++) {
		//console.log(pokereuils[i].name + ', ' + (i+1) + '/' + pokereuils.length);
		
		for (var j = 0; j < pokereuils[i].positions.length; j++) {
			//console.log(pokereuils[i].positions[j].x + ':' + pokereuils[i].positions[j].y + ', ' + (j+1) + '/' + pokereuils[i].positions.length);
			
			var id = pokereuils[i].positions[j].x + '_' + pokereuils[i].positions[j].y;
			
			//console.log(pokereuils[i].positions[j]);
			if (false === pokereuils[i].positions[j].isVisible()) {
				$('#' + id).hide();
				return;
			}
			
			if (0 === $('#' + id).length) {
				$('#dc_sensors_overlay').append('<div id="' + id + '" class="dc_pokereuil"><div class="circle_background circle_right"></div><div class="circle"></div></div>');
				
				$('#dc_sensors_tooltips').append('<div id="' + id + '_overlay" class="dc_pokereuil"><div class="tooltip"><div class="infos"></div><div class="border_y border_right"></div><div class="border_x border_top"></div><div class="border_x border_bottom"></div></div></div>');
				
				$('#' +  id).on('mouseenter', function () {
					$('#' + $(this).attr('id') + ' .circle_background').show()
					$('#' + $(this).attr('id') + '_overlay').show();
					
					console.log('show ' + $(this).attr('id') + '_overlay');
				});
				$('#' +  id + '_overlay').on('mouseleave', function () {
					$(this).hide();
					$('#' + /(.*)_overlay/.exec($(this).attr('id'))[1] + ' .circle_background').hide();

					console.log('hide: ' + $(this).attr('id'));
				});
			}
			
			$('#' + id).css({	'top' : ((pokereuils[i].positions[j].y - map_pos.y) * 25),
								'left' : ((pokereuils[i].positions[j].x - map_pos.x) * 25)});
			$('#' + id + '_overlay').css({	'top' : ((pokereuils[i].positions[j].y - map_pos.y) * 25),
											'left' : ((pokereuils[i].positions[j].x - map_pos.x) * 25)});
			
			if(true === is_overflowed_x(id)) {
				$('#' + id + '_overlay .tooltip').removeClass('overlay_right');
				$('#' + id + '_overlay .tooltip').addClass('overlay_left');
				
				$('#' + id + '_overlay .tooltip .border_y').removeClass('border_right');
				$('#' + id + '_overlay .tooltip .border_y').addClass('border_left');
				
				$('#' + id + ' .circle_background').removeClass('circle_right');
				$('#' + id + ' .circle_background').addClass('circle_left');
			}
				
			var found = false;
			
			$('#' + id + '_overlay .text').each( function() {
				if (true === new RegExp(pokereuils[i].name,'gi').test($(this).html()))
					found = true;
			});
			
			if (false === found) {
				$('#' + id + '_overlay .infos').append('<span class="text">' + pokereuils[i].name + '</span>');
			}
			
			$('#' + id).show();
		}
	}	//console.log('-------------------------------');
	
	// because fuck it, for now
	$('.dc_pokereuil .text').off('click');
	$('.dc_pokereuil .text').on('click', function() {
		pokedoll.updateDoll(Character.getCharacter($(this).html()));
	});
}

function hide_overlay() {
	$('.dc_sensors_last_seen').hide();
}

$(document).ajaxComplete( function(a,b,c) { // A chaque refresh, même invisible.
	if(/(Check|Move)/.test(c.url)) { // Durant certains refresh, dont le combat.
		//console.log('time: ' + new Date(Date.now()).getHours() + ':' + new Date(Date.now()).getMinutes() + ':' + new Date(Date.now()).getSeconds());
		update_map_pos();
		show_overlay();
	}
});

$(document).ready( function() {
	$('head').append(style);
	
	$('#dc_secret .conteneur').draggable();
	
	$('#carte').after('<div id="dc_sensors_tooltips"></div>');
	$('#carte').append('<div id="dc_sensors_overlay"></div>');
	
	pokedoll = new Doll(null);
});

console.log('DC - Secret started');

// debug
var debug_char = new Character('Yonbaïke_01', 'http://image.noelshack.com/fichiers/2016/12/1458784579-yon.png', []);
debug_char.addPosition(new Position(61, 37));
pokereuils.push(debug_char);

var debug_char = new Character('Yonbaïke_02', 'http://image.noelshack.com/fichiers/2016/12/1458784579-yon.png', []);
debug_char.addPosition(new Position(61, 37));
pokereuils.push(debug_char);

var debug_char = new Character('Yonbaïke_03', 'http://image.noelshack.com/fichiers/2016/12/1458784579-yon.png', []);
debug_char.addPosition(new Position(64, 38));
pokereuils.push(debug_char);