NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Journal copier Chara
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author toriayl
// @match http://game.granbluefantasy.jp/*
// @grant GM_setClipboard
// ==/UserScript==
(function() {
'use strict';
function readSelector(aElement, aSelector) {
var el = aElement.querySelector(aSelector);
if (!el) return '';
return el.innerHTML.trim();
}
var keyboardHandler = function(aEvent) {
try {
if (aEvent.altKey || aEvent.ctrlKey || aEvent.shiftKey)
return;
if (aEvent.key == 'j') {
var temp;
var i;
var entry;
aEvent.preventDefault();
// Assuming this is a weapon journal entry for now
var elWrapper = document.getElementsByClassName('cnt-detail-wrapper')[0];
if (!elWrapper) throw new Error('Unable to find wrapper.');
var elImage = elWrapper.querySelector('div.prt-image img.img-element');
if (!elImage) throw new Error('Unable to main image.');
var dataImageUrl = elImage.src;
console.log(dataImageUrl);
var dataVA = readSelector(elWrapper, 'div.txt-acter-name');
console.log(dataVA);
var dataImageNumber = dataImageUrl.match(/\/npc\/[a-z]\/(.+)\_01\./)[1];
console.log(dataImageNumber);
var elTitle = elWrapper.querySelector('div.prt-scroll-brown div.prt-scroll-title');
if (!elTitle) throw new Error('Unable to title div.');
var dataName = readSelector(elTitle, 'span.txt-item-name');
console.log(dataName);
var dataTitle = readSelector(elTitle, 'div.txt-evo-name');
console.log(dataTitle);
var dataRarity = 'N';
for (i = 0; i < elTitle.classList.length; i++) {
switch (elTitle.classList.item(i)) {
case 'prt-rarity-2-large': dataRarity = 'R'; break;
case 'prt-rarity-3-large': dataRarity = 'SR'; break;
case 'prt-rarity-4-large': dataRarity = 'SSR'; break;
}
}
console.log(dataRarity);
var elDetailMain = elWrapper.querySelector('div.prt-scroll-brown div.prt-detail-main');
var dataDescription = readSelector(elWrapper, 'div.prt-scroll-brown div.prt-flavor');
console.log(dataDescription);
var elDetailMainList = elDetailMain.querySelector('div.prt-icon').getElementsByClassName('txt-spec-title');
var dataElement = '';
var dataMaxLvl = '';
var dataStyle = '';
var dataType = '';
for (i = 0; i < elDetailMainList.length; i++) {
entry = elDetailMainList.item(i);
switch (entry.innerHTML) {
case 'Element':
switch (entry.nextElementSibling.className) {
case 'ico-type1': dataElement = 'Fire'; break;
case 'ico-type2': dataElement = 'Water'; break;
case 'ico-type3': dataElement = 'Earth'; break;
case 'ico-type4': dataElement = 'Wind'; break;
case 'ico-type5': dataElement = 'Light'; break;
case 'ico-type6': dataElement = 'Dark'; break;
}
break;
case 'Type':
switch (entry.nextElementSibling.className) {
case 'ico-chara-race1': dataType = 'Human'; break;
case 'ico-chara-race2': dataType = 'Erune'; break;
case 'ico-chara-race3': dataType = 'Draph'; break;
case 'ico-chara-race4': dataType = 'Harvin'; break;
case 'ico-chara-race5': dataType = 'None'; break;
case 'ico-chara-race6': dataType = 'Primal'; break;
}
break;
case 'Lvl':
dataMaxLvl = entry.nextElementSibling.innerHTML.match(/MAX\s([0-9]+)/)[1];
case 'Style':
switch (entry.nextElementSibling.className) {
case 'ico-chara-type1': dataStyle = 'Balanced'; break;
case 'ico-chara-type2': dataStyle = 'Attack'; break;
case 'ico-chara-type3': dataStyle = 'Defense'; break;
case 'ico-chara-type4': dataStyle = 'Heal'; break;
case 'ico-chara-type5': dataStyle = 'Special'; break;
}
break;
}
}
console.log(dataElement);
console.log(dataType);
console.log(dataMaxLvl);
console.log(dataStyle);
var dataLvlWhiteHP = elDetailMain.querySelector('div.prt-hp div.prt-min-hp div.txt-hp-value').attributes.getNamedItem('title').value;
console.log(dataLvlWhiteHP);
var dataLvlYellowHP = elDetailMain.querySelector('div.prt-hp div.prt-max-hp div.txt-hp-value').attributes.getNamedItem('title').value;
console.log(dataLvlYellowHP);
var dataLvlWhiteATK = elDetailMain.querySelector('div.prt-attack div.prt-min-atk div.txt-atk-value').attributes.getNamedItem('title').value;
console.log(dataLvlWhiteATK);
var dataLvlYellowATK = elDetailMain.querySelector('div.prt-attack div.prt-max-atk div.txt-atk-value').attributes.getNamedItem('title').value;
console.log(dataLvlYellowATK);
var elSkillsBox = elWrapper.querySelector('div.prt-scroll-brown div.prt-skills-box');
var elSpecialBox = elSkillsBox.querySelector('div.prt-detail-special div.prt-box');
var elActionBox = elSkillsBox.querySelector('div.prt-detail-action div.prt-box');
var elSupportBox = elSkillsBox.querySelector('div.prt-detail-support div.prt-box');
var dataSpecialName = readSelector(elSkillsBox, 'div.name-m');
console.log(dataSpecialName);
var dataSpecialDescription = readSelector(elSkillsBox, 'div.comment-m');
console.log(dataSpecialDescription);
var dataSpecialIcon = elSpecialBox.firstElementChild.className.match(/ico\-([a-z0-9_\-]+)/)[1];
console.log(dataSpecialIcon);
var elSkillsBoxList = elSkillsBox.querySelector('div.prt-detail-action').getElementsByClassName('prt-box');
var dataSkills = '';
for (i = 0; i < elSkillsBoxList.length; i++) {
entry = elSkillsBoxList.item(i);
var dataSkillName = readSelector(entry, 'div.name-m');
console.log(dataSkillName);
var dataSkillDescription = readSelector(entry, 'div.comment-m');
console.log(dataSkillDescription);
var dataSkillIcon = entry.firstElementChild.className.match(/ico\-([a-z0-9_\-]+)/)[1];
console.log(dataSkillIcon);
var cd = entry.querySelector('div.txt-recast');
var cdt = cd.innerHTML.match(/Cooldown\: ([a-z0-9_\-]+)/)[1];
var dur = entry.querySelector('div.txt-duration');
var dataSkillDuration='';
if (dur) {var dataSkillDuration=dur.firstElementChild.innerHTML;}
console.log(dataSkillDuration);
dataSkills += dataSkillName + "\t" + dataSkillDescription + "\t" + dataSkillIcon + "\t" + cdt + "\t" + dataSkillDuration + "\t" ;
}
var elSupportBoxList = elSkillsBox.querySelector('div.prt-detail-support').getElementsByClassName('prt-box');
var dataSupport = '';
for (i = 0; i < elSupportBoxList.length; i++) {
entry = elSupportBoxList.item(i);
var dataSupportName = readSelector(entry, 'div.name-m');
console.log(dataSupportName);
var dataSupportDescription = readSelector(entry, 'div.comment-m');
console.log(dataSupportDescription);
var dataSupportIcon = entry.firstElementChild.className.match(/ico\-([a-z0-9_\-]+)/)[1];
console.log(dataSupportIcon);
dataSupport += dataSupportName + "\t" + dataSupportDescription + "\t" + dataSupportIcon + "\t";
}
GM_setClipboard(
dataName + "\t" +
dataTitle + "\t" +
dataType + "\t" +
dataRarity + "\t" +
dataVA + "\t" +
dataImageUrl + "\t" +
dataImageNumber + "\t" +
dataDescription + "\t" +
dataElement + "\t" +
dataMaxLvl + "\t" +
dataStyle + "\t" +
dataLvlWhiteHP + "\t" +
dataLvlYellowHP + "\t" +
dataLvlWhiteATK + "\t" +
dataLvlYellowATK + "\t" +
dataSpecialName + "\t" +
dataSpecialIcon + "\t" +
dataSpecialDescription + "\t" +
dataSkills +
dataSupport
);
}
} catch (e) {
alert(e.message);
}
};
window.addEventListener('keydown', keyboardHandler, false);
})();