Adventure of Chaos helper

helper for AOC

2015-08-17 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

// ==UserScript==
// @name         Adventure of Chaos helper
// @namespace    http://www.x4code.com
// @version      0.2
// @author       Manro
// @match        http://cdn1.x4code.com/game/*
// @match        http://cdn2.x4code.com/game/*
// @match        http://cdn3.x4code.com/game/*
// @match        http://cdn4.x4code.com/game/*
// @match        http://cdn5.x4code.com/game/*
// @match        http://cdn6.x4code.com/game/*
// @grant        none
// @description  helper for AOC
// ==/UserScript==

(function($) {
	$.fn.tips = function(options) {
		var opts = $.extend({}, $.fn.showinfo.defaults, options);
		if ($("#ToolsTip").size() == 0) $('<div id="ToolsTip"></div>').hide().appendTo('body');
		var $ToolsTip = $("#ToolsTip");
		this.bind('mouseover mousemove mouseout', function(event) {
			var TarData = $(this).attr('title') || $(this).data('title');
			$(this).removeAttr('title');
			$(this).data('title',TarData);
			switch (event.type){
				case 'mousemove':
					var top  = event.pageY + 12,
						left = event.pageX + 12;
					if ($ToolsTip.innerHeight() + top + 12 > $(document).height()) top = $(document).height() - $ToolsTip.innerHeight() - 20;
					$ToolsTip.css({top: top,  left: left}).show();
				case 'mouseover':
					$ToolsTip.html(TarData);
				break;
				case 'mouseout':
					$ToolsTip.removeClass().removeData().empty().hide();
				break;
				}
		});
	}

	$.fn.showinfo = function(options) {
		var opts = $.extend({}, $.fn.showinfo.defaults, options);
		if ($("#InfoTip").size() == 0) {
			$('<div id="InfoTip"></div>').hide().appendTo('body');
			$('<div id="InfoTip" class="InfoTip2"></div>').hide().appendTo('body');
		}
		var $InfoTip = $("#InfoTip");
		var $InfoTip2 = $('.InfoTip2').css({
			'position': 'absolute',
			'z-index': '10000',
			'border-radius': '4px',
			'border-width': '3px',
			'border-style': 'ridge',
			'min-width': '160px',
			'max-width': '200px',
			'padding': '5px 10px'
		});
		var equips = $('#equips button').map(function(index, elem) {
			return $(elem).data('info');
		});

		this.bind('mouseover mouseout mousemove', function(event) {
			var TarData = $(this).data('info');


			var showCompare = this.tagName != 'BUTTON';
			var compareData = null;
			var tarType = TarData.type.substr(0,1);
			for (var i = 0; i < equips.length; i++) {
				var equip = equips[i];
				if (equip.type.substr(0,1) == tarType) {
					compareData =equip;
					break;
				}
			}
			

			var showid = '_';
			if (TarData.eid) showid += TarData.eid+"_";
			if (TarData.tid) showid += TarData.tid;
			switch (event.type){
				case 'mousemove':
					var top  = event.pageY + 12,
						left = event.pageX + 12;
					if ($InfoTip.innerHeight() + top + 12 > $(document).height()) top = $(document).height() - $InfoTip.innerHeight() - 12;
					if ($InfoTip.innerWidth() + left + 12 > $(document).width()) left = event.pageX - $InfoTip.innerWidth() - 12;
					$InfoTip.css({top: top,  left: left}).show();
					if (showCompare && compareData) {
						$InfoTip2.css({top: top,  left: left+$InfoTip.innerWidth()+ 5}).show();
					}
					if ($InfoTip.data('show') == showid) { return false; }
					$InfoTip.data('show',showid);
				case 'mouseover':
					// console.log(TarData.pz);
					$InfoTip.addClass('pz'+TarData.epz);
					var TipData = $.fn.showinfo.ext(TarData,showCompare&&compareData?compareData:null);
					$InfoTip.html(TipData);

					if (showCompare) {
						$InfoTip2.addClass('pz'+compareData.epz);
						var TipData2 = $.fn.showinfo.ext(compareData);
						$InfoTip2.html(TipData2);  
					}
				break;
				case 'mouseout':
					$InfoTip.removeClass().removeData().empty().hide();
					$InfoTip2.removeClass().removeData().empty().hide();
				break;
			}
		});
	}
	$.fn.showinfo.ext = function(v,compare) {
		var rtHtml =  v.lv > 0 ? "<span class='lv'>Lv:"+v.lv+"</span>":"";
		rtHtml += "<h3>"+v.name;
		if (v.qlv > 0) { rtHtml += " +"+v.qlv; };
		rtHtml += "</h3>";
		var info = v.info ? $.parseJSON(v.info) : {};
		var addinfo = v.addinfo ? $.parseJSON(v.addinfo) : {};
		var compreAddinfo = null;
		if (compare) {
		   compreAddinfo = compare.addinfo ? $.parseJSON(compare.addinfo) : null;  
		 } 
		var colorkey = [];
		if (Object.keys(addinfo).length){
			for(var key in addinfo){
				if(info.hasOwnProperty(key)) {
					info[key] = info[key] + addinfo[key];
					colorkey[key] = 1;
				}
			}
		}
		rtHtml += "<p>";
		if (v.rank != 0 && v.rank) rtHtml += "["+$.fn.showinfo.rankstr(v.rank)+"] ";
		rtHtml += '['+$.fn.showinfo.typestr(v.type)+'] ';
		if (v.job != 0) rtHtml += "["+$.fn.showinfo.jobstr(v.job)+"]";
		rtHtml += "</p>";
		if (info.att_min+info.att_max > 0) {
			rtHtml += "攻击力:<b>";
			rtHtml += colorkey.att_min ? "<i>"+info.att_min+"</i> - " : info.att_min + " - ";
			rtHtml += colorkey.att_max ? "<i>"+info.att_max+"</i></b>" : info.att_max+"</b>";
		};
		if (info.att_min) { delete info.att_min; }
		if (info.att_max) { delete info.att_max; }
		// console.log(info.length);
		if (Object.keys(info).length){
			rtHtml += "<ul class='info'>";
			for(var key in info){
				// console.log(key+' : '+info[key]);
				var tags = $.fn.showinfo.extinfo(key);
				rtHtml += "<li>"+tags[0]+":<b>";
				rtHtml += colorkey[key] ? "<i>"+info[key]+tags[1]+"</i></b></li>" : info[key]+tags[1]+"</b></li>";
			}
			rtHtml += "</ul>"
		}
		if (Object.keys(addinfo).length){
			rtHtml += "<ul class='addinfo'>[附加属性]";
			for(var key in addinfo){
				// console.log(key+' : '+info[key]);
				var tags = $.fn.showinfo.extinfo(key);
				var compareString = '';
				if (compreAddinfo && compreAddinfo.hasOwnProperty(key)) {
				    compareString = parseInt(addinfo[key]) - parseInt(compreAddinfo[key]);
				}
				rtHtml += "<li>"+tags[0]+":"+addinfo[key]+tags[1]+"<span class='pull-right'>"+compareString+"</span></li>";
			}
			rtHtml += "</ul>"
		}
		rtHtml += v.num ? "<p>数量:"+v.num+"</p>" : "";
		rtHtml += v.about ? "<p><q>"+v.about+"</q></p>" : "";
		// if (v.eid) { rtHtml += "<p>"+v.eid+"</p>" };
		return rtHtml;
	}
	$.fn.showinfo.extinfo = function(key){
		var data = {
			'hp'         : 	['生命值',''],
			'pow'        : 	['强度',''],
			'dex'        : 	['敏捷',''],
			'con'        : 	['体质',''],
			'att_min'    : 	['最小攻击',''],
			'att_max'    : 	['最大攻击',''],
			'def'        : 	['防御',''],
			'eva'        : 	['闪避机率',' %'],
			'arm'        : 	['护甲',''],
			'dmgeff'     : 	['伤害减免',' %'],
			'hit'        : 	['命中机率',' %'],
			'cri'        : 	['暴击机率',' %'],
			'cridmg'     : 	['暴击伤害',' %'],
			'rec'        : 	['恢复',' %'],
			'add_hp'     : 	['生命值',' %'],
			'add_att'    : 	['攻击力',' %'],
			'add_def'    : 	['防御增强',' %'],
			'add_eva'    : 	['闪避机率',' %'],
			'add_arm'    : 	['护甲增强',' %'],
			'add_dmgeff' : 	['伤害减免',' %'],
			'add_hit'    : 	['命中机率',' %'],
			'add_cri'    : 	['暴击机率',' %'],
			'add_cridmg' : 	['暴击伤害',' %'],
			'add_rec'   : 	['恢复',' %'],
		};
		return data[key];
	}
	$.fn.showinfo.typestr = function(type){
		var data = {
			"_1"  : "普通武器",
			"_2"  : "普通防具",
			"_3"  : "戒指",
			"_4"  : "护符",
			"_5"  : "材料",
			"_11" : "剑",
			"_12" : "匕首",
			"_13" : "锤",
			"_14" : "弓",
			"_15" : "弩",
			"_16" : "斧",
			"_17" : "法杖",
			"_18" : "魔杖",
			"_19" : "权杖",
			"_21" : "轻甲",
			"_22" : "中甲",
			"_23" : "重甲",
			"_50" : "材料"
		};
		return data['_'+type];
	}
	$.fn.showinfo.rankstr = function(type){ // 难度装备
		var data = {
			"_0" : "",
			"_1" : "困难",
			"_2" : "专家",
			"_3" : "大师",
			"_4" : "苦痛I",
			"_5" : "苦痛II",
			"_6" : "苦痛III",
			"_7" : "苦痛IV",
			"_8" : "苦痛V",
			"_9" : "苦痛VI"
		};
		return data['_'+type];
	}
	$.fn.showinfo.jobstr = function(jid){
		var data = {
		'_0'   : '冒险者',
		'_1'   : '护卫',	'_2'   : '信徒',	'_3'   : '学徒',
		'_11'  : '骑士',	'_12'  : '斗士',	'_21'  : '牧师',	'_22' : '魔法师',	'_31' : '斥候',	'_32' : '猎人',
		'_111' : '领主',	'_112' : '至尊骑士','_121' : '战狂',	'_122' : '圣武士',
		'_211' : '主教',	'_212' : '贤者',	'_221' : '巫师',	'_222' : '先知',
		'_311' : '刺客',	'_312' : '侠盗',	'_321' : '游侠',	'_322' : '神射手'
		};
		return data['_'+jid];
	}
	// 插件的defaults
	$.fn.showinfo.defaults = {
	};

// 闭包结束
})(jQuery);