VampireBloodToYtSheet Fork

  • /*
     * @title VampireBloodToYtSheet
     * @description ゆとシート2 for SW2.5 にキャラクター保管所のキャラシをコンバートするツール。キャラクター保管所のキャラシ URL をコピーしたうえでゆとシート2 for SW2.5 を開いた状態で実行してみよう
     * @license MIT License
     */
    
    var v2y=(raw)=>{
      insertHistory(raw);
      insertSimpleInfo(raw);
      insertItemsData(raw);
      insertWeapons(raw);
      insertHonor(raw);
      insertBattleSkill(raw);
      insertSubBattleSkills(raw);
    };
    var insertSubBattleSkills=(raw)=>{
      const insertSubBattleSkillsBySkill = (nameBase, skillList)=>{
        skillList.forEach((name, i)=>{
          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)=>{
      const nums = {
        '1': 'Ⅰ', '2':'Ⅱ', '3':'Ⅲ', '4':'Ⅳ', '5':'Ⅴ'
      };
      raw.ST_name.map((name, i)=>{
        const newName = name.replace('/', '/').replace('A', 'A').replace('S', 'S');
        if(Number(raw.ST_tlv[i])) {
          return newName + nums[raw.ST_tlv[i]];
        }
        return newName;
      }).forEach((name, i)=>{
        selectByText(`combatFeatsLv${i*2+1}`, name);
      });
    };
    var insertHonor=(raw)=>{
      const list = raw.honorout_item_name;
      for(var lackedHonorCount = list.length - 3; lackedHonorCount > 0; lackedHonorCount--) {
        addHonorItems();
      }
      list.forEach((name, i)=>{
        inputByName(`honorItem${i+1}`, name);
        inputByName(`honorItem${i+1}Pt`, raw.honorout_item_point[i]);
      });
    };
    var insertHistory=(raw)=>{
      const bases = {
        '1':'器用', '2':'敏捷', '3':'筋力', '4':'生命', '5':'知力', '6':'精神'
      };
      const list = raw.V_SN_his;
      for(var lackedHistoryCount = list.length - 3; lackedHistoryCount > 0; lackedHistoryCount--) {
        addHistory();
      }
      list.forEach((base, i)=>{
        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)=>{
      const skills = {
        '1': 'ファイター', '2': 'グラップラー', '3': 'フェンサー', '4': 'シューター',
        '13': 'エンハンサー', '17': 'デーモンルーラー'
      };
      const list = raw.arms_name;
      for(var lackedWeaponsCount = list.length - 3; lackedWeaponsCount > 0; lackedWeaponsCount--) {
        addWeapons();
      }
      raw.arms_name.forEach((name, i)=>{
        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)=>{
      const items = raw.item_name.map((name, i)=>{
        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)=>{return d;}).join('\n');
      inputByName('items', items);
    };
    var insertSimpleInfo=(raw)=>{
      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)=>{
      document.getElementsByName(name)[0].checked = value;
    };
    var selectByText = (name, value)=>{
      const dom = document.getElementsByName(name)[0];
      dom.value = value;
    };
    var inputByName=(name,value)=>{
      const evt = document.createEvent("HTMLEvents");
      evt.initEvent('input', true, true );
      const dom = document.getElementsByName(name)[0];
      dom.value=value;
      dom.dispatchEvent(evt);
    };
    var load=()=>{
      let sheet=prompt('キャラクター保管所のキャラクターシートのURLを入力してください','https://charasheet.vampire-blood.net/2179993') || '';
      if(sheet===''){return;}
      let sc = document.createElement("script");
      sc.type = 'text/javascript';
      sc.src = `${sheet}.js?callback=v2y`;
      let parent = document.getElementsByTagName("script")[0];
      parent.parentNode.insertBefore(sc,parent);
    };
    load();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。