async function importHeroLabChar(attributes, herolabfile, text) { const character = herolabfile.public.character; var maintab = importMainTabHeroLab(character); var skilltab = importSkillsTabHeroLab(text.experimental, character); var enhancementtab = importEnhancementTabHeroLab(text, character); let results = await Promise.all([maintab, skilltab, enhancementtab]); let dependingResults = await Promise.all([]); attributes.warningcheckbox="0"; attributes.chummercheckbox="0"; attributes.chummertext= results.join("") + dependingResults.join("") + "\nREMEMBER THIS IS ONLY A HELP AND YOU NEED TO DOUBLE CHECK EVERYTHING." return attributes; } async function importMainTabHeroLab(character) { var goodcode = true; var error = ""; var attributes = {}; try{ console.log("Character meta info"); attributes.character_name = character.name; attributes.metatype = character.race.name; attributes.sex = character.personal.gender; attributes.age = character.personal.age; attributes.height = character.personal.charheight.text; attributes.weight = character.personal.charweight.text; attributes.player = character.playername; attributes.description = character.personal.description; attributes.background = character.personal.description; attributes.karma = character.karma.left; attributes.karmacareer = character.karma.total; attributes.initiativebonus = character.attributes[11].modified - character.attributes[11].base; attributes.astralinitiativebonus = character.attributes[11].modified - character.attributes[11].base; attributes.matrixinitiativebonus = character.attributes[11].modified - character.attributes[11].base; attributes.initiativedice = character.attributes[11].text.split('+')[1].charAt(0); attributes.streetcred = character.reputations[0].value; attributes.notoriety = character.reputations[2].value; attributes.pawareness = character.reputations[4].value; attributes.nuyen_total = character.cash.total; }catch(err){ goodcode = false; error = "Error with Character Info " + err; } try{ console.log("Importing Attributes"); var attributesCharacter = character.attributes; attributes.bod_base = attributesCharacter[0].base; attributes.agi_base = attributesCharacter[1].base; attributes.rea_base = attributesCharacter[2].base; attributes.str_base = attributesCharacter[3].base; attributes.wil_base = attributesCharacter[4].base; attributes.log_base = attributesCharacter[5].base; attributes.int_base = attributesCharacter[6].base; attributes.cha_base = attributesCharacter[7].base; //essence attributesCharacter[8] attributes.edg_total = attributesCharacter[9].base; if(character.heritage.name === "Technomancer"){ attributes.mag_base = character.attributes[10].base; attributes.istechnomancer = 1; } else { attributes.mag_base = 0; attributes.istechnomancer = 0; } attributes.bod_aug = attributesCharacter[0].modified - attributesCharacter[0].base; attributes.agi_aug = attributesCharacter[1].modified - attributesCharacter[1].base; attributes.rea_aug = attributesCharacter[2].modified - attributesCharacter[2].base; attributes.str_aug = attributesCharacter[3].modified - attributesCharacter[3].base; attributes.wil_aug = attributesCharacter[4].modified - attributesCharacter[4].base; attributes.log_aug = attributesCharacter[5].modified - attributesCharacter[5].base; attributes.int_aug = attributesCharacter[6].modified - attributesCharacter[6].base; attributes.cha_aug = attributesCharacter[7].modified - attributesCharacter[7].base; }catch(err){ goodcode=false; error= error + "\n" + "Error with Attributes " +err } if(goodcode){ try{ setAttrs(attributes); return "Main Tab import successfull\n"; } catch(err){ return "Error setting Attributes: " + err; } } else{ return error; } } async function importSkillsTabHeroLab(experimental, character) { var goodcode = true; var error = ""; var attributes = {}; var index=[]; for(var i=1;i<73;i++) { var name='skillname'+i; index[i-1]=name; } var names = await asw.getAttrs(index); var exotics=73; try{ console.log("Importing Skills"); character.skills.active.forEach(skill => { for(var j=1; j<73; j++){ var compname='skillname'+j; if((names[compname] == skill.name)||(skill.name == "Locksmith" && j==29) || (skill.name == "Pilot Ground Craft" && j==55)){ attributes["skillrating"+j] = skill.modified; attributes["skillbonus"+j] = skill.modified - skill.base; if(skill.specialization != null) { attributes["skillspec"+j] = skill.specialization.bonustext; } else { attributes["skillspec"+j]="none"; } } } }) //knowledge skills character.skills.knowledge.forEach(skill => { var newrowid = generateRowID(); attributes["repeating_knowledge_"+newrowid+"_knowledgename"] = skill.name; if(skill.skillcategory_english != null){ attributes["repeating_knowledge_"+newrowid+"_knowledgeattr"] = "@{"+skill.skillcategory_english.toLowerCase(); } attributes["repeating_knowledge_"+newrowid+"_knowledgerating"] = skill.base; attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"] = skill.modified - skill.base; if(skill.specialization != null) { attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = skill.specialization.bonustext; } else { attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = "none"; } }); //language skills character.skills.language.forEach(skill => { var newrowid = generateRowID(); attributes["repeating_knowledge_"+newrowid+"_knowledgename"] = skill.name; if(skill.skillcategory_english != null){ attributes["repeating_knowledge_"+newrowid+"_knowledgeattr"] = "@{"+skill.skillcategory_english.toLowerCase(); } attributes["repeating_knowledge_"+newrowid+"_knowledgerating"] = skill.base; attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"] = skill.modified - skill.base; if(skill.text === "N") { attributes["repeating_knowledge_"+newrowid+"_knowledgerating"] = 100; attributes["repeating_knowledge_"+newrowid+"_knowledgenotes"] = "Natural"; } if(skill.specialization != null) { attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = skill.specialization.bonustext; } else { attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = "none"; } attributes["repeating_knowledge_"+newrowid+"_knowledgeattr"]="@{language"; }); }catch(err){ goodcode=false; error= error + "\n" + "Error with Skills: "+ err; } if(goodcode){ try{ clearSkills(experimental); setAttrs(attributes); return "Skill Tab import successfull\n"; } catch(err){ return "Error setting Attributes: " + err; } } else{ return error; } } async function importEnhancementTabHeroLab(text, character) { var goodcode = true; var error = ""; var attributes = {}; try{ if(character.qualities != null){ console.log("Importing qualities"); if(character.qualities.positive != undefined){ for(var i=0; i< character.qualities.positive.length; i++){ var newrowid=generateRowID(); attributes["repeating_posqualities_"+newrowid+"_posqualityname"] = character.qualities.positive[i].name; attributes["repeating_posqualities_"+newrowid+"_posqualitykarma"] = character.qualities.positive[i].traitcost.bp; attributes["repeating_posqualities_"+newrowid+"_posqualnotes"] = character.qualities.positive[i].description; if( character.qualities.positive[i].rank != null) { attributes["repeating_posqualities_"+newrowid+"_posqualitydescription"] = character.qualities.positive[i].rank; } } } if(character.qualities.positive != undefined){ for(var i=0; i< character.qualities.negative.length; i++){ var newrowid=generateRowID(); attributes["repeating_negqualities_"+newrowid+"_negqualityname"] = character.qualities.negative[i].name; attributes["repeating_negqualities_"+newrowid+"_negqualitykarma"] = character.qualities.negative[i].traitcost.bp; attributes["repeating_negqualities_"+newrowid+"_negqualnotes"] = character.qualities.negative[i].description; if(character.qualities.negative[i].rank != null) { attributes["repeating_negqualities_"+newrowid+"_negqualitydescription"] = character.qualities.negative[i].rank } } } } }catch(err){ goodcode=false; error= error + "\n" + "Error with Qualities " +err } try{ }catch(err){ goodcode=false; error="Error with Powers " +err } try{ var essence=0.0; console.log("Importing Cyberware"); for(var i=0; i< character.gear.augmentations.cyberware.length; i++){ let cyberware = character.gear.augmentations.cyberware[i]; var newrowid=generateRowID(); attributes["repeating_ware_"+newrowid+"_warename"] = cyberware.name; if(cyberware.rating !=null) { attributes["repeating_ware_"+newrowid+"_waredescription"] = cyberware.rating; } if(cyberware.description != null) { attributes["repeating_ware_"+newrowid+"_warenotes"] = cyberware.description; } if(cyberware.essencecost != null) { attributes["repeating_ware_"+newrowid+"_warekarma"] = cyberware.essencecost; essence += Number(cyberware.essencecost.replace(",",".")); } } console.log("Importing Bioware"); for(var i=0; i< character.gear.augmentations.bioware.length; i++){ let bioware = character.gear.augmentations.bioware[i]; var newrowid=generateRowID(); attributes["repeating_ware_"+newrowid+"_warename"] = bioware.name; if(bioware.rating !=null) { attributes["repeating_ware_"+newrowid+"_waredescription"] = bioware.rating; } if(bioware.description != null) { attributes["repeating_ware_"+newrowid+"_warenotes"] = bioware.description; } if(bioware.essencecost != null) { attributes["repeating_ware_"+newrowid+"_warekarma"] = bioware.essencecost; essence += Number(bioware.essencecost.replace(",",".")); } } attributes.ess_total = 6-essence; }catch(err){ goodcode=false; error= error + "\n" + "Error with Ware " +err } if(goodcode){ try{ clearEnhancements(text.experimental); setAttrs(attributes); return "Enhancement Tab import successfull\n"; } catch(err){ return "Error setting Attributes: " + err; } } else{ return error; } }