Adventure of Chaos helper

helper for AOC

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Adventure of Chaos helper
// @namespace    http://www.x4code.com
// @version      1.6
// @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/*
// @match        http://www.x4code.com/game/*
// @match        http://112.74.129.222/game/*
// @grant		 none
// @description  helper for AOC
// ==/UserScript==



//impl script
!function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){return b?{"\n":"\\n","\r":"\\r","	":"\\t"," ":" "}[b]||"\\"+b:c?"="===c?"'+_e("+d+")+'":"'+("+d+"==null?'':"+d+")+'":e?"';":f?"_s+='":void 0},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#39;"},b.encode=function(a){return(null==a?"":""+a).replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}","function"==typeof define&&define.amd?define(function(){return b}):a.tmpl=b}(this);


(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');
		}
		if ($('[infotip]').size() == 0) {
			$('<div id="InfoTip" infotip></div>').hide().appendTo('body');
		}
		var $InfoTip = $("#InfoTip");
		var $InfoTip2 = $('[infotip]').css({
			'position': 'absolute',
			'z-index': '10000',
			'border-radius': '4px',
			'border-width': '3px',
			'border-style': 'ridge',
			'min-width': '160px',
			'max-width': '200px',
			'padding': '5px 10px'
		});


		this.bind('mouseover mouseout mousemove', function(event) {
    		var equips = $('#equips button').map(function(index, elem) {
			    return $(elem).data('info');
		    });
			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);


window.showmain = function(type){
	$('.col-main > div').hide();
	if (type == 'fight') {
		showleft('rolestats');
		$('.window-fight').show();
		var fixheight = $('#enemys').innerHeight() > $('#friends').innerHeight() ?
			$('#enemys').innerHeight() : $('#friends').innerHeight();
		$('.battlelog').height(476 - fixheight);
	}else{
		$('.window-other').empty().append('<span class="boxloading"><img src="src/image/load2.gif" /> <br />载入中...</span>').show();
		$.get('box/'+type, function(result) {
			$('.window-other').empty().html(result);
			$('*[title]').tips();
			if (type == 'item') {
			    attachItemEnhance('#bag');
			}
		});

	}
};
var junkTypes = [1,2,14,16,18];
window.showtype = function(fatherbox,type) {
	$(fatherbox+' .showtype button').removeClass('active');
	$(fatherbox+' .showtype button').eq(type).addClass('active');
	if ($(fatherbox+' .items label').size() == 0) { return false; };
	$(fatherbox+' .items label').hide();
	if (type == 0) {
		$(fatherbox+' .items label').show();
	}else if(type == 5){
		$(fatherbox+' .items label').each(function() {
			if( parseInt($(this).data('type').toString().substr(0,1)) >= 5 ) $(this).show();
		});
	}else if(type == 6){
		var jopitem = check_job_equip();
		// console.log(jopitem);
		if (!jopitem) return false;
		$(fatherbox+' .items label').each(function() {
			// console.log(jopitem.indexOf($(this).data('type')));
			if( jopitem.indexOf($(this).data('type')) >= 0 ) $(this).show();
		});
	}else if(type == 7){
		$(fatherbox+' .items label').each(function() {
			var type = $(this).data('type');
			if (type !='50') {
			    if ($(this).data('pz') < 4) {
			        $(this).show();
			    }else if(junkTypes.indexOf(type) != -1){
			    	$(this).show();
			    }
			    
			    
			}

		});
	}else{
		$(fatherbox+' .items label').each(function() {
			if( $(this).data('type').toString().substr(0,1) == type ) $(this).show();
		});
	}
};

// 排列
window.relist = function relist(fatherbox,type){
	$(fatherbox+' .relist button').removeClass('active');
	$(fatherbox+' .relist button').eq(type).addClass('active');
	if ($(fatherbox+' .items label').size() == 0) { return false; };
	var lists = [];
	$(fatherbox+' .items label').each(function(index, el) {
		var info = $(el).data('info');
		if (!info.rank) {
		    info.rank = '-1';
		}
		lists.push([$(el).data('lv'),$(el).data('pz'),info.rank,$(el)]);
	});
	lists.sort(function (a,b){return b[type] - a[type];});
	$(fatherbox+' .items').empty();
	for(var i in lists){
		$(fatherbox+' .items').append(lists[i][3]);
	}
	$('.box-checkbox, .equip').showinfo();
}

function attachItemEnhance (id) {
	$(id+' .showtype').append('<button onclick="showtype(\''+id+'\',7);" class="btn btn-primary btn-xs" title="显示蓝色及以下,普通装备,弓,魔杖,斧">垃圾</button>');
	$(id+' .relist').append('<button onclick="relist(\''+id+'\',2);" class="btn btn-default btn-xs">难度</button>');
}

//仓库功能;
window.usebank = function(type) {
	if ($('#bank').hasClass('hidden')) {
		$('#bank').removeClass('hidden');
		$('#bag').css('height','49%');
		$('#bag .items').css('height','160');
		$('#bank').empty().append('<span class="boxloading"><img src="src/image/load2.gif" /> <br />载入中...</span>').show();
		$.get(base_url+'box/bank', function(data) {
			$('#bank').html(data);
			attachItemEnhance('#bank');
			bankfun(type);
			$('*[title]').tips();
			$('.box-checkbox, .equip').showinfo();
		});
	}else{
		bankfun(type);
	}
};

/************************ fight ********************/
window.battlesetup = function() {
	showmain('fight');
	if (window.battenow) {
		window.battenow = false;
		$('input[name=btype]').removeAttr('disabled');
		$('#battlebtn').removeClass('btn-danger').addClass('btn-primary').addClass('disabled');
		var Num  = 15;
		$('#battlebtn').text('[ '+Num+' ]');
		var timer = setInterval(function() {
			Num --;
			$('#battlebtn').text('[ '+Num+' ]').addClass('disabled');
			if (Num <= 0) {
				clearInterval(timer);
				$('#battlebtn').text('开始战斗').removeClass('disabled');
			};
		}, 1000);
	}else{
		BattleInfo.init();
		window.battenow = true;
		battle();
		$('#battlebtn').removeClass('btn-primary').addClass('btn-danger').addClass('disabled');
		var Num  = 15;
		$('#battlebtn').text('[ '+Num+' ]');
		var timer = setInterval(function() {
			Num --;
			$('#battlebtn').text('[ '+Num+' ]').addClass('disabled');
			if (Num <= 0) {
				clearInterval(timer);
				$('#battlebtn').text('停止战斗').removeClass('disabled');
				if (!window.battenow) $('#battlebtn').text('开始战斗').removeClass('btn-danger').addClass('btn-primary');
			}
		}, 1000);
	}
};
window.battle = function(){
	//保存自动出售设置
	if(window.localStorage){
		localStorage["s11"] = $('#autosell1').prop("checked") ? 1 : 0;
		localStorage["s22"] = $('#autosell2').prop("checked") ? 1 : 0;
		localStorage["s33"] = $('#autosell3').prop("checked") ? 1 : 0;
		localStorage["bty"] = $('#battletype input:checked').val();
	}
	if (!battenow) return false;
	var autosell1 = $('#autosell1').prop('checked') ? 1 : 0;
	var autosell2 = $('#autosell2').prop('checked') ? 1 : 0;
	var autosell3 = $('#autosell3').prop('checked') ? 1 : 0;
	var fighttype = $('#battletype input:checked').val();
	$.ajax({
		url      : base_url+'fight/battle',
		data     : {'t':fighttype,'s1':autosell1,'s2':autosell2,'s3':autosell3},
		type     : "POST",
		dataType : 'text',
		timeout  : 3000,
		success:function(data){
			if (data=='非法请求') {
				setTimeout(function(){ battle(); }, 2000);
			}else{
				checkBattle(data);
				BattleInfo.resolve(data);
			}
		},
		complete : function(XMLHttpRequest,status){
			var error = '';
			if (status=='timeout') {
				error = '连接服务器超时..';
			}else if (status == 'error') {
				error = '服务器暂时无响应..';
			}else if (status == 'success') {
				game_err = 0;
			}
			if (error) {
				game_err ++;
				// if (game_err > 50) window.location.reload();
				viewLog({text:'<span class="text-red">'+error+'</span>'},5000,function(){ battle(); });
			};
		}
	});
}

window.BattleInfo = {
	data:{},
	init:function() {
		this.data = {
			startTime: new Date(),
			winCount:0,
			battleCount:0,
			teamInfo:{}
		};
		var $container = $('<div id="battleInfoContainer"><div class="tableContainer"></div><span>战斗统计</span></div>').appendTo('body');

	},
	resolve:function(data) {
		var gamelog = $.parseJSON(data);
		if ($.isArray(gamelog.p)) {
			console.log('123213213'+gamelog.p);
		    for (var i = 0; i < gamelog.p.length; i++) {
		    	var role = gamelog.p[i];
		    	if (!this.data.teamInfo['p'+i]) {
		    	    this.data.teamInfo['p'+i] = this.getNewRole();
		    	}
		    	this.data.teamInfo['p'+i].lv= role.lv;
		    	this.data.teamInfo['p'+i].name= role.n;
		    }
		}

		if (gamelog.exp && $.isArray(gamelog.exp)) {
		    for (var j = 0; j < gamelog.exp.length; j++) {
		    	var expObj = gamelog.exp[j];
	    	    this.data.teamInfo[expObj[0]].exp += expObj[1];
		    }
		}
		if (gamelog.gold && $.isArray(gamelog.gold)) {
		    for (var k = 0; k < gamelog.gold.length; k++) {
		    	var goldObj = gamelog.gold[k];
	    	    this.data.teamInfo[goldObj[0]].gold += goldObj[1];
		    }
		}
		if (gamelog.log) {
			this.data.battleCount ++;
		    for (var l = 0; l < gamelog.log.length; l++) {
		    	var tempLog = gamelog.log[l];
		    	if (tempLog[0].indexOf('p') != -1) {
		    		var pid = tempLog[0];
		    	    var skillName = SDATA['_'+tempLog[1]].n;
		    	    this.data.teamInfo[pid].skillCount +=1;
		    	    if (this.data.teamInfo[pid].skills[skillName]) {
		    	        this.data.teamInfo[pid].skills[skillName] +=1;
		    	    }else{
		    	    	this.data.teamInfo[pid].skills[skillName] = 1;
		    	    }

		    	    if (tempLog[2] && $.isArray(tempLog)) {
		    	        for (var m = 0; m < tempLog[2].length; m++) {
		    	        	var hitLog = tempLog[2][m];
		    	        	if ($.isArray(hitLog) && hitLog[2].length >0) {
		    	        	    this.data.teamInfo[pid].hitCount++;
		    	        	    var hitInfos = hitLog[2].split('|');
		    	        	    if (hitInfos[0] == '1') {
		    	        	        this.data.teamInfo[pid].rightHitCount ++;
		    	        	    }
		    	        	    if (hitInfos[1] == '1') {
		    	        	        this.data.teamInfo[pid].criCount ++;
		    	        	    }
		    	        	}
		    	        }
		    	    }


		    	}
		    }
		}
		if (gamelog.flag == 'win') {
		    this.data.winCount++;
		}
		this.render();
	},
	render:function() {
		$("#battleInfoContainer .tableContainer").html(tmpl(this.template,[this.data]));
	},
	getNewRole: function() {
		return {
			name:'',
			lv:'',
			exp:0,
			gold:0,
			skills:{},
			skillCount: 0,
			hitCount:0,
			rightHitCount:0,
			criCount:0,
		};
	},
	toFix: function(value) {
	    return value.toFixed(2);
	},
	valuePerHour: function(value, startTime) {
	    var factor = 60 * 60 / (new Date() - startTime) * 1000;
	    return (value * factor).toFixed(2);
	},
	template:'{% for(var i=0; i<o.length;i++){ %}'+
			'<table border="1" style="border-collapse:collapse">'+
			'<tr>'+
			'<td>开始时间:</td>'+
			'<td>{%=o[i].startTime.toLocaleString()%}</td>'+
			'</tr>'+
			'<tr>'+
			'<td>持续时间:</td>'+
			'<td>{%=BattleInfo.toFix((new Date() - o[i].startTime)/1000) %} 秒</td>'+
			'</tr>'+
			'<tr>'+
			'<td>胜场|总场|胜率</td>'+
			'<td>{%=o[i].winCount%}|{%=o[i].battleCount%}|{%=BattleInfo.toFix(o[i].winCount/o[i].battleCount*100)%}%</td>'+
			'</tr>'+
			'{% for(var k in o[i].teamInfo) { var role = o[i].teamInfo[k];%}'+
			'<tr>'+
			'<td colspan="2">'+
			'<table border="0" width="100%" style="border-collapse:collapse;">'+
			'<tr>'+
			'<td>角色名:</td>'+
			'<td>{%=role.name%}</td>'+
			'</tr>'+
			'</tr>'+
			'<td>Lv:</td>'+
			'<td>{%=role.lv%}</td>'+
			'</tr>'+
			'<tr>'+
			'<td>获得经验:</td>'+
			'<td>{%=role.exp%}</td>'+
			'</tr>'+
			'</tr>'+
			'<td>经验/小时:</td>'+
			'<td>{%=BattleInfo.valuePerHour(role.exp,o[i].startTime)%}</td>'+
			'</tr>'+
			'<tr>'+
			'<td>获得gold:</td>'+
			'<td>{%=role.gold%}</td>'+
			'</tr>'+
			'</tr>'+
			'<td>gold/小时:</td>'+
			'<td>{%=BattleInfo.valuePerHour(role.gold,o[i].startTime)%}</td>'+
			'</tr>'+
			'<tr>'+
			'<td>命中率:</td>'+
			'<td>{%=BattleInfo.toFix(role.rightHitCount/role.hitCount*100)%}%</td>'+
			'</tr>'+
			'</tr>'+
			'<td>暴击率:</td>'+
			'<td>{%=BattleInfo.toFix(role.criCount/role.hitCount*100)%}%</td>'+
			'</tr>'+
			'<tr>'+
			'<td>技能:</td>'+
			'<td>'+
			'{% var skills = role.skills;%}'+
			'<table width="100%" style="border-collapse:collapse;">'+
			'{% for(var j in skills){ %}'+
			'<tr>'+
			'<td>'+
			'{%=j%}'+
			'</td>'+
			'<td>'+
			'{%=skills[j]%} ({%=BattleInfo.toFix(skills[j]/role.skillCount*100)%}%)'+
			'</td>'+
			'</tr>'+
			'{% } %}'+
			'</table>'+
			'</td>'+
			'</tr>'+
			'</table>'+
			'</td>'+
			'</tr>'+
			'{% }%}'+
			'</table>'+
			'{% } %}',

};

//styles
function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}



addGlobalStyle("\
	#battleInfoContainer{\
		position:absolute;\
		top:0;\
		left:0;\
		z-index:100;\
		padding:10px;\
		background-color:#fff;\
		transform: translate(-100%,0);\
		transition: 300ms;\
	}\
	#battleInfoContainer:hover{\
		transform: translate(0,0);\
	}\
	#battleInfoContainer span{\
		color:#fff;\
		background-color:#049fd9;\
		position: absolute;\
		top: 0px;\
		padding:5px 0px;\
		width:20px;\
		right: -20px;\
		text-align:center;\
		display:inline-block;\
	}\
	.gamewindow{\
		width:1000px;\
	}\
");