sg farmkit

SG伐木助手

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        sg farmkit
// @namespace   com.sgamer.bbs.farmkit
// @description SG伐木助手
// @include     http://bbs.sgamer.com/forum-*.html
// @include     http://bbs.sgamer.com/thread-*.html
// @include     http://bbs.sgamer.com/*mod=viewthread*
// @include     http://bbs.sgamer.com/*mod=forumdisplay*
// @version     3.3.7
// @grant       none
// ==/UserScript==

var devmode = false;
if (devmode) {
	var timestamp = new Date();
}

// iframe不会触发
if (window == window.top) {

var pcrr = {
	"枪": "枪",
	"弹": "弹",
	"性": "性",
	"毒": "毒",
	"裸": "裸",
	"仇": "仇",
	"奸": "奸",
	"淫": "淫",
	"毛": "毛",
	"邓": "邓",
	"江": "江",
	"胡": "胡",
	"习": "习",
	"泡面": "泡面",
	"鸡巴": "鸡巴",
	"进口": "进口",
	"轮子": "轮子",
	"电棍": "电棍"
}

var rrr = {
	"(不共戴天之|复|报)\\*": "$1仇",
	"(显示器)\\*\\*": "$1杀手",
	"\\*(幕)": "弹$1",
	"(躺|火)\\*": "$1枪",
	"(核|炸)\\*": "$1弹",
	"(剧|为什么这么)\\*": "$1毒",
	"(意)\\*": "$1淫",
	"(汉)\\*": "$1奸",
	"(练)\\*": "$1习",
	"\\*(情|格|感|别|取向|质)": "性$1",
	"\\*(龙|镖|瘤|奶|狗|素)": "毒$1",
	"\\*(恨)": "仇$1",
	"\\*(照)": "裸$1",
	"\\*(妇|荡)": "淫$1",
	"\\*(臣)": "奸$1",
	"\\*(苏|湖|西)": "江$1",
	"(瞎)\\*\\*": "$1鸡巴",
	"\\*(惯)": "习$1",
	"\\*\\*(妈)": "轮子$1",
	"(任|可能|世界|历史|人|个|男|女|属|理|局限|专业|进攻|本|选择|关键|重要|习惯|灵|观赏|记|惰|理|品|惯|秉|魔)\\*": "$1性",
	"电\\*\\*棍": "电棍",
	"信\\*\\*仰": "信仰",
	"命\\*\\*运": "命运"
}

var fastFormNames = ["fastpostform", "vfastpostform"];

function createCommentButtonByReplyButton(fastre) {
	var a = document.createElement("a");
	a.className = "cmmnt";
	var tid = fastre.href.match(/tid=[0-9]+/);
	var pid = fastre.href.match(/repquote=[0-9]+/)[0].replace("repquote","pid");
	a.setAttribute("onclick", 
		"showWindow('comment', this.href, 'get', 1);\n" +
		"setTimeout(function () {\n" +
			"var commentform = document.getElementById(\"commentform\");\n" +
			"var action = commentform.action;\n" +
			"action = action.replace(/tid=[0-9]+/, \"" + tid + "\");\n" +
			"action = action.replace(/pid=[0-9]+/, \"" + pid + "\");\n" +
			"commentform.action = action;\n" +
		"}, 500);"
	);
	a.href = "forum.php?mod=misc&action=comment&tid=12360082&pid=30553315&extra=page%3D1&page=1";
	a.appendChild(document.createTextNode("点评"));
	return a;
}

function createImageString(uri) {
	return "[img]" + uri + "[/img]";
}

// 回复主题
function fastfarm(replyStr) {
	if (getCookie("SG_farmkit_ifPostTimeLimit")) {
		onNeedMoreTime();
		return;
	}
	document.getElementById("fastpostmessage").value = precensore(recoverText(replyStr));
	setTimeLimit();
	document.getElementById("fastpostform").submit();
}

function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) { 
			c_start = c_start + c_name.length + 1 ;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) {
				c_end = document.cookie.length;
			}
			return unescape(document.cookie.substring(c_start, c_end));
		} 
	}
	return "";
}

function isParent(obj, parentObj){
	while (obj != undefined && obj != null && obj.tagName.toUpperCase() != 'BODY') {
		if (obj == parentObj){
			return true;
		}
		obj = obj.parentNode;
	}
	return false;
}

function onNeedMoreTime() {
	if (document.getElementById('ntcwin')) {
		var ntcwin = document.getElementById('ntcwin');
	} else {
		var ntcwin = document.createElement('div');
		ntcwin.id = "ntcwin";
		ntcwin.className = "popuptext";
		ntcwin.style.cssText = "position: fixed; z-index: 501; left: 466.5px; top: 30px; display: none;";
		document.getElementById("append_parent").appendChild(ntcwin);
		var table = document.createElement("table");
		table.className = "popupcredit";
		table.cellspacing = "0";
		table.cellpadding = "0";
		ntcwin.appendChild(table);
		var tr = document.createElement("tr");
		table.appendChild(tr);
		var tdl = document.createElement("td");
		tdl.className = "pc_l";
		tr.appendChild(tdl);
		var tdc = document.createElement("td");
		tdc.className = "pc_c";
		tr.appendChild(tdc);
		var tdr = document.createElement("td");
		tdr.className = "pc_r";
		tr.appendChild(tdr);
		var div_inner = document.createElement("div");
		div_inner.className = "pc_inner";
		tdc.appendChild(div_inner);
		var i_text = document.createElement("i");
		i_text.innerHTML = "抱歉,您两次发表间隔少于 15 秒,请稍候再发表";
		div_inner.appendChild(i_text);
	}
	document.getElementById('ntcwin').style.display = "block";
	setTimeout(function () {
		document.getElementById('ntcwin').style.display = "none";
	}, 2500);
}

function precensore (str) {
	if (str) {
		for (var ch in pcrr) {
			str = str.replace(new RegExp(ch, "ig"), pcrr[ch]);
		}
	}
	if (str.length < 10) {
		str = str + "          ";
	}
	return str;
}

function precensoreFastForm(formName) {
	var form = document.getElementById(formName);
	if (form) {
		form.onsubmit = function (e) {
			this.message.value = parseurl(precensore(this.message.value));
			setTimeLimit();
			ajaxpost(formName, 'return_reply', 'return_reply', 'onerror');
			return false;
		}
	}
}

function recoverText (str) {
	if (str) {
		for (var ch in rrr) {
			str = str.replace(new RegExp(ch, "ig"), rrr[ch]);
		}
	}
	return str;
}

function replaceFace(e) {
	var nodes = e.childNodes;
	for (var i = 0; i < nodes.length; i++) {
		if (nodes[i].nodeName && nodes[i].nodeName.toLowerCase() == "img") {
			var smilieid = nodes[i].getAttribute("smilieid");
			if (smilieid >= 85 && smilieid <= 137) {
				e.replaceChild(document.createTextNode("{:" + smilieid + ":}"), nodes[i]);
			} else if (smilieid >= 343 && smilieid <= 419) {
				e.replaceChild(document.createTextNode("{:6_" + smilieid + ":}"), nodes[i]);
			} else if (smilieid == 169 || smilieid == 177 || smilieid == 170 || smilieid == 178) {
				e.replaceChild(document.createTextNode("{:3_" + smilieid + ":}"), nodes[i]);
			} else if (smilieid >= 171 && smilieid <= 176 || smilieid >= 179 && smilieid <= 181) {
				e.replaceChild(document.createTextNode("{:7_" + smilieid + ":}"), nodes[i]);
			} else if (smilieid >= 168 && smilieid <= 276) {
				e.replaceChild(document.createTextNode("{:5_" + smilieid + ":}"), nodes[i]);
			} else {
				e.replaceChild(document.createTextNode("[img=" + nodes[i].width + "," + nodes[i].height + "]" + nodes[i].src + "[/img]"), nodes[i]);
			}
		}
	}
}

function setCookie (c_name, value, expiresecs) {
	var exdate = new Date();
	exdate.setSeconds(exdate.getSeconds() + expiresecs);
	document.cookie = c_name + "=" + escape(value) + ((expiresecs == null) ? "" : ";expires=" + exdate.toGMTString());
}

function setTimeLimit() {
	setCookie("SG_farmkit_ifPostTimeLimit", "1", 16);
}

if (new String(window.location).match("http://bbs.sgamer.com/forum-") || new String(window.location).match("mod=forumdisplay")) {
// 主题列表也处理开始

window.previewFastFarm = function (tid, message) {
	var form = document.getElementById("vfastpostform_" + tid);
	var input = document.getElementById("vmessage_" + tid);
	if (getCookie("SG_farmkit_ifPostTimeLimit")) {
		onNeedMoreTime();
		return;
	}
	input.value = precensore(recoverText(message));
	setTimeLimit();
	form.getElementsByTagName("button")[0].click();
}

window.previewThread = function(tid, tbody) {
	if(!$('threadPreviewTR_'+tid)) {
		appendscript(JSPATH + 'forum_viewthread.js?' + VERHASH);

		newTr = document.createElement('tr');
		newTr.id = 'threadPreviewTR_'+tid;
		newTr.className = 'threadpre';
		$(tbody).appendChild(newTr);
		newTd = document.createElement('td');
		newTd.colSpan = listcolspan;
		newTd.className = 'threadpretd';
		newTr.appendChild(newTd);
		newTr.style.display = 'none';

		previewTbody = tbody;
		previewTid = tid;

		newTd.innerHTML += '<div id="threadPreview_'+tid+'"></div>';
		ajaxget('forum.php?mod=viewthread&tid='+tid+'&from=preview', 'threadPreview_'+tid, null, null, null, function() {
			newTr.style.display = '';
			var dls = document.getElementById("threadPreview_" + tid).getElementsByTagName("dl");
			for (var i = 0; i < dls.length; i++) {
				var msg = null;
				var tds = dls[i].getElementsByTagName("td");
				for (var j = 0; j < tds.length; j++) {
					if (new String(tds[j].id).match("postmessage_")) {
						msg = tds[j].textContent;
					}
				}
				if (msg) {
					var spans = dls[i].getElementsByTagName("span");
					for (var k = 0; k < spans.length; k++) {
						if (spans[k].className == "y xw0") {
							var a = document.createElement("a");
							a.innerHTML = "复制伐木";
							a.style.cursor = "pointer";
							a.tid = tid;
							a.message = msg;
							a.onclick = function () {
								previewFastFarm(this.tid, this.message);
							}
							spans[k].insertBefore(a, spans[k].childNodes[0]);
						}
					}
				}
			}
		});
	} else {
		$(tbody).removeChild($('threadPreviewTR_'+tid));
		previewTbody = previewTid = null;
	}
}

// 主题列表页处理结束
} else if ((new String(window.location).match("http://bbs.sgamer.com/thread-") || new String(window.location).match("mod=viewthread"))) {
// 回帖页处理开始


// 回复栏和快速回复栏
(function () { 
	for (var i = 0; i < fastFormNames.length; i++) {
		precensoreFastForm(fastFormNames[i]);
	}
})();

// 侧边栏弹出回复栏
(function () { 
	document.getElementById("scrolltop").getElementsByTagName("a")[0].onclick = function () {
		showWindow('reply', this.href);
		setTimeout(function () {
			precensoreFastForm("postform");
		}, 500);
		return false;
	}
})();

// 页面标题
(function () {
	var tt = document.title;
	document.title = recoverText(tt);
})();

// 主题标题
(function () {
	var ih = document.getElementById("thread_subject").innerHTML;
	document.getElementById("thread_subject").innerHTML = recoverText(ih);
})();

// 帖子顶栏、内容和底部
(function () {
	var postlist = document.getElementById("postlist");
	if (postlist == null) {
		return;
	}
	var postNodes = postlist.childNodes;
	for (var i = 0, isReply = 0; i < postNodes.length; i++) {
		var postNode = postNodes[i];

		if (postNode && 
			postNode.getAttribute && 
			postNode.getAttribute("id") && 
			postNode.getAttribute("id").match("post_")) {
			var tds = postNode.getElementsByTagName("td");
			for (var k = 0; k < tds.length; k++) {
				// 内容
				if (tds[k].id && tds[k].id.match("postmessage_")) {
					tds[k].innerHTML = recoverText(tds[k].innerHTML);
				}
			}
			var fastre = null;
			var as = postNode.getElementsByTagName("a");
			var asLength = as.length;
			for (var k = 0; k < asLength; k++) {
				if (as[k].className == "fastre") {
					fastre = as[k];
					// 底部,撅腚领域功能,使用会被封
					//var firstNode = fastre.parentNode.getElementsByTagName("a")[0];
					//if (firstNode.className != "cmmnt" && fastre.href.match(/repquote=[0-9]+/))
					//{
					//	fastre.parentNode.insertBefore(createCommentButtonByReplyButton(fastre), fastre);
					//}
				}
			}
			// 顶部
			// 复制伐木
			if (isReply == 1) {
				var divs = postNode.getElementsByTagName("div");
				for (var j = 0; j < divs.length; j++) {
					if (divs[j].className == "authi" && divs[j].parentNode.className == "pti") {
						var span = document.createElement("span");
						span.className = "pipe";
						span.innerHTML = "|";
						span.style.cssFloat = "right";
						span.style.lineHeight = "16px";
						span.style.margin = "0px 2px";
						divs[j].appendChild(span);
						divs[j].appendChild(document.createTextNode("\n"));
						var farmArchor = document.createElement("a");
						farmArchor.innerHTML = "复制伐木";
						farmArchor.style.color = "green";
						farmArchor.style.cursor = "pointer";
						farmArchor.style.cssFloat = "right";
						farmArchor.style.lineHeight = "16px";
						farmArchor.style.padding = "0px 6px";
						divs[j].appendChild(farmArchor);
						farmArchor.divPElement = divs[j];
						farmArchor.onclick = function () {
							if (getCookie("SG_farmkit_ifPostTimeLimit")) {
								onNeedMoreTime();
								return false;
							}
							var postText = "伐木伐木";
							var tds = this.divPElement.parentNode.parentNode.parentNode.getElementsByTagName("td");
							for (var k = 0; k < tds.length; k++) {
								if (tds[k].getAttribute("id").match("postmessage_")) {
									replaceFace(tds[k]);
									postText = (tds[k].innerText || tds[k].textContent || tds[k].text || "").replace(/^\s*/g, "");
									if (postText[0] == "\n") {
										postText = postText.slice(1);
									}
									break;
								}
							}
							fastfarm(postText);
							return false;
						}
					}
				}
			} else {
				var divs = postNode.getElementsByTagName("div");
				for (var j = 0; j < divs.length; j++) {
					if (divs[j].className == "authi" && divs[j].parentNode.className == "pti") {
						var span = document.createElement("span");
						span.className = "pipe";
						span.innerHTML = "|";
						span.style.cssFloat = "right";
						span.style.lineHeight = "16px";
						span.style.margin = "0px 2px";
						divs[j].appendChild(span);
						divs[j].appendChild(document.createTextNode("\n"));
						var farmArchor = document.createElement("a");
						farmArchor.innerHTML = "复制伐木";
						farmArchor.style.cssText = "color: green; cursor: pointer; float: right; line-height: 16px; padding: 0px 6px; -moz-user-select:none; -webkit-user-select:none; user-select:none;";
						divs[j].appendChild(farmArchor);
						divs[j].parentNode.parentNode.style.cssText = "overflow-x: visible; overflow-y: visible;";
						farmArchor.divPElement = divs[j];
						farmArchor.onclick = function () {
							if (getCookie("SG_farmkit_ifPostTimeLimit")) {
								onNeedMoreTime();
								return false;
							}
							var postText = "伐木伐木";
							var tds = this.divPElement.parentNode.parentNode.parentNode.getElementsByTagName("td");
							var selection = window.getSelection();
							var selectionText;
							if (selection != null && !selection.isCollapsed) {
								var focusNode = selection.focusNode;
								var focusOffset = selection.focusOffset;
								var anchorNode = selection.anchorNode;
								var anchorOffset = selection.anchorOffset
								replaceFace(selection.anchorNode.parentNode);
								selection.collapse(anchorNode, anchorOffset);
								selection.extend(focusNode, focusOffset);
								selectionText = selection.toString();
							}
							if (selectionText != null && selectionText.length > 0) {
								postText = selectionText;
								fastfarm(postText);
								return false;
							}
							for (var k = 0; k < tds.length; k++) {
								if (tds[k].getAttribute("id").match("postmessage_")) {
									replaceFace(tds[k]);
									postText = (tds[k].innerText || tds[k].textContent || tds[k].text || "")
										.replace(/(^\s*)|(\s*$)/g, "").split("\n").pop();
									if (postText[0] == "\n") {
										postText = postText.slice(1);
									}
									break;
								}
							}
							fastfarm(postText);
							return false;
						}
					}
				}
				isReply = 1;
			}
		}
	}
})();

//签名复制
(function () {
	var signs = document.getElementsByClassName("sign");
	for (var i = 0; i < signs.length; i++)
	{
		var signImages = signs[i].getElementsByTagName("img");
		var signText = (signs[i].innerText || signs[i].textContent || signs[i].text || "").replace(/^\s*/g, "");
		if (signImages.length > 0)
		{
			var imageCopy = document.createElement("a");
			imageCopy.innerHTML = "复制签名图片";
			imageCopy.style.color = "green";
			imageCopy.style.cursor = "pointer";
			imageCopy.style.cssFloat = "right";
			imageCopy.style.lineHeight = "16px";
			imageCopy.style.padding = "0px 6px";
			imageCopy.signImages = signImages;
			signs[i].appendChild(imageCopy);
			imageCopy.onclick = function () {
				if (getCookie("SG_farmkit_ifPostTimeLimit")) {
					onNeedMoreTime();
					return false;
				}
				var imgStr = "";
				for (var j = 0; j < this.signImages.length; j++)
				{
					imgStr = imgStr + "[img=" + this.signImages[j].width + "," + this.signImages[j].height + "]" + this.signImages[j].src + "[/img]";
				}
				fastfarm(imgStr);
			}
		}
		if (signText)
		{
			var textCopy = document.createElement("a");
			textCopy.innerHTML = "复制签名文字";
			textCopy.style.color = "green";
			textCopy.style.cursor = "pointer";
			textCopy.style.cssFloat = "right";
			textCopy.style.lineHeight = "16px";
			textCopy.style.padding = "0px 6px";
			textCopy.signText = signText;
			signs[i].appendChild(textCopy);
			textCopy.onclick = function () {
				if (getCookie("SG_farmkit_ifPostTimeLimit")) {
					onNeedMoreTime();
					return false;
				}
				fastfarm(this.signText);
			}
		}
	}
})();

// 回帖页处理结束
}

// iframe不会触发
}


if (devmode) {
	alert("耗时:" + (new Date().getTime() - timestamp.getTime()) + "毫秒");
}