// ==UserScript==
// @name 動畫瘋·Plus
// @namespace none
// @version 1.12.19
// @description 分級標識自動同意、跳過廣告、分級鎖定、影片空降座標、網頁全螢幕
// @author xu3u04u48
// @match *://ani.gamer.com.tw/animeVideo.php?sn=*
// @grant none
// @icon https://i2.bahamut.com.tw/anime/baha_s.png
// @require https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @downloadURL none
// ==/UserScript==
//實體化使用者介面
$('.sub_top').append('
動畫瘋·Plus?此插件設計是為了給短時間大量補番的人使用的,並加入一些沒用的功能
如果您覺得此插件好用,請付費支持動畫瘋讓此插件能持續為本平台服務
跳過動畫瘋廣告
?說明:
此功能是載入網頁時把廣告給提早跳過,並無將廣告功能移除
如果此功能失效,動畫瘋·Plus往後無跳過廣告功能
影片速度
分級鎖定
?說明:
此功能是防止家中小屁孩設計的
設定的密碼將儲存在目前的瀏覽器儲存區並加密
如果換其它牌瀏覽器要重新設定
空降足跡(點擊降落)
?說明:
運作原理是取所有彈幕文字並利用關鍵字篩選
想要留下空降足跡請發表彈幕時打上影片時間
如果發表彈幕內沒空降or座標關鍵字將歸類為其它座標
確認座標
其它座標
`);
//分級鎖定介面HTML
$('.video').append(`
`);
//分級鎖定介面CSS
$('head').append(`
`);
//網頁全螢幕
var Switch = true;
window.qtimer = setInterval(function(){
if($(".R18").length == 0 && $(".plus-frame").length == 0){
$(".vjs-fullscreen-control").after('
');
clearInterval(window.qtimer);
}
$("#Web_fullscreen").click(function(){
if(Switch){
Switch = false;
var win_height = $(window).height();
var win_width = $(window).width();
$("body").after('
');
$("#animeTip").css("bottom","-40px");
$("html").css("overflow-y","hidden");
$("html").css("overflow-x","hidden");
$(".vjs-indent-button").css("display","none");
$(".plus_Web_fullscreen_icon").css("color","#fff");
$(".plus_Web_fullscreen_icon").css("background","#333");
}else{
Switch = true;
$("#Web_fullscreen_style").remove();
$("#animeTip").css("bottom","0px");
$("html").css("overflow-y","unset");
$("html").css("overflow-x","unset");
$(".videoframe").css("height","");
$(".videoframe").css("width","");
$(".videoframe").css("margin","");
$(".vjs-indent-button").css("display","unset");
$(".plus_Web_fullscreen_icon").css("color","");
$(".plus_Web_fullscreen_icon").css("background","");
$(".vjs-danmu").css("perspective","");
}
$(document).keydown(function(e) {
if(e.keyCode == 27 && !Switch){
Switch = true;
$("#Web_fullscreen_style").remove();
$("#animeTip").css("bottom","0px");
$("html").css("overflow-y","unset");
$("html").css("overflow-x","unset");
$(".videoframe").css("height","");
$(".videoframe").css("width","");
$(".videoframe").css("margin","");
$(".vjs-indent-button").css("display","unset");
$(".plus_Web_fullscreen_icon").css("color","");
$(".plus_Web_fullscreen_icon").css("background","");
$(".vjs-danmu").css("perspective","");
}
});
$(window).resize(function() {
if(!Switch){
var win_height = $(window).height();
$(".videoframe").css("height",(win_height-40)+"px");
}
});
//網頁全螢幕CSS
$('#Web_fullscreen_style').append(`
`);
});
},2000);
var ncc_warning_save = localStorage.getItem("ncc_warning");
var ad_skip_save = localStorage.getItem('ad_skip');
var password_save = localStorage.getItem('password_save');
var grading_save = localStorage.getItem('grading_save');
if(ncc_warning_save == null){ncc_warning_save = localStorage.setItem('ncc_warning','false');}
if(ad_skip_save == null){ad_skip_save = localStorage.setItem('ad_skip','false');}
if(grading_save == null){grading_save = localStorage.setItem('grading_save','none');}
var ad_bool = false;
$("#advertising").change(function() {
localStorage.setItem('ad_skip',!ad_bool);
ad_bool = !ad_bool;
});
if(ad_skip_save == 'true'){
alert("付費支持巴哈姆特動畫瘋");
ad_bool = true;
$("#advertising").prop("checked",true);
var sn = animefun.videoSn;
var ad = getAd()[0];
$.ajax({
url: 'ajax/videoCastcishu.php',
data: { sn: sn, s: ad},
type: "GET"
});
$.ajax({
url: 'ajax/videoCastcishu.php',
data: { sn: sn, s: ad, ad: 'end' },
type: "GET"
});
}
var grading_bool = false;
$("#grading").change(function() {
localStorage.setItem('ncc_warning',!grading_bool);
grading_bool = !grading_bool;
});
if(ncc_warning_save == 'true'){
grading_bool = true;
$("#grading").prop("checked",true);
//$('head').append('');
window.timer = setInterval(function(){
if($(".ncc-choose-btn").length > 0 && $(".plus-frame").length == 0){
$("#adult").click();
clearInterval(window.timer);
}
},1000);
}
$("#void_speed").change(function(){
var void_speed = $("#void_speed").find(":selected").val();
$("#ani_video_html5_api").get(0).playbackRate = void_speed;
});
window.uutimer = setInterval(function(){
var src = $("#ani_video_html5_api").attr("src");
var readyState = $("#ani_video_html5_api").get(0).readyState;
if($(".R18").length == 0 && $(".vast-skip-button").length == 0 && src.indexOf("fbcdn.net") == -1 && readyState != 0){
$("#plus-video-fastforward-minute").attr("disabled",false);
$("#plus-video-fastforward-second").attr("disabled",false);
$("#plus-video-fastforward-sendout").attr("disabled",false);
$("#void_speed").attr("disabled",false);
$(".plus_keyword-label").css("cursor","pointer");
clearInterval(window.uutimer);
}else{
$(".plus_keyword-label").css("cursor","no-drop");
}
},1000);
function fastforward(minute,second){
var video_fastforward_minute = parseInt(minute) || 0;
var video_fastforward_second = parseInt(second) || 0;
if((video_fastforward_minute*60) + video_fastforward_second < $("#ani_video_html5_api").get(0).duration){
$("#ani_video_html5_api").get(0).currentTime = (video_fastforward_minute*60) + video_fastforward_second;
}else{
alert("未知的座標,空降失敗");
}
$("#plus-video-fastforward-minute").val("");
$("#plus-video-fastforward-second").val("");
}
$('#plus-video-fastforward-sendout').on('click', function() {
var minute = $("#plus-video-fastforward-minute").val();
var second = $("#plus-video-fastforward-second").val();
fastforward(minute,second)
});
function Asc(obj){
var text = obj;
var asciiTable = "!\"#$%&\’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
var big5Table = "%uFF01%u201D%uFF03%uFF04%uFF05%uFF06%u2019%uFF08%uFF09%uFF0A%uFF0B%uFF0C%uFF0D%uFF0E%uFF0F%uFF10%uFF11%uFF12%uFF13%uFF14%uFF15%uFF16%uFF17%uFF18%uFF19%uFF1A%uFF1B%uFF1C%uFF1D%uFF1E%uFF1F%uFF20%uFF21%uFF22%uFF23%uFF24%uFF25%uFF26%uFF27%uFF28%uFF29%uFF2A%uFF2B%uFF2C%uFF2D%uFF2E%uFF2F%uFF30%uFF31%uFF32%uFF33%uFF34%uFF35%uFF36%uFF37%uFF38%uFF39%uFF3A%uFF3B%uFF3C%uFF3D%uFF3E%uFF3F%u2018%uFF41%uFF42%uFF43%uFF44%uFF45%uFF46%uFF47%uFF48%uFF49%uFF4A%uFF4B%uFF4C%uFF4D%uFF4E%uFF4F%uFF50%uFF51%uFF52%uFF53%uFF54%uFF55%uFF56%uFF57%uFF58%uFF59%uFF5A%uFF5B%uFF5C%uFF5D%uFF5E";
var result = "";
for (var i = 0; i < text.length; i++) {
var val = escape(text.charAt(i));
var j = big5Table.indexOf(val);
result += (((j > -1) && (val.length == 6)) ? asciiTable.charAt(j / 6) : text.charAt(i));
}
return result;
}
function fastforward_skip(match,key){
$("#fastforward_id_"+key).click(function(){
var src = $("#ani_video_html5_api").attr("src");
var readyState = $("#ani_video_html5_api").get(0).readyState;
if($(".R18").length == 0 && $(".vast-skip-button").length == 0 && src.indexOf("fbcdn.net") == -1 && readyState != 0){
var split = match.split(":");
fastforward(split[0],split[1]);
}
});
}
//json清除重複
function filter(arr,attr){
var tmp = {},re = [],i=0,len = arr.length;
for(;i
=0 && json[i][key]>val){
json[i+1] = json[i];
i = i-1;
}
json[i+1] = temp;
}
return json;
}
//影片時間解析
function ff(stringasc,array,bool){
var match = stringasc.match(/[0-9]+:[0-9]+/g);
for(var id in match){
var split = match[id].split(":");
var match1 = split[0].match(/[0-9]{2,3}/g),match2 = split[1].match(/[0-9]{2,3}/g);
var minute = (!match1)? "0"+split[0]:split[0], second = (!match2)? "0"+split[1]:split[1];
var addjson = {"airborne":bool,"time":minute+":"+second};
array.push(addjson);
}
}
//空降足跡
function danmuGet(){
var settings = {"async": true,"crossDomain": true,"url": "https://ani.gamer.com.tw/ajax/danmuGet.php","method": "POST","data": {"sn": animefun.videoSn},dataType: "json"}
$.ajax(settings).done(function (response) {
var array= [];
for(var key in response){
console.log(response[key].text);
var stringasc = Asc(response[key].text);
var a = stringasc.match(/^[^\/\-\.\s]*[0-9]{1,3}:[0-9]{1,3}/g);
console.log(a);
if( stringasc.indexOf("空降") != "-1" || stringasc.indexOf("座標") != "-1"){
ff(stringasc,array,true);
}else if(a){
ff(stringasc,array,false);
}
}
var deduped = filter(array,'time') //清除重複
var json = JsonSort(deduped,'time') //排序
if(json.length){
for(var arrayid in json){
if(json[arrayid].airborne){
$(".plus_time_body").append(''+json[arrayid].time+'')
}else{
$(".plus_time_body").append(''+json[arrayid].time+'')
}
fastforward_skip(json[arrayid].time,arrayid);
}
}else{
$(".plus_time_body").html('
目前沒有人嘗試空降
發個彈幕報告空降座標吧!
')
}
});
}
danmuGet();
//空降足跡重整
$(".plus_refresh").click(function(){
$(".plus_keyword-label").remove();
danmuGet();
});
//分級鎖定功能
if(password_save != null ){
$("#plus-value").remove();
$("#plus-value2").css("display",'');
}
if(grading_save == null){
$(".plus-frame").remove();
}
var grading_selected = $('#grading-password').val(grading_save);
if($('#grading-password').val() != "none"){
var rating_img = $(".rating > img").attr("src");
var img_cut = rating_img.substr(30);
var a = ['TW-ALL.gif','TW-6TO12.gif','TW-12TO18.gif','TW-18UP.gif']
switch (grading_save) {
case '6' : if(img_cut == a[0])$(".plus-frame").remove();break;
case '12' : if(img_cut == a[0]|| img_cut == a[1])$(".plus-frame").remove();break;
case '15' : if(img_cut == a[0] || img_cut == a[1] || img_cut == a[2])$(".plus-frame").remove();break;
case '18' : if(img_cut != a[3])$(".plus-frame").remove();break;
}
}else{
$(".plus-frame").remove();
}
var grading = $("#grading-password").find(":selected").val();
$("#grading-password").change(function(){
grading = $("#grading-password").find(":selected").val();
localStorage.setItem('grading_save',grading);
});
//首次設定密碼
$('#plus-password-setup').on('click', function() {
var first_time_password = $("#plus-password").val();
var password_save = localStorage.getItem('password_save');
if(first_time_password != "" ){
$("#plus-value").remove();
$("#plus-value2").css("display",'unset');
localStorage.setItem('password_save',btoa(first_time_password));
}else{
alert("請輸入密碼");
}
});
//輸入密碼設定
$('#plus-password-enter-setup').on('click', function() {
var enter_password_setting = $("#plus-password2").val();
if(!enter_password_setting){
alert("請輸入密碼");
}else {
var password_save = localStorage.getItem('password_save');
if(password_save == btoa(enter_password_setting)){
$("#plus-value2").remove();
$("#ncc-password").css("display",'unset');
}else{
alert("密碼錯誤");
}
}
});
//輸入密碼解除
$('#plus-password-enter').on('click', function() {
var enter_the_password = $("#plus-password3").val();
var password_save = localStorage.getItem('password_save');
if(!enter_the_password){
alert("請輸入密碼");
}else if(password_save == btoa(enter_the_password)){
$(".plus-frame").remove();
}else{
alert("密碼錯誤");
}
});
//添加分級圖片
var rating_img1 = $(".rating > img").attr("src");
$('.plus-box').prepend('
');