<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel rdf:about="https://let.hatelabo.jp/shunshun9460/rss">
    <link>https://let.hatelabo.jp/shunshun9460/rss</link>
    <description></description>
    <title>Bookmarklets from shunshun9460</title>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://let.hatelabo.jp/shunshun9460/let/g5G3h-rv0NZL"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://let.hatelabo.jp/shunshun9460/let/g5G3h-rv0NZL">
    <link>https://let.hatelabo.jp/shunshun9460/let/g5G3h-rv0NZL</link>
    <dc:date>2019-07-29T17:16:36Z</dc:date>
    <description>ゆとシート2 for SW2.5 にキャラクター保管所のキャラシをコンバートするツール。キャラクター保管所のキャラシ URL をコピーしたうえでゆとシート2 for SW2.5 を開いた状態で実行してみよう</description>
    <dc:creator>shunshun9460</dc:creator>
    <title>[Let] VampireBloodToYtSheet</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fshunshun9460%2Flet%2Fg5G3h-rv0NZL.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;VampireBloodToYtSheet&lt;/a&gt;&lt;pre&gt;/*
 * @title VampireBloodToYtSheet
 * @description ゆとシート2 for SW2.5 にキャラクター保管所のキャラシをコンバートするツール。キャラクター保管所のキャラシ URL をコピーしたうえでゆとシート2 for SW2.5 を開いた状態で実行してみよう
 * @license MIT License
 */

var v2y=(raw)=&amp;gt;{
  insertHistory(raw);
  insertSimpleInfo(raw);
  insertItemsData(raw);
  insertWeapons(raw);
  insertHonor(raw);
  insertBattleSkill(raw);
  insertSubBattleSkills(raw);
};
var insertSubBattleSkills=(raw)=&amp;gt;{
  const insertSubBattleSkillsBySkill = (nameBase, skillList)=&amp;gt;{
    skillList.forEach((name, i)=&amp;gt;{
      selectByText(`${nameBase}${i+1}`, name);
    });
  };

  insertSubBattleSkillsBySkill('craftEnhance', raw.ES_name);
  insertSubBattleSkillsBySkill('craftSong', raw.JK_name);
  insertSubBattleSkillsBySkill('craftRiding', raw.KG_name);
  insertSubBattleSkillsBySkill('craftAlchemy', raw.HJ_name);

  insertSubBattleSkillsBySkill('craftCommand', raw.HO_name);
  insertSubBattleSkillsBySkill('craftDivination', raw.UR_name);
  insertSubBattleSkillsBySkill('craftPotential', raw.MS_name);
  insertSubBattleSkillsBySkill('craftDignity', raw.KK_name);
  insertSubBattleSkillsBySkill('magicGramarye', raw.skill_name);
  insertSubBattleSkillsBySkill('craftSeal', raw.JI_name);
};
var insertBattleSkill=(raw)=&amp;gt;{
  const nums = {
    '1': 'Ⅰ', '2':'Ⅱ', '3':'Ⅲ', '4':'Ⅳ', '5':'Ⅴ'
  };
  raw.ST_name.map((name, i)=&amp;gt;{
    const newName = name.replace('/', '／').replace('A', 'Ａ').replace('S', 'Ｓ');
    if(Number(raw.ST_tlv[i])) {
      return newName + nums[raw.ST_tlv[i]];
    }
    return newName;
  }).forEach((name, i)=&amp;gt;{
    selectByText(`combatFeatsLv${i*2+1}`, name);
  });
};
var insertHonor=(raw)=&amp;gt;{
  const list = raw.honorout_item_name;
  for(var lackedHonorCount = list.length - 3; lackedHonorCount &amp;gt; 0; lackedHonorCount--) {
    addHonorItems();
  }
  list.forEach((name, i)=&amp;gt;{
    inputByName(`honorItem${i+1}`, name);
    inputByName(`honorItem${i+1}Pt`, raw.honorout_item_point[i]);
  });
};
var insertHistory=(raw)=&amp;gt;{
  const bases = {
    '1':'器用', '2':'敏捷', '3':'筋力', '4':'生命', '5':'知力', '6':'精神'
  };
  const list = raw.V_SN_his;
  for(var lackedHistoryCount = list.length - 3; lackedHistoryCount &amp;gt; 0; lackedHistoryCount--) {
    addHistory();
  }
  list.forEach((base, i)=&amp;gt;{
    inputByName(`history${i+1}Exp`, raw.get_exp_his[i]);
    inputByName(`history${i+1}Money`, raw.get_money_his[i]);
    inputByName(`history${i+1}Grow`, bases[base]);
    inputByName(`history${i+1}Note`, raw.seicho_memo_his[i]);
  });
  


};
var insertWeapons=(raw)=&amp;gt;{
  const skills = {
    '1': 'ファイター', '2': 'グラップラー', '3': 'フェンサー', '4': 'シューター',
    '13': 'エンハンサー', '17': 'デーモンルーラー'
  };
  const list = raw.arms_name;
  for(var lackedWeaponsCount = list.length - 3; lackedWeaponsCount &amp;gt; 0; lackedWeaponsCount--) {
    addWeapons();
  }
  raw.arms_name.forEach((name, i)=&amp;gt;{
    inputByName(`weapon${i+1}Name`, name);
    inputByName(`weapon${i+1}Usage`, raw.arms_yoho[i]);
    inputByName(`weapon${i+1}Reqd`, raw.arms_hitsukin[i]);
    inputByName(`weapon${i+1}Acc`, Number(raw.arms_hit_mod[i]) || 0);
    inputByName(`weapon${i+1}Rate`, Number(raw.arms_iryoku[i]) || 0);
    inputByName(`weapon${i+1}Crit`, Number(raw.arms_critical[i]) || 10);
    inputByName(`weapon${i+1}Dmg`, Number(raw.arms_damage_mod[i]) || 0);
    inputByName(`weapon${i+1}Note`, raw.arms_memo[i]);
    inputByName(`weapon${i+1}Class`, skills[raw.V_arms_hit_ginou[i]]);
    inputByName(`weapon${i+1}Category`, raw.arms_cate[i]);
    checkByName(`weapon${i+1}Own`, raw.arms_is_senyou[i] === '1');
    calcWeapon();
  });

  checkByName('armourOwn', raw.is_senyou_armer);
  checkByName('shieldOwn', raw.is_senyou_shield);
};
var insertItemsData=(raw)=&amp;gt;{
  const items = raw.item_name.map((name, i)=&amp;gt;{
    if(name){
      if(raw.item_memo[i]) {
        return `${name} (${raw.item_tanka[i]}) × ${raw.item_num[i]} …… ${raw.item_memo[i]}`;
      } else {
        return `${name} (${raw.item_tanka[i]}) × ${raw.item_num[i]}`;
      }
    } else {return false;}
  }).filter((d)=&amp;gt;{return d;}).join('\n');
  inputByName('items', items);
};
var insertSimpleInfo=(raw)=&amp;gt;{
  var simpleInputList = {
    'characterName': raw.pc_name,
    'freeNote': raw.pc_making_memo,
    'race': raw.shuzoku_name,
    'age': raw.age,
    'gender': raw.sex,
    'sin': raw.V_kegare,
    'money': raw.money,
    'history1Honor': raw.honor_point_sum,
    'deposit': raw.debt,
    'tags': raw.pc_tags,
    'birth': raw.umare_name,
    'sttBaseTec': raw.N_waza, 'sttBasePhy': raw.N_karada, 'sttBaseSpi': raw.N_kokoro,
    'sttBaseA': raw.V_NC1,  'sttBaseB': raw.V_NC2,  'sttBaseC': raw.V_NC3,  'sttBaseD': raw.V_NC4,  'sttBaseE': raw.V_NC5,  'sttBaseF': raw.V_NC6,
    'lvFig': raw.V_GLv1, 'lvGra': raw.V_GLv2, 'lvFen': raw.V_GLv3, 'lvSho': raw.V_GLv4,
    'lvSor': raw.V_GLv5, 'lvCon': raw.V_GLv6, 'lvPri': raw.V_GLv7,
    'lvFai': raw.V_GLv8, 'lvMag': raw.V_GLv9, 'lvDem': raw.V_GLv17,
    'lvSco': raw.V_GLv10, 'lvRan': raw.V_GLv11, 'lvSag': raw.V_GLv12,
    'lvEnh': raw.V_GLv13 , 'lvBar': raw.V_GLv14, 'lvRid': raw.V_GLv16,
    'lvAlc': raw.V_GLv15, 'lvWar': raw.V_GLv18, 'lvMys': raw.V_GLv19, 'lvPhy': raw.V_GLv20,
    'lvGri': raw.V_GLv21, 'lvArt': raw.V_GLv22, 'lvAri': raw.V_GLv23,
    'evasionClass': raw.kaihi_ginou_name,
    'armourName': raw.armor_name, 'armourReqd':raw.armor_hitsukin, 'armourNote': raw.armor_memo,
    'armourDef':raw.armor_bougo || 0, 'armourEva':raw.armor_kaihi || 0,
    'shieldName': raw.shield_name, 'shieldReqd':raw.shield_hitsukin, 'shieldNote': raw.shield_memo,
    'shieldDef':raw.shield_bougo || 0, 'shieldEva':raw.shield_kaihi || 0,
    'defOtherName': raw.shield2_name, 'defOtherReqd':raw.shield2_hitsukin, 'defOtherNote': raw.shield2_memo,
    'defOtherDef':raw.shield2_bougo || 0, 'defOtherEva':raw.shield2_kaihi || 0,

    'accessoryHeadName': raw.acce1_name[0], 'accessoryHeadNote': raw.acce1_memo[0],
    'accessoryEarName': raw.acce2_name[0], 'accessoryEarNote': raw.acce2_memo[0],
    'accessoryFaceName': raw.acce3_name[0], 'accessoryFaceNote': raw.acce3_memo[0],
    'accessoryNeckName': raw.acce4_name[0], 'accessoryNeckNote': raw.acce4_memo[0],
    'accessoryBackName': raw.acce5_name[0], 'accessoryBackNote': raw.acce5_memo[0],

    'accessoryHandRName': raw.acce6_name[0], 'accessoryHandRNote': raw.acce6_memo[0],
    'accessoryHandLName': raw.acce7_name[0], 'accessoryHandLNote': raw.acce7_memo[0],
    'accessoryWaistNote': raw.acce8_name[0], 'accessoryWaistNote': raw.acce8_memo[0],
    'accessoryLegNote': raw.acce9_name[0], 'accessoryLegNote': raw.acce9_memo[0],
    'accessoryOtherName': raw.acce10_name[0], 'accessoryOtherNote': raw.acce10_memo[0],
  };
  for( var key in simpleInputList ) {
    inputByName(key, simpleInputList[key]);
  }
};
var checkByName = (name, value)=&amp;gt;{
  document.getElementsByName(name)[0].checked = value;
};
var selectByText = (name, value)=&amp;gt;{
  const dom = document.getElementsByName(name)[0];
  dom.value = value;
};
var inputByName=(name,value)=&amp;gt;{
  const evt = document.createEvent(&amp;quot;HTMLEvents&amp;quot;);
  evt.initEvent('input', true, true );
  const dom = document.getElementsByName(name)[0];
  dom.value=value;
  dom.dispatchEvent(evt);
};
var load=()=&amp;gt;{
  let sheet=prompt('キャラクター保管所のキャラクターシートのURLを入力してください','https://charasheet.vampire-blood.net/2179993') || '';
  if(sheet===''){return;}
  let sc = document.createElement(&amp;quot;script&amp;quot;);
  sc.type = 'text/javascript';
  sc.src = `${sheet}.js?callback=v2y`;
  let parent = document.getElementsByTagName(&amp;quot;script&amp;quot;)[0];
  parent.parentNode.insertBefore(sc,parent);
};
load();&lt;/pre&gt;</content:encoded>
  </item>
</rdf:RDF>
