diff --git a/Shadowrun5th/Shadowrun5th.css b/Shadowrun5th/Shadowrun5th.css index e94a08fe51..3165da4971 100644 --- a/Shadowrun5th/Shadowrun5th.css +++ b/Shadowrun5th/Shadowrun5th.css @@ -606,6 +606,7 @@ div.spiritstable .technomancycheckbox:not(:checked) ~ div.technobound display:block; } +.statinputwrapper .statinput, .statinput{ width:2em; background-color:#444444; diff --git a/Shadowrun5th/Shadowrun5th.html b/Shadowrun5th/Shadowrun5th.html index 3eb897af16..f75ed1d31b 100644 --- a/Shadowrun5th/Shadowrun5th.html +++ b/Shadowrun5th/Shadowrun5th.html @@ -13386,670 +13386,6 @@ Click again to switch to Manual and Remote"> diff --git a/Shadowrun5th/js/import.js b/Shadowrun5th/js/import.js deleted file mode 100644 index 8bdeb96b90..0000000000 --- a/Shadowrun5th/js/import.js +++ /dev/null @@ -1,1028 +0,0 @@ -function clearSheet(attributes, experimental) { - console.log("Removing old data"); - getSectionIDs("repeating_contacts", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_contacts_"+idarray[i]); - } - }); - getSectionIDs("repeating_posqualities", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_posqualities_"+idarray[i]); - } - }); - getSectionIDs("repeating_negqualities", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_negqualities_"+idarray[i]); - } - }); - getSectionIDs("repeating_powers", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_powers_"+idarray[i]); - } - }); - getSectionIDs("repeating_ware", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_ware_"+idarray[i]); - } - }); - getSectionIDs("repeating_martial", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_martial_"+idarray[i]); - } - }); - getSectionIDs("repeating_spells", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_spells_"+idarray[i]); - } - }); - getSectionIDs("repeating_rituals", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_rituals_"+idarray[i]); - } - }); - getSectionIDs("repeating_alchemy", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_alchemy_"+idarray[i]); - } - }); - getSectionIDs("repeating_critterpowers", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_critterpowers_"+idarray[i]); - } - }); - getSectionIDs("repeating_initiation", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_initiation_"+idarray[i]); - } - }); - getSectionIDs("repeating_programs", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_programs_"+idarray[i]); - } - }); - getSectionIDs("repeating_equipment", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_equipment_"+idarray[i]); - } - }); - getSectionIDs("repeating_knowledge", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_knowledge_"+idarray[i]); - } - }); - getSectionIDs("repeating_vehicles", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_vehicles_"+idarray[i]); - } - }); - getSectionIDs("repeating_drones", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_drones_"+idarray[i]); - } - }); - getSectionIDs("repeating_armors", function(idarray) { - for(var i=0; i < idarray.length; i++) { - removeRepeatingRow("repeating_armors_"+idarray[i]); - } - }); - - //removing repeating weapons - getSectionIDs("repeating_weapons", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_weapons_"+idarray[j]); - } - }); - - //removing ammo - getSectionIDs("repeating_ammotype1", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype1_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype2", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype2_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype3", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype3_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype4", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype4_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype5", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype5_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype6", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype6_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype7", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype7_"+idarray[j]); - } - }); - getSectionIDs("repeating_ammotype8", function(idarray) { - for(var j=0; j < idarray.length; j++) { - removeRepeatingRow("repeating_ammotype8_"+idarray[j]); - } - }); -} - - -on("change:chummercheckbox", async function(){ - let text = await asw.getAttrs(["chummertext","chummercheckbox", "experimental", "nightly"]); - if(text.chummercheckbox=="on"){ - var goodcode = true; - var error=""; - var attributes={}; - try{ - var chummerfile=JSON.parse(text.chummertext); - }catch(err){ - goodcode = false; - error = err; - } - if(goodcode){ - - try{ - console.log("Character meta info"); - if(chummerfile.characters.character.alias != null) - attributes.character_name = chummerfile.characters.character.alias; - - if(chummerfile.characters.character.metatype != null) - attributes.metatype=chummerfile.characters.character.metatype; - - if(chummerfile.characters.character.sex != null) - attributes.sex=chummerfile.characters.character.sex; - - if(chummerfile.characters.character.age != null) - attributes.age=chummerfile.characters.character.age; - - if(chummerfile.characters.character.height != null) - attributes.height=chummerfile.characters.character.height; - - if(chummerfile.characters.character.weight != null) - attributes.weight=chummerfile.characters.character.weight; - if(chummerfile.characters.character.playername != null) - attributes.player=chummerfile.characters.character.playername; - if(chummerfile.characters.character.description != null) - attributes.description=chummerfile.characters.character.description; - if(chummerfile.characters.character.background != null) - attributes.background=chummerfile.characters.character.background; - if(chummerfile.characters.character.notes != null) - attributes.notes=chummerfile.characters.character.notes; - if(chummerfile.characters.character.gamenotes != null) - attributes.generalnotes=chummerfile.characters.character.gamenotes; - if(chummerfile.characters.character.karma != null) - attributes.karma=chummerfile.characters.character.karma; - if(chummerfile.characters.character.totalkarma != null) - attributes.karmacareer=chummerfile.characters.character.totalkarma; - if(chummerfile.characters.character.initbonus != null){ - attributes.initiativebonus=chummerfile.characters.character.initbonus; - attributes.astralinitiativebonus=chummerfile.characters.character.initbonus; - attributes.matrixinitiativebonus=chummerfile.characters.character.initbonus; - } - if(chummerfile.characters.character.initdice != null) - attributes.initiativedice=chummerfile.characters.character.initdice; - if(chummerfile.characters.character.astralinitdice != null) - attributes.astralinitiativedice=chummerfile.characters.character.astralinitdice; - if(chummerfile.characters.character.cmthresholdoffset != null) - attributes.woundadditive=chummerfile.characters.character.cmthresholdoffset; - if(chummerfile.characters.character.cmthreshold != null) - attributes.woundmultiplikative=chummerfile.characters.character.cmthreshold; - if(chummerfile.characters.character.cmoverflow != null) - attributes.overflowmod=chummerfile.characters.character.cmoverflow-chummerfile.characters.character.attributes[1].attribute[0].total- 1; - if(chummerfile.characters.character.physicalcm != null) - attributes.physicaltrackmod=chummerfile.characters.character.physicalcm-Math.ceil(chummerfile.characters.character.attributes[1].attribute[0].total/2)- 8; - if(chummerfile.characters.character.stuncm != null) - attributes.stuntrackmod=chummerfile.characters.character.stuncm-Math.ceil(chummerfile.characters.character.attributes[1].attribute[7].total/2)- 8; - if(chummerfile.characters.character.totalstreetcred != null) - attributes.streetcred=chummerfile.characters.character.totalstreetcred; - if(chummerfile.characters.character.totalnotoriety != null) - attributes.notoriety=chummerfile.characters.character.totalnotoriety; - if(chummerfile.characters.character.totalpublicawareness != null) - attributes.pawareness=chummerfile.characters.character.totalpublicawareness; - if(chummerfile.characters.character.nuyen != null) - attributes.nuyen_total=chummerfile.characters.character.nuyen; - if(chummerfile.characters.character.magician == "True"){ - // HeroLab 'chummer' export uses drainattribute property and a list, this is a workaround for that - try{ - attributes.drainattribute="@{"+chummerfile.characters.character.tradition.drainattributes.match(/[A-Z]+/g)[1].toLowerCase()+"_total}"; - } catch(err) - { - attributes.drainattribute="@{"+chummerfile.characters.character.tradition.drainattribute.attr[1]+"_total}"; - } - } - }catch(err){ - goodcode=false; - error="Error with Character Info " +err - } - try{ - console.log("Importing Attributes"); - var attributesChummer = chummerfile.characters.character.attributes[1].attribute; - attributes.bod_base=attributesChummer.find(a => a.name_english === "BOD").base; - attributes.agi_base=attributesChummer.find(a => a.name_english === "AGI").base; - attributes.rea_base=attributesChummer.find(a => a.name_english === "REA").base; - attributes.str_base=attributesChummer.find(a => a.name_english === "STR").base; - attributes.cha_base=attributesChummer.find(a => a.name_english === "CHA").base; - attributes.int_base=attributesChummer.find(a => a.name_english === "INT").base; - attributes.log_base=attributesChummer.find(a => a.name_english === "LOG").base; - attributes.wil_base=attributesChummer.find(a => a.name_english === "WIL").base; - attributes.edg_total=attributesChummer.find(a => a.name_english === "EDG").base; - if(chummerfile.characters.character.technomancer==="True"){ - attributes.mag_base=attributesChummer.find(a => a.name_english === "RES").total; - attributes.istechnomancer = 1; - } - else if(chummerfile.characters.character.magician==="True" || chummerfile.characters.character.adept==="True"){ - attributes.mag_base=attributesChummer.find(a => a.name_english === "MAG").total; - attributes.istechnomancer = 0; - } - else { - attributes.mag_base = 0; - attributes.istechnomancer = 0; - } - attributes.bod_aug=attributesChummer.find(a => a.name_english === "BOD").total-attributesChummer.find(a => a.name_english === "BOD").base; - attributes.agi_aug=attributesChummer.find(a => a.name_english === "AGI").total-attributesChummer.find(a => a.name_english === "AGI").base; - attributes.rea_aug=attributesChummer.find(a => a.name_english === "REA").total-attributesChummer.find(a => a.name_english === "REA").base; - attributes.str_aug=attributesChummer.find(a => a.name_english === "STR").total-attributesChummer.find(a => a.name_english === "STR").base; - attributes.cha_aug=attributesChummer.find(a => a.name_english === "CHA").total-attributesChummer.find(a => a.name_english === "CHA").base; - attributes.int_aug=attributesChummer.find(a => a.name_english === "INT").total-attributesChummer.find(a => a.name_english === "INT").base; - attributes.log_aug=attributesChummer.find(a => a.name_english === "LOG").total-attributesChummer.find(a => a.name_english === "LOG").base; - attributes.wil_aug=attributesChummer.find(a => a.name_english === "WIL").total-attributesChummer.find(a => a.name_english === "WIL").base; - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Attributes " +err - } - try{ - if(chummerfile.characters.character.powers!=null){ - console.log("Importing Adept Powers"); - if(chummerfile.characters.character.powers.power.length>1){ - for(var i=0;i1){ - for(var i=0;i1){ - for(var i=0;i1){ - for(var j=0;j1){ - for(var j=0;j1){ - for(var i=0;i1){ - for(var i=0;i1){ - for(var i=0;i 1){ - for(var i=1; i1){ - for(var i=0;i1){ - for(var i=0;i 0){ - name += " " + chummerfile.characters.character.gears.gear[i].rating; - } - attributes["repeating_equipment_"+newrowid+"_equipmentname"]=name; - attributes["repeating_equipment_"+newrowid+"_equipmentnumber"]=chummerfile.characters.character.gears.gear[i].qty ? chummerfile.characters.character.gears.gear[i].qty : 1; - if(chummerfile.characters.character.gears.gear[i].extra != null) { - attributes["repeating_equipment_"+newrowid+"_equipmentdescription"]=chummerfile.characters.character.gears.gear[i].extra; - } - attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]=""; - if(chummerfile.characters.character.gears.gear[i].children!=null){ - if(chummerfile.characters.character.gears.gear[i].children.gear.length>1){ - for(var j=0; j 0){ - note += " " + chummerfile.characters.character.gears.gear[i].children.gear[j].rating; - } - if(chummerfile.characters.character.gears.gear[i].children.gear[j].extra != null) { - note += " " + chummerfile.characters.character.gears.gear[i].children.gear[j].extra; - } - attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]+= note +"\n"; - } - } - }else{ - if(chummerfile.characters.character.gears.gear[i].children.gear.category_english=="Common Programs"||chummerfile.characters.character.gears.gear[i].children.gear.category_english=="Hacking Programs"){ - var newrowidb=generateRowID(); - attributes["repeating_programs_"+newrowidb+"_programname"]=chummerfile.characters.character.gears.gear[i].children.gear.name; - }else{ - note = chummerfile.characters.character.gears.gear[i].children.gear.name; - if(chummerfile.characters.character.gears.gear[i].children.gear.rating > 0){ - note += " " + chummerfile.characters.character.gears.gear[i].children.gear.rating; - } - if(chummerfile.characters.character.gears.gear[i].children.gear.extra != null) { - note += " " + chummerfile.characters.character.gears.gear[i].children.gear.extra; - } - attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]+= note +"\n"; - } - } - } - } - } - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Gear " +err - } - - try { - //import ai programs - if(chummerfile.characters.character.aiprograms != null){ - console.log("Importing ai programs"); - if(chummerfile.characters.character.aiprograms.aiprogram.length > 1){ - for(var i=0; i < chummerfile.characters.character.aiprograms.aiprogram.length; i++){ - var newrowid=generateRowID(); - attributes["repeating_programs_"+newrowid+"_programname"]=chummerfile.characters.character.aiprograms.aiprogram[i].name; - } - } - else { - var newrowid=generateRowID(); - attributes["repeating_programs_"+newrowid+"_programname"]=chummerfile.characters.character.aiprograms.aiprogram.name; - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with AI programs " +err - } - - try{ - if(chummerfile.characters.character.vehicles != null){ - console.log("Importing vehicles"); - if(chummerfile.characters.character.vehicles.vehicle.length > 1){ - let vehicles = chummerfile.characters.character.vehicles.vehicle.filter( vehicle => vehicle.seats > 0); - for(var i=0; i < vehicles.length; i++){ - importSingleVehicle(vehicles[i], attributes); - } - } else { - if(chummerfile.characters.character.vehicles.vehicle.seats > 0) { - importSingleVehicle(chummerfile.characters.character.vehicles.vehicle, attributes); - } - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Vehicles: " + err; - } - try{ - if(chummerfile.characters.character.vehicles != null){ - console.log("Importing drones"); - if(chummerfile.characters.character.vehicles.vehicle.length > 1){ - let drones = chummerfile.characters.character.vehicles.vehicle.filter( vehicle => vehicle.seats == 0); - for(var i=0; i < drones.length; i++){ - importSingleDrone(drones[i], attributes); - } - } else { - if(chummerfile.characters.character.vehicles.vehicle.seats == 0) { - importSingleDrone(chummerfile.characters.character.vehicles.vehicle, attributes); - } - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Vehicles: " + err; - } - var index=[]; - for(var i=1;i<73;i++) - { - var name='skillname'+i; - index[i-1]=name; - } - getAttrs(index, function(names){ - var exotics=73; - var alchemy=0; - var spellcasting=0; - var ritual=0; - try{ - console.log("Importing Skills"); - if(chummerfile.characters.character.skills.skill[0].name_english !== undefined) { - for(var i=0;i0){ - attributes["repeating_knowledge_"+newrowid+"_knowledgerating"]=chummerfile.characters.character.skills.skill[i].rating; - attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - }else{ - attributes["repeating_knowledge_"+newrowid+"_knowledgerating"]="-1"; - attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - if(chummerfile.characters.character.skills.skill[i].skillspecializations!=null) { - attributes["repeating_knowledge_"+newrowid+"_knowledgespec"]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - } - else - attributes["repeating_knowledge_"+newrowid+"_knowledgespec"]="none"; - } - - if(chummerfile.characters.character.skills.skill[i].exotic=="True"){ - attributes["skillname"+exotics]=chummerfile.characters.character.skills.skill[i].name_english; - if(chummerfile.characters.character.skills.skill[i].rating>0){ - attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - attributes["skillrating"+exotics]=chummerfile.characters.character.skills.skill[i].rating; - }else{ - attributes["skillrating"+exotics]="-1"; - attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - attributes["skillattr"+exotics]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); - if(chummerfile.characters.character.skills.skill[i].skillspecializations!=null) - attributes["skillspec"+exotics]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - else - attributes["skillspec"+exotics]="none"; - exotics++; - } - - for(var j=1;j<73;j++){ - var compname='skillname'+j; - if((names[compname]==chummerfile.characters.character.skills.skill[i].name_english)||(chummerfile.characters.character.skills.skill[i].name_english=="Locksmith"&&j==29)||(chummerfile.characters.character.skills.skill[i].name_english=="Pilot Ground Craft"&&j==55)){ - attributes["skillattr"+j]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); - if(chummerfile.characters.character.skills.skill[i].rating>0){ - attributes["skillrating"+j]=chummerfile.characters.character.skills.skill[i].rating; - attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - }else{ - attributes["skillrating"+j]="-1"; - attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - if(chummerfile.characters.character.skills.skill[i].skillspecializations != null && chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name != null) - attributes["skillspec"+j]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - else - attributes["skillspec"+j]="none"; - if(chummerfile.characters.character.weapons!=null){ - if(chummerfile.characters.character.weapons.weapon.length>1){ - for(var h=1;h0){ - attributes["repeating_knowledge_"+newrowid+"_knowledgerating"]=chummerfile.characters.character.skills.skill[i].rating; - attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - }else{ - attributes["repeating_knowledge_"+newrowid+"_knowledgerating"]="-1"; - attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - if(chummerfile.characters.character.skills.skill[i].skillspecializations!=null) - attributes["repeating_knowledge_"+newrowid+"_knowledgespec"]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - else - attributes["repeating_knowledge_"+newrowid+"_knowledgespec"]="none"; - } - if(chummerfile.characters.character.skills.skill[i].exotic=="True"){ - attributes["skillname"+exotics]=chummerfile.characters.character.skills.skill[i].name; - if(chummerfile.characters.character.skills.skill[i].rating>0){ - attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - attributes["skillrating"+exotics]=chummerfile.characters.character.skills.skill[i].rating; - }else{ - attributes["skillrating"+exotics]="-1"; - attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - attributes["skillattr"+exotics]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); - if(chummerfile.characters.character.skills.skill[i].skillspecializations!=null) - attributes["skillspec"+exotics]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - else - attributes["skillspec"+exotics]="none"; - exotics++; - } - for(var j=1;j<73;j++){ - var compname='skillname'+j; - if((names[compname]==chummerfile.characters.character.skills.skill[i].name)||(chummerfile.characters.character.skills.skill[i].name=="Locksmith"&&j==29)||(chummerfile.characters.character.skills.skill[i].name=="Pilot Ground Craft"&&j==55)){ - attributes["skillattr"+j]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); - if(chummerfile.characters.character.skills.skill[i].rating>0){ - attributes["skillrating"+j]=chummerfile.characters.character.skills.skill[i].rating; - attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; - }else{ - attributes["skillrating"+j]="-1"; - attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; - } - if(chummerfile.characters.character.skills.skill[i].skillspecializations != null && chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name != null) - attributes["skillspec"+j]=chummerfile.characters.character.skills.skill[i].skillspecializations.skillspecialization.name; - else - attributes["skillspec"+j]="none"; - if(chummerfile.characters.character.weapons!=null){ - if(chummerfile.characters.character.weapons.weapon.length>1){ - for(var h=1;h 1){ - for(var i=0; i < chummerfile.characters.character.spells.spell.length; i++){ - importSingleSpell(chummerfile.characters.character.spells.spell[i], attributes, spellcastingSkill, ritualSkill, alchemySkill); - } - }else{ - importSingleSpell(chummerfile.characters.character.spells.spell, attributes, spellcastingSkill, ritualSkill, alchemySkill); - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Spells: " + err; - } - try{ - if(chummerfile.characters.character.critterpowers != null){ - console.log("Importing critter powers"); - if(chummerfile.characters.character.critterpowers.critterpower.length > 1){ - for(var i=0; i < chummerfile.characters.character.critterpowers.critterpower.length; i++){ - var newrowid=generateRowID(); - attributes["repeating_critterpowers_"+newrowid+"_spellname"]=chummerfile.characters.character.critterpowers.critterpower[i].fullname; - attributes["repeating_critterpowers_"+newrowid+"_spelltype"]=chummerfile.characters.character.critterpowers.critterpower[i].type; - if(chummerfile.characters.character.critterpowers.critterpower[i].notes != null){ - attributes["repeating_critterpowers_"+newrowid+"_spelldescription"] = chummerfile.characters.character.critterpowers.critterpower[i].notes; - } - attributes["repeating_critterpowers_"+newrowid+"_spelldrain"]="-0"; - - attributes["repeating_critterpowers_"+newrowid+"_spellcategory"] = chummerfile.characters.character.critterpowers.critterpower[i].category; - attributes["repeating_critterpowers_"+newrowid+"_spellbonus"]=0; - - if(chummerfile.characters.character.critterpowers.critterpower[i].range != null){ - attributes["repeating_critterpowers_"+newrowid+"_spellrange"]=chummerfile.characters.character.critterpowers.critterpower[i].range; - } else { - attributes["repeating_critterpowers_"+newrowid+"_spellrange"]="N/A"; - } - - if(chummerfile.characters.character.critterpowers.critterpower[i].duration != null) { - attributes["repeating_critterpowers_"+newrowid+"_spellduration"] = chummerfile.characters.character.critterpowers.critterpower[i].duration; - } else { - attributes["repeating_critterpowers_"+newrowid+"_spellduration"] = "N/A"; - } - - } - }else{ - var newrowid=generateRowID(); - attributes["repeating_critterpowers_"+newrowid+"_spellname"]=chummerfile.characters.character.critterpowers.critterpower.fullname; - attributes["repeating_critterpowers_"+newrowid+"_spelltype"]=chummerfile.characters.character.critterpowers.critterpower.type; - if(chummerfile.characters.character.critterpowers.critterpower.notes!=null){ - attributes["repeating_critterpowers_"+newrowid+"_spelldescription"]=chummerfile.characters.character.critterpowers.critterpower.notes; - } - attributes["repeating_critterpowers_"+newrowid+"_spelldrain"]="-0"; - attributes["repeating_critterpowers_"+newrowid+"_spellcategory"]=chummerfile.characters.character.critterpowers.critterpower.category; - attributes["repeating_critterpowers_"+newrowid+"_spellbonus"]=0; - - if(chummerfile.characters.character.critterpowers.critterpower.range != null){ - attributes["repeating_critterpowers_"+newrowid+"_spellrange"]=chummerfile.characters.character.critterpowers.critterpower.range; - } else { - attributes["repeating_critterpowers_"+newrowid+"_spellrange"]="N/A"; - } - - if(chummerfile.characters.character.critterpowers.critterpower.duration != null) { - attributes["repeating_critterpowers_"+newrowid+"_spellduration"]=chummerfile.characters.character.critterpowers.critterpower.duration; - } else { - attributes["repeating_critterpowers_"+newrowid+"_spellduration"]="N/A"; - } - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Critterpowers: " + err; - } - try{ - if(chummerfile.characters.character.contacts!=null){ - console.log("Importing Contacts"); - if(chummerfile.characters.character.contacts.contact.length>1){ - for(var i=0; i gear.category_english == "Cyberdecks" || gear.category_english == "Rigger Command Consoles").sort((g1,g2) => g1.devicerating < g2.devicerating); - if(decks.length > 0) { - cyberdeck = decks[0]; - attributes.attack_base = cyberdeck.attack; - attributes.sleaze_base = cyberdeck.sleaze; - attributes.datap_base = cyberdeck.dataprocessing; - attributes.firewall_base = cyberdeck.firewall; - attributes.devicertg_base = cyberdeck.devicerating; - } - else { - let commlinks = chummerfile.characters.character.gears.gear.filter(gear => gear.category_english == "Commlinks").sort((g1,g2) => g1.devicerating < g2.devicerating); - if(commlinks.length > 0) { - link = commlinks[0]; - attributes.attack_base = link.attack; - attributes.sleaze_base = link.sleaze; - attributes.datap_base = link.dataprocessing; - attributes.firewall_base = link.firewall; - attributes.devicertg_base = link.devicerating; - } - } - } - }catch(err){ - goodcode=false; - error= error + "\n" + "Error with Cyberdeck: " + err; - } - - attributes.warningcheckbox="0"; - attributes.chummercheckbox="0"; - attributes.chummertext="Import successful\nREMEMBER THIS IS ONLY A HELP AND YOU NEED TO DOUBLE CHECK EVERYTHING.\nSpecifically check the following values manually:\n-Character Name\n-Limitmodifiers global or applying to single skills\n-Cyberdeck and Matrix Actions\n-Vehicle and Drone Autosofts\n-SINs + Lifestyles\nWeapon AP, Acc, RC" - if(goodcode){ - try{ - clearSheet(attributes, text.experimental); - console.log("Writing new data"); - setAttrs(attributes); - }catch(err){ - setAttrs({ - chummertext:"Error setting Attributes: " + err, - chummercheckbox:"0", - warningcheckbox:"0" - }); - } - }else{ - setAttrs({ - chummertext:error, - chummercheckbox:"0", - warningcheckbox:"0" - }); - } - }); - }else{ - setAttrs({ - chummertext:"Error invalid Structure: " + error, - chummercheckbox:"0", - warningcheckbox:"0" - }); - } - } -}); \ No newline at end of file diff --git a/Shadowrun5th/js/importArmor.js b/Shadowrun5th/js/importArmor.js deleted file mode 100644 index cb80a73956..0000000000 --- a/Shadowrun5th/js/importArmor.js +++ /dev/null @@ -1,70 +0,0 @@ -function importSingleArmor(armor, attributes) { - - if(armor.armor.includes("/")) { - var armorValueArray = armor.armor.toString().split("/"); - - var splitArmor = armor; - splitArmor.armor = armorValueArray[0]; - importSingleArmor(splitArmor, attributes); - - armor.armor = armorValueArray[1]; - } - - var newrowid = generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"] = armor.name; - if(armor.equipped == "True") { - attributes["repeating_armors_"+newrowid+"_armorworn"] = "on"; - } - attributes["repeating_armors_"+newrowid+"_armorrating"] = armor.armor; - attributes["repeating_armors_"+newrowid+"_armornotes"] = ""; - if(armor.armormods!=null){ - if(armor.armormods.armormod.length > 1){ - for(var j=0; j < armor.armormods.armormod.length; j++){ - if(Number(armor.armormods.armormod[j].rating) > 0){ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod[j].name + " " + armor.armormods.armormod[j].rating + "\n"; - }else{ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod[j].name + "\n"; - } - } - }else{ - if(Number(armor.armormods.armormod.rating)>0){ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod.name + " " + armor.armormods.armormod.rating + "\n"; - }else{ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod.name + "\n"; - } - } - } - if(armor.gears!=null){ - if(armor.gears.gear.length > 1){ - for(var j=0; j < armor.gears.gear.length; j++){ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.gears.gear[j].name + "\n"; - } - }else{ - attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.gears.gear.name + "\n"; - } - } -} - -function importCyberwareArmor(nightly, cyberware, attributes) { - if(nightly != "on") { - return; - } - - var cyberwareEnhancements = []; - if(cyberware.children != null && cyberware.children.cyberware.length > 1) { - cyberwareEnhancements = cyberware.children.cyberware; - } - - cyberwareEnhancements.forEach(enhancement => importSingleCyberwareArmor(cyberware.name, enhancement, attributes)); -} - -function importSingleCyberwareArmor(parentname, cyberware, attributes) { - - if(cyberware.name_english === "Armor") { - var newrowid = generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"] = parentname; - attributes["repeating_armors_"+newrowid+"_armorworn"] = "on"; - attributes["repeating_armors_"+newrowid+"_armorrating"] = cyberware.rating; - attributes["repeating_armors_"+newrowid+"_armornotes"] = ""; - } -} diff --git a/Shadowrun5th/js/importChummer/importChummer.js b/Shadowrun5th/js/importChummer/importChummer.js new file mode 100644 index 0000000000..7e3b336fcb --- /dev/null +++ b/Shadowrun5th/js/importChummer/importChummer.js @@ -0,0 +1,1576 @@ +async function importChummerChar(attributes, chummerfile, text) { + var maintab = importMainTabChummer(chummerfile); + var skilltab = importSkillsTabChummer(text.experimental, chummerfile); + var magictab = importMagicTabChummer(text.experimental, chummerfile); + var enhancementtab = importEnhancementTabChummer(text, chummerfile); + var matrixtab = importMatrixTabChummer(text.experimental, chummerfile); + var vehiclestab = importVehiclesTabChummer(text.experimental, chummerfile); + var equipmentstab = importEquipmentTabChummer(text.experimental, chummerfile); + var socialtab = importSocialTabChummer(chummerfile); + + let results = await Promise.all([maintab, skilltab, enhancementtab, socialtab]); + let dependingResults = await Promise.all([magictab, matrixtab, vehiclestab, equipmentstab]); + + 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 importMainTabChummer(chummerfile) { + + var goodcode = true; + var error = ""; + var attributes = {}; + + + try{ + console.log("Character meta info"); + if(chummerfile.characters.character.alias != null) + attributes.character_name = chummerfile.characters.character.alias; + + if(chummerfile.characters.character.metatype != null) + attributes.metatype=chummerfile.characters.character.metatype; + + if(chummerfile.characters.character.sex != null) + attributes.sex=chummerfile.characters.character.sex; + + if(chummerfile.characters.character.age != null) + attributes.age=chummerfile.characters.character.age; + + if(chummerfile.characters.character.height != null) + attributes.height=chummerfile.characters.character.height; + + + if(chummerfile.characters.character.weight != null) + attributes.weight=chummerfile.characters.character.weight; + if(chummerfile.characters.character.playername != null) + attributes.player=chummerfile.characters.character.playername; + if(chummerfile.characters.character.description != null) + attributes.description=chummerfile.characters.character.description; + if(chummerfile.characters.character.background != null) + attributes.background=chummerfile.characters.character.background; + if(chummerfile.characters.character.notes != null) + attributes.notes=chummerfile.characters.character.notes; + if(chummerfile.characters.character.gamenotes != null) + attributes.generalnotes=chummerfile.characters.character.gamenotes; + if(chummerfile.characters.character.karma != null) + attributes.karma=chummerfile.characters.character.karma; + if(chummerfile.characters.character.totalkarma != null) + attributes.karmacareer=chummerfile.characters.character.totalkarma; + if(chummerfile.characters.character.initbonus != null){ + attributes.initiativebonus=chummerfile.characters.character.initbonus; + attributes.astralinitiativebonus=chummerfile.characters.character.initbonus; + attributes.matrixinitiativebonus=chummerfile.characters.character.initbonus; + } + if(chummerfile.characters.character.initdice != null) + attributes.initiativedice=chummerfile.characters.character.initdice; + if(chummerfile.characters.character.astralinitdice != null) + attributes.astralinitiativedice=chummerfile.characters.character.astralinitdice; + if(chummerfile.characters.character.cmthresholdoffset != null) + attributes.woundadditive=chummerfile.characters.character.cmthresholdoffset; + if(chummerfile.characters.character.cmthreshold != null) + attributes.woundmultiplikative=chummerfile.characters.character.cmthreshold; + if(chummerfile.characters.character.cmoverflow != null) + attributes.overflowmod=chummerfile.characters.character.cmoverflow-chummerfile.characters.character.attributes[1].attribute[0].total- 1; + if(chummerfile.characters.character.physicalcm != null) + attributes.physicaltrackmod=chummerfile.characters.character.physicalcm-Math.ceil(chummerfile.characters.character.attributes[1].attribute[0].total/2)- 8; + if(chummerfile.characters.character.stuncm != null) + attributes.stuntrackmod=chummerfile.characters.character.stuncm-Math.ceil(chummerfile.characters.character.attributes[1].attribute[7].total/2)- 8; + if(chummerfile.characters.character.totalstreetcred != null) + attributes.streetcred=chummerfile.characters.character.totalstreetcred; + if(chummerfile.characters.character.totalnotoriety != null) + attributes.notoriety=chummerfile.characters.character.totalnotoriety; + if(chummerfile.characters.character.totalpublicawareness != null) + attributes.pawareness=chummerfile.characters.character.totalpublicawareness; + if(chummerfile.characters.character.nuyen != null) + attributes.nuyen_total=chummerfile.characters.character.nuyen; + if(chummerfile.characters.character.magician == "True"){ + // HeroLab 'chummer' export uses drainattribute property and a list, this is a workaround for that + try{ + attributes.drainattribute="@{"+chummerfile.characters.character.tradition.drainattributes.match(/[A-Z]+/g)[1].toLowerCase()+"_total}"; + } catch(err) + { + attributes.drainattribute="@{"+chummerfile.characters.character.tradition.drainattribute.attr[1]+"_total}"; + } + } + }catch(err){ + goodcode = false; + error = "Error with Character Info " + err; + } + + try{ + console.log("Importing Attributes"); + var attributesChummer = chummerfile.characters.character.attributes[1].attribute; + attributes.bod_base = attributesChummer.find(a => a.name_english === "BOD").base; + attributes.agi_base = attributesChummer.find(a => a.name_english === "AGI").base; + attributes.rea_base = attributesChummer.find(a => a.name_english === "REA").base; + attributes.str_base = attributesChummer.find(a => a.name_english === "STR").base; + attributes.cha_base = attributesChummer.find(a => a.name_english === "CHA").base; + attributes.int_base = attributesChummer.find(a => a.name_english === "INT").base; + attributes.log_base = attributesChummer.find(a => a.name_english === "LOG").base; + attributes.wil_base = attributesChummer.find(a => a.name_english === "WIL").base; + attributes.edg_total = attributesChummer.find(a => a.name_english === "EDG").base; + if(chummerfile.characters.character.technomancer==="True"){ + attributes.mag_base=attributesChummer.find(a => a.name_english === "RES").total; + attributes.istechnomancer = 1; + } + else if(chummerfile.characters.character.magician==="True" || chummerfile.characters.character.adept==="True"){ + attributes.mag_base=attributesChummer.find(a => a.name_english === "MAG").total; + attributes.istechnomancer = 0; + } + else { + attributes.mag_base = 0; + attributes.istechnomancer = 0; + } + attributes.bod_aug = attributesChummer.find(a => a.name_english === "BOD").total-attributesChummer.find(a => a.name_english === "BOD").base; + attributes.agi_aug = attributesChummer.find(a => a.name_english === "AGI").total-attributesChummer.find(a => a.name_english === "AGI").base; + attributes.rea_aug = attributesChummer.find(a => a.name_english === "REA").total-attributesChummer.find(a => a.name_english === "REA").base; + attributes.str_aug = attributesChummer.find(a => a.name_english === "STR").total-attributesChummer.find(a => a.name_english === "STR").base; + attributes.cha_aug = attributesChummer.find(a => a.name_english === "CHA").total-attributesChummer.find(a => a.name_english === "CHA").base; + attributes.int_aug = attributesChummer.find(a => a.name_english === "INT").total-attributesChummer.find(a => a.name_english === "INT").base; + attributes.log_aug = attributesChummer.find(a => a.name_english === "LOG").total-attributesChummer.find(a => a.name_english === "LOG").base; + attributes.wil_aug = attributesChummer.find(a => a.name_english === "WIL").total-attributesChummer.find(a => a.name_english === "WIL").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 importSkillsTabChummer(experimental, chummerfile) { + + 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"); + for(var i=0;i 0){ + attributes["repeating_knowledge_"+newrowid+"_knowledgerating"] = chummerfile.characters.character.skills.skill[i].rating; + attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"] = chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; + }else{ + attributes["repeating_knowledge_"+newrowid+"_knowledgerating"] = "-1"; + attributes["repeating_knowledge_"+newrowid+"_knowledgebonus"] = chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; + } + if(chummerfile.characters.character.skills.skill[i].spec != null) { + attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = chummerfile.characters.character.skills.skill[i].spec; + } + else + attributes["repeating_knowledge_"+newrowid+"_knowledgespec"] = "none"; + } + + if(chummerfile.characters.character.skills.skill[i].exotic=="True"){ + attributes["skillname"+exotics]=chummerfile.characters.character.skills.skill[i].name_english; + if(chummerfile.characters.character.skills.skill[i].rating>0){ + attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; + attributes["skillrating"+exotics]=chummerfile.characters.character.skills.skill[i].rating; + }else{ + attributes["skillrating"+exotics]="-1"; + attributes["skillbonus"+exotics]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; + } + attributes["skillattr"+exotics]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); + + if(chummerfile.characters.character.skills.skill[i].spec != null) + attributes["skillspec"+exotics] = chummerfile.characters.character.skills.skill[i].spec; + else + attributes["skillspec"+exotics]="none"; + exotics++; + } + + for(var j=1;j<73;j++){ + var compname='skillname'+j; + if((names[compname]==chummerfile.characters.character.skills.skill[i].name_english)||(chummerfile.characters.character.skills.skill[i].name_english=="Locksmith"&&j==29)||(chummerfile.characters.character.skills.skill[i].name_english=="Pilot Ground Craft"&&j==55)){ + attributes["skillattr"+j]="@{"+chummerfile.characters.character.skills.skill[i].attribute.toLowerCase(); + if(chummerfile.characters.character.skills.skill[i].rating>0){ + attributes["skillrating"+j]=chummerfile.characters.character.skills.skill[i].rating; + attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod; + }else{ + attributes["skillrating"+j]="-1"; + attributes["skillbonus"+j]=chummerfile.characters.character.skills.skill[i].total-chummerfile.characters.character.skills.skill[i].rating-chummerfile.characters.character.skills.skill[i].attributemod+1; + } + + if(chummerfile.characters.character.skills.skill[i].spec != null) { + attributes["skillspec"+j] = chummerfile.characters.character.skills.skill[i].spec; + } + else { + attributes["skillspec"+j]="none"; + } + } + } + } + }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 importMagicTabChummer(experimental, chummerfile) { + + var goodcode = true; + var error = ""; + var attributes = {}; + + try{ + + var alchemy = 0; + var spellcasting = 0; + var ritual = 0; + + for(var i=0;i 1){ + for(var i=0; i < chummerfile.characters.character.spells.spell.length; i++){ + importSingleSpell(chummerfile.characters.character.spells.spell[i], attributes, spellcastingSkill, ritualSkill, alchemySkill); + } + }else{ + importSingleSpell(chummerfile.characters.character.spells.spell, attributes, spellcastingSkill, ritualSkill, alchemySkill); + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Spells: " + err; + } + + try{ + if(chummerfile.characters.character.complexforms != null){ + console.log("Importing complexforms"); + if(chummerfile.characters.character.complexforms.complexform.length>1){ + for(var i=0; i 1){ + for(var i=0; i < chummerfile.characters.character.critterpowers.critterpower.length; i++){ + var newrowid=generateRowID(); + attributes["repeating_critterpowers_"+newrowid+"_spellname"]=chummerfile.characters.character.critterpowers.critterpower[i].fullname; + attributes["repeating_critterpowers_"+newrowid+"_spelltype"]=chummerfile.characters.character.critterpowers.critterpower[i].type; + if(chummerfile.characters.character.critterpowers.critterpower[i].notes != null){ + attributes["repeating_critterpowers_"+newrowid+"_spelldescription"] = chummerfile.characters.character.critterpowers.critterpower[i].notes; + } + attributes["repeating_critterpowers_"+newrowid+"_spelldrain"]="-0"; + + attributes["repeating_critterpowers_"+newrowid+"_spellcategory"] = chummerfile.characters.character.critterpowers.critterpower[i].category; + attributes["repeating_critterpowers_"+newrowid+"_spellbonus"]=0; + + if(chummerfile.characters.character.critterpowers.critterpower[i].range != null){ + attributes["repeating_critterpowers_"+newrowid+"_spellrange"]=chummerfile.characters.character.critterpowers.critterpower[i].range; + } else { + attributes["repeating_critterpowers_"+newrowid+"_spellrange"]="N/A"; + } + + if(chummerfile.characters.character.critterpowers.critterpower[i].duration != null) { + attributes["repeating_critterpowers_"+newrowid+"_spellduration"] = chummerfile.characters.character.critterpowers.critterpower[i].duration; + } else { + attributes["repeating_critterpowers_"+newrowid+"_spellduration"] = "N/A"; + } + + } + }else{ + var newrowid=generateRowID(); + attributes["repeating_critterpowers_"+newrowid+"_spellname"]=chummerfile.characters.character.critterpowers.critterpower.fullname; + attributes["repeating_critterpowers_"+newrowid+"_spelltype"]=chummerfile.characters.character.critterpowers.critterpower.type; + if(chummerfile.characters.character.critterpowers.critterpower.notes!=null){ + attributes["repeating_critterpowers_"+newrowid+"_spelldescription"]=chummerfile.characters.character.critterpowers.critterpower.notes; + } + attributes["repeating_critterpowers_"+newrowid+"_spelldrain"]="-0"; + attributes["repeating_critterpowers_"+newrowid+"_spellcategory"]=chummerfile.characters.character.critterpowers.critterpower.category; + attributes["repeating_critterpowers_"+newrowid+"_spellbonus"]=0; + + if(chummerfile.characters.character.critterpowers.critterpower.range != null){ + attributes["repeating_critterpowers_"+newrowid+"_spellrange"]=chummerfile.characters.character.critterpowers.critterpower.range; + } else { + attributes["repeating_critterpowers_"+newrowid+"_spellrange"]="N/A"; + } + + if(chummerfile.characters.character.critterpowers.critterpower.duration != null) { + attributes["repeating_critterpowers_"+newrowid+"_spellduration"]=chummerfile.characters.character.critterpowers.critterpower.duration; + } else { + attributes["repeating_critterpowers_"+newrowid+"_spellduration"]="N/A"; + } + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Critterpowers: " + err; + } + + try{ + if(chummerfile.characters.character.initiategrade != null && chummerfile.characters.character.initiategrade != 0) { + console.log("Importing initiategrade and metamagic"); + attributes.initiationgrade = chummerfile.characters.character.initiategrade; + if(chummerfile.characters.character.metamagics != null){ + if(chummerfile.characters.character.metamagics.metamagic.length>1){ + for(var i=0;i1){ + for(var i=0;i1){ + for(var i=0;i 1){ + for(var i=0; i< chummerfile.characters.character.cyberwares.cyberware.length; i++){ + var newrowid=generateRowID(); + attributes["repeating_ware_"+newrowid+"_warename"]=chummerfile.characters.character.cyberwares.cyberware[i].name; + attributes["repeating_ware_"+newrowid+"_waredescription"]=chummerfile.characters.character.cyberwares.cyberware[i].rating; + attributes["repeating_ware_"+newrowid+"_waregrade"]=chummerfile.characters.character.cyberwares.cyberware[i].grade; + attributes["repeating_ware_"+newrowid+"_warekarma"]=chummerfile.characters.character.cyberwares.cyberware[i].ess; + essence += Number(chummerfile.characters.character.cyberwares.cyberware[i].ess.replace(",",".")); + } + }else{ + var newrowid=generateRowID(); + attributes["repeating_ware_"+newrowid+"_warename"]=chummerfile.characters.character.cyberwares.cyberware.name; + attributes["repeating_ware_"+newrowid+"_waredescription"]=chummerfile.characters.character.cyberwares.cyberware.rating; + attributes["repeating_ware_"+newrowid+"_waregrade"]=chummerfile.characters.character.cyberwares.cyberware.grade; + attributes["repeating_ware_"+newrowid+"_warekarma"]=chummerfile.characters.character.cyberwares.cyberware.ess; + essence+=Number(chummerfile.characters.character.cyberwares.cyberware.ess.replace(",",".")); + } + } + attributes.ess_total=6-essence; + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Ware " +err + } + + try{ + if(chummerfile.characters.character.martialarts != null){ + console.log("Importing martialarts"); + if(chummerfile.characters.character.martialarts.martialart.length>1){ + for(var i=0;i 1){ + for(var j=0; j < chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.length; j++){ + var newrowid=generateRowID(); + attributes["repeating_martial_"+newrowid+"_martialname"] = chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique[j].name; + attributes["repeating_martial_"+newrowid+"_martialdescription"] = chummerfile.characters.character.martialarts.martialart[i].name; + if(chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique[j].notes != undefined) { + attributes["repeating_martial_"+newrowid+"_martialnotes"] = chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique[j].notes; + } + } + }else{ + console.log(chummerfile.characters.character.martialarts.martialart[i]); + var newrowid=generateRowID(); + attributes["repeating_martial_"+newrowid+"_martialname"]=chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique.name; + attributes["repeating_martial_"+newrowid+"_martialdescription"]=chummerfile.characters.character.martialarts.martialart[i].name; + if(chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique.notes != undefined) { + attributes["repeating_martial_"+newrowid+"_martialnotes"] = chummerfile.characters.character.martialarts.martialart[i].martialarttechniques.martialarttechnique.notes; + } + } + } + } + }else{ + if(chummerfile.characters.character.martialarts.martialart.martialarttechniques != null){ + if(chummerfile.characters.character.martialarts.martialart.martialarttechniques.martialarttechnique.length>1){ + for(var j=0;j gear.category_english == "Cyberdecks" || gear.category_english == "Rigger Command Consoles").sort((g1,g2) => g1.devicerating < g2.devicerating); + if(decks.length > 0) { + cyberdeck = decks[0]; + attributes.attack_base = cyberdeck.attack; + attributes.sleaze_base = cyberdeck.sleaze; + attributes.datap_base = cyberdeck.dataprocessing; + attributes.firewall_base = cyberdeck.firewall; + attributes.devicertg_base = cyberdeck.devicerating; + } + else { + let commlinks = chummerfile.characters.character.gears.gear.filter(gear => gear.category_english == "Commlinks").sort((g1,g2) => g1.devicerating < g2.devicerating); + if(commlinks.length > 0) { + link = commlinks[0]; + attributes.attack_base = link.attack; + attributes.sleaze_base = link.sleaze; + attributes.datap_base = link.dataprocessing; + attributes.firewall_base = link.firewall; + attributes.devicertg_base = link.devicerating; + } + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Cyberdeck: " + err; + } + + try { + if(chummerfile.characters.character.aiprograms != null){ + console.log("Importing ai programs"); + if(chummerfile.characters.character.aiprograms.aiprogram.length > 1){ + for(var i=0; i < chummerfile.characters.character.aiprograms.aiprogram.length; i++){ + var newrowid=generateRowID(); + attributes["repeating_programs_"+newrowid+"_programname"]=chummerfile.characters.character.aiprograms.aiprogram[i].name; + } + } + else { + var newrowid=generateRowID(); + attributes["repeating_programs_"+newrowid+"_programname"] = chummerfile.characters.character.aiprograms.aiprogram.name; + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with AI programs " +err + } + + try{ + if(chummerfile.characters.character.gears != null){ + console.log("Importing programs"); + if(chummerfile.characters.character.gears.gear.length>1){ + for(var i=0;i 1){ + for(var j=0; j 1){ + let vehicles = chummerfile.characters.character.vehicles.vehicle.filter( vehicle => vehicle.seats > 0); + for(var i=0; i < vehicles.length; i++){ + importSingleVehicle(vehicles[i], attributes); + } + } else { + if(chummerfile.characters.character.vehicles.vehicle.seats > 0) { + importSingleVehicle(chummerfile.characters.character.vehicles.vehicle, attributes); + } + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Vehicles: " + err; + } + + try{ + if(chummerfile.characters.character.vehicles != null){ + console.log("Importing drones"); + if(chummerfile.characters.character.vehicles.vehicle.length > 1){ + let drones = chummerfile.characters.character.vehicles.vehicle.filter( vehicle => vehicle.seats == 0); + for(var i=0; i < drones.length; i++){ + importSingleDrone(drones[i], attributes); + } + } else { + if(chummerfile.characters.character.vehicles.vehicle.seats == 0) { + importSingleDrone(chummerfile.characters.character.vehicles.vehicle, attributes); + } + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Vehicles: " + err; + } + + if(goodcode){ + try{ + clearVehicles(experimental); + setAttrs(attributes); + return "Vehicles Tab import successfull\n"; + } catch(err){ + return "Error setting Attributes: " + err; + } + } else{ + return error; + } +} + +async function importEquipmentTabChummer(experimental, chummerfile) { + + var goodcode = true; + var error = ""; + var attributes = {}; + + if(chummerfile.characters.character.armors != null){ + console.log("Importing armors"); + if(chummerfile.characters.character.armors.armor.length > 1){ + chummerfile.characters.character.armors.armor.forEach(async(armor) => { + try{ + importSingleArmor(armor, attributes); + }catch(err){ + goodcode = false; + error= error + "\n" + "Error with Armor " + armor.name + ": " + err + } + }) + }else{ + try{ + importSingleArmor(chummerfile.characters.character.armors.armor, attributes); + }catch(err){ + goodcode = false; + error= error + "\n" + "Error with Armor " + chummerfile.characters.character.armors.armor.name + ": " + err + } + } + } + + if(chummerfile.characters.character.cyberwares != null){ + console.log("Importing Cyberware Armor"); + if(chummerfile.characters.character.cyberwares.cyberware.length > 1){ + chummerfile.characters.character.cyberwares.cyberware.forEach(cyberware => importCyberwareArmor(cyberware, attributes)); + }else{ + importCyberwareArmor(chummerfile.characters.character.cyberwares.cyberware, attributes); + } + } + + if(chummerfile.characters.character.otherarmors != null){ + console.log("Importing Other Armors"); + if(chummerfile.characters.character.otherarmors.otherarmor.length > 1){ + chummerfile.characters.character.otherarmors.otherarmor.forEach(armor => importOtherArmor(armor, attributes)); + }else{ + importOtherArmor(chummerfile.characters.character.otherarmors.otherarmor, attributes); + } + } + + if(chummerfile.characters.character.weapons != null){ + console.log("Importing weapons"); + for(var i=1; i<9; i++){ + attributes["weaponismelee"+i] = "on"; + attributes["weaponname"+i] = ""; + attributes["weaponcategory"+i] = "@{skilldicepool49}"; + attributes["weaponspec"+i] = "0"; + attributes["weaponbonus"+i] = "0"; + attributes["weaponaccuracy"+i] = "0"; + attributes["weapondv"+i] = "0"; + attributes["weapondmgtype"+i] = "P"; + attributes["weaponap"+i] = "0"; + attributes["weaponrc"+i] = "0"; + attributes["weaponmode"+i] = "11"; + attributes["weaponnotes"+i] = ""; + } + ammunition = []; + if(chummerfile.characters.character.gears != null) { + for( var j = 0; j < chummerfile.characters.character.gears.gear.length; j++) { + if(chummerfile.characters.character.gears.gear[j].category_english.includes("Ammunition") || + chummerfile.characters.character.gears.gear[j].name_english == "Micro Flares" + ){ + ammunition.push(chummerfile.characters.character.gears.gear[j]); + } + } + } + + //load agi + str for dice calculation + let charAttributes = await asw.getAttrs(["agi_base", "agi_aug", "str_base", "str_aug"]); + attributes = Object.assign(attributes, charAttributes); + + if(chummerfile.characters.character.weapons.weapon.length > 1){ + for(var i=1; i1){ + for(var i=0;i 0){ + name += " " + chummerfile.characters.character.gears.gear[i].rating; + } + attributes["repeating_equipment_"+newrowid+"_equipmentname"]=name; + attributes["repeating_equipment_"+newrowid+"_equipmentnumber"]=chummerfile.characters.character.gears.gear[i].qty ? chummerfile.characters.character.gears.gear[i].qty : 1; + if(chummerfile.characters.character.gears.gear[i].extra != null) { + attributes["repeating_equipment_"+newrowid+"_equipmentdescription"]=chummerfile.characters.character.gears.gear[i].extra; + } + attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]=""; + if(chummerfile.characters.character.gears.gear[i].children!=null){ + if(chummerfile.characters.character.gears.gear[i].children.gear.length>1){ + for(var j=0; j 0){ + note += " " + chummerfile.characters.character.gears.gear[i].children.gear[j].rating; + } + if(chummerfile.characters.character.gears.gear[i].children.gear[j].extra != null) { + note += " " + chummerfile.characters.character.gears.gear[i].children.gear[j].extra; + } + attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]+= note +"\n"; + } + } + }else{ + if(chummerfile.characters.character.gears.gear[i].children.gear.category_english !="Common Programs" && chummerfile.characters.character.gears.gear[i].children.gear.category_english !="Hacking Programs"){ + note = chummerfile.characters.character.gears.gear[i].children.gear.name; + if(chummerfile.characters.character.gears.gear[i].children.gear.rating > 0){ + note += " " + chummerfile.characters.character.gears.gear[i].children.gear.rating; + } + if(chummerfile.characters.character.gears.gear[i].children.gear.extra != null) { + note += " " + chummerfile.characters.character.gears.gear[i].children.gear.extra; + } + attributes["repeating_equipment_"+newrowid+"_equipmentnotes"]+= note +"\n"; + } + } + } + } + } + } + } + } + }catch(err){ + goodcode=false; + error= error + "\n" + "Error with Gear " +err + } + + if(goodcode){ + try{ + clearEquipment(experimental); + setAttrs(attributes); + return "Equipment Tab import successfull\n"; + } catch(err){ + return "Error setting Attributes: " + err; + } + } else{ + console.log(error); + return error; + } +} + +async function importSocialTabChummer(chummerfile) { + + var goodcode = true; + var error = ""; + var attributes = {}; + + try{ + if(chummerfile.characters.character.contacts != null){ + console.log("Importing Contacts"); + if(chummerfile.characters.character.contacts.contact.length>1){ + for(var i=0; i parseInt(a) + parseInt(b)); + } + } + + if(typeof weapon.accessories != "undefined"){ + if(weapon.accessories.accessory.length>1){ + for(var j=0; j1){ + //make clips unique + var clips = [...new Map(weapon.clips.clip.slice().reverse().map(v => [v.name, v])).values()].reverse() + + for(var j=0; j < clips.length; j++){ + + var newrowid=generateRowID(); + //find ammo to get stats + ammo = ammunition.find(clip => clip.guid === clips[j].id); + if(ammo != null) { + importRepeatingAmmo(ammo, number, attributes); + } + } + }else{ + var newrowid = generateRowID(); + //find ammo to get stats + ammo = ammunition.find(clip => clip.guid === weapon.clips.clip.id); + + if(ammo != null) { + importRepeatingAmmo(ammo, number, attributes); + } + } + } +} + +function importRepeatingAmmo(ammunition, number, attributes) { + + var newrowid = generateRowID(); + + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoname"] = ammo.name; + + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodv"] = ammo.weaponbonusdamage_english != null ? ammo.weaponbonusdamage_english.substring(0,2) : 0; + if(ammo.weaponbonusdamage_english != null) { + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodmgtype"] = ammo.weaponbonusdamage_english.substring(2); + } + + if(ammo.name_english === "Ammo: Stick-n-Shock") { + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = -5 - attributes["weaponap"+number] + } + else { + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = ammo.weaponbonusap != null? ammo.weaponbonusap : 0; + } + + if(ammo.name_english === "Arrow: Stick-n-Shock w/Static Shaft" || ammo.name_english === "Arrow: Stick-n-Shock") { + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = -5 - attributes["weaponap"+number]; + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodv"] = ammo.weaponbonusdamage_english.substring(0,2) - attributes["weapondv"+number]; + } + + attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoacc"] = ammo.weaponbonusacc != null ? ammo.weaponbonusacc : 0; +} + +function provideRepeatingWeaponRowName(weapon) { + + var weaponrow = "weapons"; + + switch(weapon.skill) { + case "Pistols": + weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); + break; + case "Automatics": + weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); + break; + case "Longarms": + weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); + break; + case "Heavy Weapons": + weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); + break; + case "Unarmed Combat": + weaponrow = "closecombat" + break; + case "Blades": + weaponrow = "closecombat" + break; + case "Clubs": + weaponrow = "closecombat" + break; + } + + var row = "repeating_" + weaponrow + "_" + generateRowID() + "_"; + + return row; +} + +async function importSingleRepeatingWeapon(weapon, ammunition, attributes) { + var row = provideRepeatingWeaponRowName(weapon); + if(weapon.type == "Ranged"){ + attributes[row + "weaponismelee"] = 0; + attributes[row + "weaponrc"] = weapon.rc.match(/\d+/g).pop()-Math.ceil((parseInt(attributes.str_base) + parseInt(attributes.str_aug))/3)- 1; + if(!weapon.rawdamage.includes("STR") && weapon.rawdamage.match(/\d+/) !== null) { + attributes[row + "weapondv"] = weapon.rawdamage.match(/\d+/)[0]; + } + else { + attributes[row + "weapondv"] = weapon.damage.match(/\d+/) != null ? weapon.damage.match(/\d+/)[0] : 0; + } + + attributes[row + "weapondmgtype"] = weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; + }else{ + attributes[row + "weaponismelee"] = "on"; + attributes[row + "weaponreach"] = weapon.reach; + attributes[row + "weapondv"] = weapon.damage_english.match(/\d+/) != null ? weapon.damage_english.match(/\d+/)[0] : 0; + attributes[row + "weapondmgtype"] = weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; + } + + let skills = []; + for(var i=43;i<52;i++) + { + var name = 'skillname'+i; + skills.push(name); + var rating = 'skillrating'+i; + skills.push(rating); + var bonus = 'skillbonus'+i; + skills.push(bonus); + var attr = 'skillattr_value'+i; + skills.push(attr); + } + skills = await asw.getAttrs(skills); + for(var i=43; i<52; i++) + { + var compname = 'skillname'+i; + var rating = 'skillrating'+i; + var bonus = 'skillbonus'+i; + var skillattr = 'skillattr_value'+i; + + if(skills[compname] == weapon.skill){ + attributes[row + "weaponcategory"] = "@{skilldicepool"+i+"}"; + let attribute = await asw.getAttrs([skillattr]); + let attrTotal = attribute[skillattr].replace(/[^a-zA-Z0-9_]/g, ""); + let attributeSum = await asw.getAttrs([attrTotal]); + let targetAttributes = attributeSum[attrTotal].replace(/[+]/g, ",").replace(/[^a-zA-Z0-9_,]/g, "").split(","); + let attributesValues = [attributes[targetAttributes[0]], attributes[targetAttributes[1]]] + attributes[row + "weaponbonus"] = weapon.dicepool - skills[rating] - skills[bonus] - attributesValues.reduce((a,b) => parseInt(a) + parseInt(b)); + } + } + + attributes[row + "weaponname"] = weapon.name; + attributes[row + "weaponaccuracy"] = weapon.accuracy.match(/\d+/g).pop(); + if(weapon.ap == null || isNaN(weapon.ap)){ + attributes[row + "weaponap"] = 0; + }else{ + attributes[row + "weaponap"] = weapon.ap; + if(weapon.rawap != null) { + attributes[row + "weaponap"] = weapon.rawap; + } + } + attributes[row + "weaponnotes"] = ""; + + if(typeof weapon.accessories != "undefined"){ + if(weapon.accessories.accessory.length>1){ + for(var j=0; j 1){ + let amountImported = 0; + //make clips unique + var clips = [...new Map(weapon.clips.clip.slice().reverse().map(v => [v.name, v])).values()].reverse() + + for(var j=0; j < clips.length && amountImported < 4; j++){ + + var newrowid=generateRowID(); + //find ammo to get stats + ammo = ammunition.find(clip => clip.guid === clips[j].id); + + if(ammo != null && !ammo.name_english.includes("Regular")) { + importRepeatingWeaponAmmo(row, ammo, amountImported, attributes); + amountImported++; + } + } + }else{ + var newrowid = generateRowID(); + //find ammo to get stats + ammo = ammunition.find(clip => clip.guid === weapon.clips.clip.id); + + if(ammo != null) { + importRepeatingWeaponAmmo(row, ammo, 0, attributes); + } + } + } +} + +function importRepeatingWeaponAmmo(row, ammunition, number, attributes) { + + attributes[row + "ammoname"+number] = ammo.name; + + attributes[row + "ammodv" + number] = ammo.weaponbonusdamage_english != null ? ammo.weaponbonusdamage_english.substring(0,2) : 0; + if(ammo.weaponbonusdamage_english != null) { + attributes[row + "ammodmgtype" + number] = ammo.weaponbonusdamage_english.substring(2); + } + + if(ammo.name_english === "Ammo: Stick-n-Shock") { + attributes[row + "ammoap" + number] = -5 - attributes[row + "weaponap"] + } + else { + attributes[row + "ammoap" + number] = ammo.weaponbonusap != null? ammo.weaponbonusap : 0; + } + + if(ammo.name_english === "Arrow: Stick-n-Shock w/Static Shaft" || ammo.name_english === "Arrow: Stick-n-Shock") { + attributes[row + "ammoap" + number] = -5 - attributes[row + "weaponap"] + attributes[row + "ammodv" + number] = ammo.weaponbonusdamage_english.substring(0,2) - attributes[row + "weapondv"] + } + + attributes[row + "ammoacc" + number] = ammo.weaponbonusacc != null ? ammo.weaponbonusacc : 0; +} + +async function importSingleArmor(armor, attributes) { + + if(armor.armor.includes("/")) { + var armorValueArray = armor.armor.toString().split("/"); + + var splitArmor = armor; + splitArmor.armor = armorValueArray[0]; + importSingleArmor(splitArmor, attributes); + + armor.armor = armorValueArray[1]; + } + + var newrowid = generateRowID() + attributes["repeating_armors_"+newrowid+"_armorname"] = armor.name; + if(armor.equipped == "True") { + attributes["repeating_armors_"+newrowid+"_armorworn"] = "on"; + } + attributes["repeating_armors_"+newrowid+"_armorrating"] = armor.armor; + attributes["repeating_armors_"+newrowid+"_armornotes"] = ""; + if(armor.armormods!=null){ + if(armor.armormods.armormod.length > 1){ + for(var j=0; j < armor.armormods.armormod.length; j++){ + if(Number(armor.armormods.armormod[j].rating) > 0){ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod[j].name + " " + armor.armormods.armormod[j].rating + "\n"; + }else{ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod[j].name + "\n"; + } + } + }else{ + if(Number(armor.armormods.armormod.rating)>0){ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod.name + " " + armor.armormods.armormod.rating + "\n"; + }else{ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.armormods.armormod.name + "\n"; + } + } + } + if(armor.gears!=null){ + if(armor.gears.gear.length > 1){ + for(var j=0; j < armor.gears.gear.length; j++){ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.gears.gear[j].name + "\n"; + } + }else{ + attributes["repeating_armors_"+newrowid+"_armornotes"] += armor.gears.gear.name + "\n"; + } + } +} + +async function importCyberwareArmor(cyberware, attributes) { + + var cyberwareEnhancements = []; + if(cyberware.children != null && cyberware.children.cyberware.length > 1) { + cyberwareEnhancements = cyberware.children.cyberware; + } + + cyberwareEnhancements.forEach(enhancement => importSingleCyberwareArmor(cyberware.name, enhancement, attributes)); +} + +function importSingleCyberwareArmor(parentname, cyberware, attributes) { + + if(cyberware.name_english === "Armor") { + var newrowid = generateRowID() + attributes["repeating_armors_"+newrowid+"_armorname"] = parentname; + attributes["repeating_armors_"+newrowid+"_armorworn"] = "on"; + attributes["repeating_armors_"+newrowid+"_armorrating"] = cyberware.rating; + attributes["repeating_armors_"+newrowid+"_armornotes"] = ""; + } +} + +function importOtherArmor(armor, attributes) { + var newrowid = generateRowID() + attributes["repeating_armors_"+newrowid+"_armorname"] = armor.objectname; + attributes["repeating_armors_"+newrowid+"_armorworn"] = "on"; + attributes["repeating_armors_"+newrowid+"_armorrating"] = armor.armor; + attributes["repeating_armors_"+newrowid+"_armornotes"] = armor.improvesource; +} + +async function importSingleSpell(spell, attributes, spellcasting, ritual, alchemy) { + var category = "spells"; + if(spell.category_english == "Rituals") { + category = "rituals" + } + else if(spell.alchemy == "True"){ + category = "alchemy" + } + + var row = "repeating_" + category + "_" + generateRowID(); + + attributes[row + "_spellname"] = spell.name; + attributes[row + "_spelltype"] = spell.type; + attributes[row + "_spellcategory"] = spell.category; + + attributes[row + "_spellrange"] = spell.range; + attributes[row + "_spellduration"] = spell.duration; + + if(spell.notes != null){ + attributes[row + "_spelldescription"] = spell.notes; + } + + if(spell.dv.match(/(\-|\+)\d/) != null) { + attributes[row + "_spelldrain"] = spell.dv.match(/(\-|\+)\d/)[0]; + } + else { + attributes[row + "_spelldrain"] = "-0"; + } + + if(spell.category_english == "Rituals"){ + attributes[row + "_spellschool"] = "@{skilldicepool67}"; + attributes[row + "_spelldrain"] = "*2"; + attributes[row + "_spellbonus"] = spell.dicepool - ritual; + } else { + attributes[row + "_spellbonus"] = spell.dicepool - spellcasting; + if(spell.alchemy == "True"){ + attributes[row + "_spellschool"] = "@{skilldicepool58}"; + attributes[row + "_spellbonus"] = spell.dicepool - alchemy; + } + } +} + +async function importSingleVehicle(vehicle, attributes) { + + var newrowid = generateRowID(); + attributes["repeating_vehicles_"+newrowid+"_vehiclename"]= vehicle.name; + attributes["repeating_vehicles_"+newrowid+"_vehiclehand"]= vehicle.handling.match(/\d+/).pop(); + attributes["repeating_vehicles_"+newrowid+"_vehiclespeed"]= vehicle.speed.match(/\d+/).pop(); + attributes["repeating_vehicles_"+newrowid+"_vehicleaccl"]= vehicle.accel.match(/\d+/).pop(); + attributes["repeating_vehicles_"+newrowid+"_vehiclepilot"]= vehicle.pilot; + attributes["repeating_vehicles_"+newrowid+"_vehiclesens"]= vehicle.sensor; + attributes["repeating_vehicles_"+newrowid+"_vehicleseats"]= vehicle.seats; + attributes["repeating_vehicles_"+newrowid+"_vehicleprice"]= vehicle.cost; + attributes["repeating_vehicles_"+newrowid+"_vehiclebody"]= vehicle.body; + attributes["repeating_vehicles_"+newrowid+"_vehiclearmor"]= vehicle.armor; + attributes["repeating_vehicles_"+newrowid+"_vehiclenotes"]=""; + + if(vehicle.mods != null){ + if(vehicle.mods.mod.length > 1){ + var weaponnumber = 1; + for(var j = 0; j < vehicle.mods.mod.length; j++){ + weaponnumber = importSingleVehicleMod(vehicle.mods.mod[j], newrowid, attributes, weaponnumber); + } + }else{ + attributes["repeating_vehicles_"+newrowid+"_vehiclenotes"] += vehicle.mods.mod.name + "\n"; + importSingleVehicleMod(vehicle.mods.mod, newrowid, attributes, weaponnumber); + } + } +} + +const importSingleVehicleMod = (mod, newrowid, attributes, weaponnumber) => { + attributes["repeating_vehicles_" + newrowid + "_vehiclenotes"] += mod.name + "\n"; + if(mod.weapons != null && mod.weapons.weapon != null){ + if(mod.weapons.length > 1){ + return importSingleVehicleWeapon(mod.weapons.weapon[0], newrowid, attributes, weaponnumber); + } + else { + return importSingleVehicleWeapon(mod.weapons.weapon, newrowid, attributes, weaponnumber); + } + } + return weaponnumber; +} + +const importSingleVehicleWeapon = (weapon, newrowid, attributes, weaponnumber) => { + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponname" + weaponnumber] = weapon.name; + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponaccuracy"+ weaponnumber] = weapon.accuracy.match(/\d+/g).pop(); + if(weapon.type == "Ranged") + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponrc"+ weaponnumber] = weapon.rc.match(/\d+/g).pop(); + if(Number(weapon.ap) != "NaN"){ + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponap"+ weaponnumber] = weapon.ap; + }else{ + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponap"+ weaponnumber] = 0; + } + attributes["repeating_vehicles_"+newrowid+"_vehicleweapondv"+ weaponnumber] = weapon.damage_english.match(/\d*/).pop(); + attributes["repeating_vehicles_"+newrowid+"_vehicleweapondmgtype"+ weaponnumber] = weapon.damage_english.match(/^\d*/).pop(); + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] = ""; + if(typeof weapon.accessories != "undefined"){ + if(weapon.accessories.accessory.length > 1){ + for(var h = 0; h < weapon.accessories.accessory.length; h++){ + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] += weapon.accessories.accessory[h].name+"\n"; + } + }else{ + attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] += weapon.accessories.accessory.name+"\n"; + } + } + return weaponnumber +1; +} + +async function importSingleDrone(drone, attributes) { + + var newrowid = generateRowID(); + attributes["repeating_drones_"+newrowid+"_dronename"]= drone.name; + attributes["repeating_drones_"+newrowid+"_dronehand"]= drone.handling.match(/\d+/).pop(); + attributes["repeating_drones_"+newrowid+"_dronespeed"]= drone.speed.match(/\d+/).pop(); + attributes["repeating_drones_"+newrowid+"_droneaccl"]= drone.accel.match(/\d+/).pop(); + attributes["repeating_drones_"+newrowid+"_dronepilot"]= drone.pilot; + attributes["repeating_drones_"+newrowid+"_dronesens"]= drone.sensor; + attributes["repeating_drones_"+newrowid+"_droneprice"]= drone.cost; + attributes["repeating_drones_"+newrowid+"_dronebody"]= drone.body; + attributes["repeating_drones_"+newrowid+"_dronearmor"]= drone.armor; + attributes["repeating_drones_"+newrowid+"_dronenotes"]=""; + + if(drone.gears != null) { + importAutosofts(drone, newrowid, attributes); + } + + if(drone.mods != null){ + if(drone.mods.mod.length > 1){ + var weaponnumber = 1; + for(var j = 0; j < drone.mods.mod.length; j++){ + weaponnumber = importSingleDroneMod(drone.mods.mod[j], newrowid, attributes, weaponnumber); + } + }else{ + attributes["repeating_drones_"+newrowid+"_dronenotes"] += drone.mods.mod.name + "\n"; + importSingleDroneMod(drone.mods.mod, newrowid, attributes, weaponnumber); + } + } +} + +const importSingleDroneMod = (mod, newrowid, attributes, weaponnumber) => { + attributes["repeating_drones_" + newrowid + "_dronenotes"] += mod.name + "\n"; + + if(mod.weapons != null && mod.weapons.weapon != null){ + if(mod.weapons.length > 1){ + return importSingleDroneWeapon(mod.weapons.weapon[0], newrowid, attributes, weaponnumber); + } + else { + return importSingleDroneWeapon(mod.weapons.weapon, newrowid, attributes, weaponnumber); + } + } + return weaponnumber; +} + +const importSingleDroneWeapon = (weapon, newrowid, attributes, weaponnumber) => { + attributes["repeating_drones_"+newrowid+"_droneweaponname" + weaponnumber] = weapon.name; + attributes["repeating_drones_"+newrowid+"_droneweaponaccuracy"+ weaponnumber] = weapon.accuracy.match(/\d+/g).pop(); + if(weapon.type == "Ranged") + attributes["repeating_drones_"+newrowid+"_droneweaponrc"+ weaponnumber] = weapon.rc.match(/\d+/g).pop(); + if(Number(weapon.ap) != "NaN"){ + attributes["repeating_drones_"+newrowid+"_droneweaponap"+ weaponnumber] = weapon.ap; + }else{ + attributes["repeating_drones_"+newrowid+"_droneweaponap"+ weaponnumber] = 0; + } + attributes["repeating_drones_"+newrowid+"_droneweapondv"+ weaponnumber] = weapon.damage_english.match(/\d*/).pop(); + attributes["repeating_drones_"+newrowid+"_droneweapondmgtype"+ weaponnumber] = weapon.damage_english.match(/^\d*/).pop(); + attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] = ""; + if(typeof weapon.accessories != "undefined"){ + if(weapon.accessories.accessory.length > 1){ + for(var h = 0; h < weapon.accessories.accessory.length; h++){ + attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] += weapon.accessories.accessory[h].name+"\n"; + } + }else{ + attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] += weapon.accessories.accessory.name+"\n"; + } + } + return weaponnumber +1; +} + +const importAutosofts = (drone, newrowid, attributes) => { + + let autosofts; + if(drone.gears.gear.length > 1) { + autosofts = drone.gears.gear.filter(gear => gear.category_english.includes("Autosofts")); + } + else { + if(drone.gears.gear.category_english == "Autosofts") { + autosofts = [drone.gears.gear]; + } + } + + if(autosofts != null) { + //search for clearsight + let clearsight = autosofts.find(soft => soft.name_english.includes("Clearsight Autosoft")); + if(clearsight != null) { + attributes["repeating_drones_"+newrowid+"_droneperceptionsoft"] = clearsight.rating; + } + + //Maneuvering + let maneuvering = autosofts.find(soft => soft.name_english.includes("Maneuvering Autosoft")); + if(maneuvering != null) { + attributes["repeating_drones_"+newrowid+"_dronemaneuversoft"] = maneuvering.rating; + } + + //stealth + let stealth = autosofts.find(soft => soft.name_english.includes("Stealth Autosoft")); + if(stealth != null) { + attributes["repeating_drones_"+newrowid+"_dronesneaksoft"] = stealth.rating; + } + + //evasion + let evasion = autosofts.find(soft => soft.name_english.includes("Evasion Autosoft")); + if(evasion != null) { + attributes["repeating_drones_"+newrowid+"_dronedodgesoft"] = evasion.rating; + } + } + +} \ No newline at end of file diff --git a/Shadowrun5th/js/importHeroLab/importHeroLab.js b/Shadowrun5th/js/importHeroLab/importHeroLab.js new file mode 100644 index 0000000000..52e4295c86 --- /dev/null +++ b/Shadowrun5th/js/importHeroLab/importHeroLab.js @@ -0,0 +1,411 @@ +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; + } +} \ No newline at end of file diff --git a/Shadowrun5th/js/importSingleDrone.js b/Shadowrun5th/js/importSingleDrone.js deleted file mode 100644 index 790fbb8ad4..0000000000 --- a/Shadowrun5th/js/importSingleDrone.js +++ /dev/null @@ -1,103 +0,0 @@ -function importSingleDrone(drone, attributes) { - - var newrowid = generateRowID(); - attributes["repeating_drones_"+newrowid+"_dronename"]= drone.name; - attributes["repeating_drones_"+newrowid+"_dronehand"]= drone.handling.match(/\d+/); - attributes["repeating_drones_"+newrowid+"_dronespeed"]= drone.speed.match(/\d+/); - attributes["repeating_drones_"+newrowid+"_droneaccl"]= drone.accel.match(/\d+/); - attributes["repeating_drones_"+newrowid+"_dronepilot"]= drone.pilot; - attributes["repeating_drones_"+newrowid+"_dronesens"]= drone.sensor; - attributes["repeating_drones_"+newrowid+"_droneprice"]= drone.cost; - attributes["repeating_drones_"+newrowid+"_dronebody"]= drone.body; - attributes["repeating_drones_"+newrowid+"_dronearmor"]= drone.armor; - attributes["repeating_drones_"+newrowid+"_dronenotes"]=""; - - if(drone.mods != null){ - if(drone.mods.mod.length > 1){ - var weaponnumber = 1; - for(var j = 0; j < drone.mods.mod.length; j++){ - weaponnumber = importSingleDroneMod(drone.mods.mod[j], newrowid, attributes, weaponnumber); - } - }else{ - attributes["repeating_drones_"+newrowid+"_dronenotes"] += drone.mods.mod.name + "\n"; - importSingleDroneMod(drone.mods.mod, newrowid, attributes, weaponnumber); - } - } -} - -const importSingleDroneMod = (mod, newrowid, attributes, weaponnumber) => { - attributes["repeating_drones_" + newrowid + "_dronenotes"] += mod.name + "\n"; - if(mod.weapons != null && mod.weapons.weapon != null){ - if(mod.weapons.length > 1){ - return importSingleDroneWeapon(mod.weapons.weapon[0], newrowid, attributes, weaponnumber); - } - else { - return importSingleDroneWeapon(mod.weapons.weapon, newrowid, attributes, weaponnumber); - } - } - return weaponnumber; -} - -const importSingleDroneWeapon = (weapon, newrowid, attributes, weaponnumber) => { - attributes["repeating_drones_"+newrowid+"_droneweaponname" + weaponnumber] = weapon.name; - attributes["repeating_drones_"+newrowid+"_droneweaponaccuracy"+ weaponnumber] = weapon.accuracy.match(/\d+/g).pop(); - if(weapon.type == "Ranged") - attributes["repeating_drones_"+newrowid+"_droneweaponrc"+ weaponnumber] = weapon.rc.match(/\d+/g).pop(); - if(Number(weapon.ap) != "NaN"){ - attributes["repeating_drones_"+newrowid+"_droneweaponap"+ weaponnumber] = weapon.ap; - }else{ - attributes["repeating_drones_"+newrowid+"_droneweaponap"+ weaponnumber] = 0; - } - attributes["repeating_drones_"+newrowid+"_droneweapondv"+ weaponnumber] = weapon.damage_english.match(/\d*/); - attributes["repeating_drones_"+newrowid+"_droneweapondmgtype"+ weaponnumber] = weapon.damage_english.match(/^\d*/); - attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] = ""; - if(typeof weapon.accessories != "undefined"){ - if(weapon.accessories.accessory.length > 1){ - for(var h = 0; h < weapon.accessories.accessory.length; h++){ - attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] += weapon.accessories.accessory[h].name+"\n"; - } - }else{ - attributes["repeating_drones_"+newrowid+"_droneweaponnotes"+ weaponnumber] += weapon.accessories.accessory.name+"\n"; - } - } - return weaponnumber +1; -} -const importAutosofts = (drone, newrowid, attributes) => { - - let autosofts; - if(drone.gears.gear.length > 1) { - autosofts = drone.gears.gear.filter(gear => gear.category_english.includes("Autosofts")); - } - else { - if(drone.gears.gear.category_english == "Autosofts") { - autosofts = [drone.gears.gear]; - } - } - - if(autosofts != null) { - //search for clearsight - let clearsight = autosofts.find(soft => soft.name_english.includes("Clearsight Autosoft")); - if(clearsight != null) { - attributes["repeating_drones_"+newrowid+"_droneperceptionsoft"] = clearsight.rating; - } - - //Maneuvering - let maneuvering = autosofts.find(soft => soft.name_english.includes("Maneuvering Autosoft")); - if(maneuvering != null) { - attributes["repeating_drones_"+newrowid+"_dronemaneuversoft"] = maneuvering.rating; - } - - //stealth - let stealth = autosofts.find(soft => soft.name_english.includes("Stealth Autosoft")); - if(stealth != null) { - attributes["repeating_drones_"+newrowid+"_dronesneaksoft"] = stealth.rating; - } - - //evasion - let evasion = autosofts.find(soft => soft.name_english.includes("Evasion Autosoft")); - if(evasion != null) { - attributes["repeating_drones_"+newrowid+"_dronedodgesoft"] = evasion.rating; - } - } - -} \ No newline at end of file diff --git a/Shadowrun5th/js/importSingleRepeatingWeapon.js b/Shadowrun5th/js/importSingleRepeatingWeapon.js deleted file mode 100644 index bd0fd0a731..0000000000 --- a/Shadowrun5th/js/importSingleRepeatingWeapon.js +++ /dev/null @@ -1,155 +0,0 @@ -function provideRepeatingWeaponRowName(weapon) { - - var weaponrow = "weapons"; - - switch(weapon.skill) { - case "Pistols": - weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); - break; - case "Automatics": - weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); - break; - case "Longarms": - weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); - break; - case "Heavy Weapons": - weaponrow = weapon.skill.replaceAll(' ', '').toLowerCase(); - break; - case "Unarmed Combat": - weaponrow = "closecombat" - break; - case "Blades": - weaponrow = "closecombat" - break; - case "Clubs": - weaponrow = "closecombat" - break; - } - - var row = "repeating_" + weaponrow + "_" + generateRowID() + "_"; - - return row; -} - -async function importSingleRepeatingWeapon(text, weapon, ammunition, attributes) { - var row = provideRepeatingWeaponRowName(weapon); - console.log(row); - if(weapon.type == "Ranged"){ - attributes[row + "weaponismelee"] = 0; - attributes[row + "weaponrc"] = weapon.rc.match(/\d+/g).pop()-Math.ceil((parseInt(attributes.str_base) + parseInt(attributes.str_aug))/3)- 1; - if(!weapon.rawdamage.includes("STR") && weapon.rawdamage.match(/\d+/) !== null) { - attributes[row + "weapondv"] = weapon.rawdamage.match(/\d+/)[0]; - } - else { - attributes[row + "weapondv"] = weapon.damage.match(/\d+/) != null ? weapon.damage.match(/\d+/)[0] : 0; - } - - attributes[row + "weapondmgtype"] = weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; - }else{ - attributes[row + "weaponismelee"] = "on"; - attributes[row + "weaponreach"] = weapon.reach; - attributes[row + "weapondv"] = weapon.damage_english.match(/\d+/) != null ? weapon.damage_english.match(/\d+/)[0] : 0; - attributes[row + "weapondmgtype"] = weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; - } - - let skills = []; - for(var i=43;i<52;i++) - { - var name = 'skillname'+i; - skills.push(name); - var rating = 'skillrating'+i; - skills.push(rating); - var bonus = 'skillbonus'+i; - skills.push(bonus); - var attr = 'skillattr_value'+i; - skills.push(attr); - } - skills = await asw.getAttrs(skills); - for(var i=43; i<52; i++) - { - var compname = 'skillname'+i; - var rating = 'skillrating'+i; - var bonus = 'skillbonus'+i; - var skillattr = 'skillattr_value'+i; - - if(skills[compname] == weapon.skill){ - attributes[row + "weaponcategory"] = "@{skilldicepool"+i+"}"; - let attribute = await asw.getAttrs([skillattr]); - let attrTotal = attribute[skillattr].replace(/[^a-zA-Z0-9_]/g, ""); - let attributeSum = await asw.getAttrs([attrTotal]); - let targetAttributes = attributeSum[attrTotal].replace(/[+]/g, ",").replace(/[^a-zA-Z0-9_,]/g, "").split(","); - let attributesValues = [attributes[targetAttributes[0]], attributes[targetAttributes[1]]] - attributes[row + "weaponbonus"] = weapon.dicepool - skills[rating] - skills[bonus] - attributesValues.reduce((a,b) => parseInt(a) + parseInt(b)); - } - } - - attributes[row + "weaponname"] = weapon.name; - attributes[row + "weaponaccuracy"] = weapon.accuracy.match(/\d+/g).pop(); - if(weapon.ap == null || isNaN(weapon.ap)){ - attributes[row + "weaponap"] = 0; - }else{ - attributes[row + "weaponap"] = weapon.ap; - if(weapon.rawap != null) { - attributes[row + "weaponap"] = weapon.rawap; - } - } - attributes[row + "weaponnotes"] = ""; - - if(typeof weapon.accessories != "undefined"){ - if(weapon.accessories.accessory.length>1){ - for(var j=0; j 1){ - let amountImported = 0; - for(var j=0; j < weapon.clips.clip.length && amountImported < 4; j++){ - - if(weapon.clips.clip[j].location === "loaded") { - //skip loaded, they will be found later anyway - continue; - } - - var newrowid=generateRowID(); - //find ammo to get stats - ammo = ammunition.find(clip => clip.guid === weapon.clips.clip[j].id); - - if(ammo != null && !ammo.name_english.includes("Regular")) { - importRepeatingWeaponAmmo(row, ammo, amountImported, attributes); - amountImported++; - } - } - }else{ - var newrowid = generateRowID(); - //find ammo to get stats - ammo = ammunition.find(clip => clip.guid === weapon.clips.clip.id); - - if(ammo != null) { - importRepeatingWeaponAmmo(row, ammo, 0, attributes); - } - } - } -} - -async function importRepeatingWeaponAmmo(row, ammunition, number, attributes) { - - attributes[row + "ammoname"+number] = ammo.name; - - attributes[row + "ammodv" + number] = ammo.weaponbonusdamage_english != null ? ammo.weaponbonusdamage_english.substring(0,2) : 0; - if(ammo.weaponbonusdamage_english != null) { - attributes[row + "ammodmgtype" + number] = ammo.weaponbonusdamage_english.substring(2); - } - - if(ammo.name_english === "Ammo: Stick-n-Shock") { - attributes[row + "_ammoap" + number] = -5 - attributes[row + "weaponap"] - } - else { - attributes[row + "ammoap" + number] = ammo.weaponbonusap != null? ammo.weaponbonusap : 0; - } - attributes[row + "ammoacc" + number] = ammo.weaponbonusacc != null ? ammo.weaponbonusacc : 0; -} \ No newline at end of file diff --git a/Shadowrun5th/js/importSingleSpell.js b/Shadowrun5th/js/importSingleSpell.js deleted file mode 100644 index e221a2d234..0000000000 --- a/Shadowrun5th/js/importSingleSpell.js +++ /dev/null @@ -1,40 +0,0 @@ -function importSingleSpell(spell, attributes, spellcasting, ritual, alchemy) { - var category = "spells"; - if(spell.category_english == "Rituals") { - category = "rituals" - } - if(spell.alchemy == "True"){ - category = "alchemy" - } - - var row = "repeating_" + category + "_" + generateRowID(); - - attributes[row + "_spellname"] = spell.name; - attributes[row + "_spelltype"] = spell.type; - attributes[row + "_spellcategory"] = spell.category; - if(spell.notes != null){ - attributes[row + "_spelldescription"] = spell.notes; - } - if(spell.dv.match(/(\-|\+)\d/) != null) { - attributes[row + "_spelldrain"] = spell.dv.match(/(\-|\+)\d/)[0]; - } - else { - attributes[row + "_spelldrain"] = "-0"; - } - - - if(spell.category_english == "Rituals"){ - attributes[row + "_spellschool"] = "@{skilldicepool67}"; - attributes[row + "_spelldrain"] = "*2"; - attributes[row + "_spellbonus"] = spell.dicepool - ritual; - } else { - attributes[row + "_spellbonus"] = spell.dicepool - spellcasting; - if(spell.alchemy == "True"){ - attributes[row + "_spellschool"] = "@{skilldicepool58}"; - attributes[row + "_spellbonus"] = spell.dicepool - alchemy; - } - } - - attributes[row + "_spellrange"] = spell.range; - attributes[row + "_spellduration"] = spell.duration; -} \ No newline at end of file diff --git a/Shadowrun5th/js/importSingleVehicle.js b/Shadowrun5th/js/importSingleVehicle.js deleted file mode 100644 index e799f829d2..0000000000 --- a/Shadowrun5th/js/importSingleVehicle.js +++ /dev/null @@ -1,65 +0,0 @@ -function importSingleVehicle(vehicle, attributes) { - - var newrowid = generateRowID(); - attributes["repeating_vehicles_"+newrowid+"_vehiclename"]= vehicle.name; - attributes["repeating_vehicles_"+newrowid+"_vehiclehand"]= vehicle.handling.match(/\d+/); - attributes["repeating_vehicles_"+newrowid+"_vehiclespeed"]= vehicle.speed.match(/\d+/); - attributes["repeating_vehicles_"+newrowid+"_vehicleaccl"]= vehicle.accel.match(/\d+/); - attributes["repeating_vehicles_"+newrowid+"_vehiclepilot"]= vehicle.pilot; - attributes["repeating_vehicles_"+newrowid+"_vehiclesens"]= vehicle.sensor; - attributes["repeating_vehicles_"+newrowid+"_vehicleseats"]= vehicle.seats; - attributes["repeating_vehicles_"+newrowid+"_vehicleprice"]= vehicle.cost; - attributes["repeating_vehicles_"+newrowid+"_vehiclebody"]= vehicle.body; - attributes["repeating_vehicles_"+newrowid+"_vehiclearmor"]= vehicle.armor; - attributes["repeating_vehicles_"+newrowid+"_vehiclenotes"]=""; - - if(vehicle.mods != null){ - if(vehicle.mods.mod.length > 1){ - var weaponnumber = 1; - for(var j = 0; j < vehicle.mods.mod.length; j++){ - weaponnumber = importSingleVehicleMod(vehicle.mods.mod[j], newrowid, attributes, weaponnumber); - } - }else{ - attributes["repeating_vehicles_"+newrowid+"_vehiclenotes"] += vehicle.mods.mod.name + "\n"; - importSingleVehicleMod(vehicle.mods.mod, newrowid, attributes, weaponnumber); - } - } -} - -const importSingleVehicleMod = (mod, newrowid, attributes, weaponnumber) => { - attributes["repeating_vehicles_" + newrowid + "_vehiclenotes"] += mod.name + "\n"; - if(mod.weapons != null && mod.weapons.weapon != null){ - if(mod.weapons.length > 1){ - return importSingleVehicleWeapon(mod.weapons.weapon[0], newrowid, attributes, weaponnumber); - } - else { - return importSingleVehicleWeapon(mod.weapons.weapon, newrowid, attributes, weaponnumber); - } - } - return weaponnumber; -} - -const importSingleVehicleWeapon = (weapon, newrowid, attributes, weaponnumber) => { - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponname" + weaponnumber] = weapon.name; - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponaccuracy"+ weaponnumber] = weapon.accuracy.match(/\d+/g).pop(); - if(weapon.type == "Ranged") - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponrc"+ weaponnumber] = weapon.rc.match(/\d+/g).pop(); - if(Number(weapon.ap) != "NaN"){ - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponap"+ weaponnumber] = weapon.ap; - }else{ - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponap"+ weaponnumber] = 0; - } - attributes["repeating_vehicles_"+newrowid+"_vehicleweapondv"+ weaponnumber] = weapon.damage_english.match(/\d*/); - attributes["repeating_vehicles_"+newrowid+"_vehicleweapondmgtype"+ weaponnumber] = weapon.damage_english.match(/^\d*/); - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] = ""; - if(typeof weapon.accessories != "undefined"){ - if(weapon.accessories.accessory.length > 1){ - for(var h = 0; h < weapon.accessories.accessory.length; h++){ - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] += weapon.accessories.accessory[h].name+"\n"; - } - }else{ - attributes["repeating_vehicles_"+newrowid+"_vehicleweaponnotes"+ weaponnumber] += weapon.accessories.accessory.name+"\n"; - } - } - return weaponnumber +1; -} \ No newline at end of file diff --git a/Shadowrun5th/js/importSingleWeapon.js b/Shadowrun5th/js/importSingleWeapon.js deleted file mode 100644 index 6ae3fa166c..0000000000 --- a/Shadowrun5th/js/importSingleWeapon.js +++ /dev/null @@ -1,102 +0,0 @@ -function importSingleWeapon(text, weapon, number, ammunition, attributes) { - if(weapon.type == "Ranged"){ - attributes["weaponismelee"+number] = 0; - attributes["weaponrc"+number] = weapon.rc.match(/\d+/g).pop()-Math.ceil((parseInt(attributes.str_base) + parseInt(attributes.str_aug))/3)- 1; - - if(weapon.rawdamage.match(/\d+/) !== null && !weapon.rawdamage.includes("STR")) { - attributes["weapondv"+number] = weapon.rawdamage.match(/\d+/)[0]; - } - else if(weapon.rawdamage.includes("STR")) { - attributes["weapondv"+number] = weapon.damage.match(/\d+/)[0]; - } - else { - attributes["weapondv"+number] = weapon.damage.match(/\d+/) != null ? weapon.damage.match(/\d+/)[0] : 0; - } - - attributes["weapondmgtype"+number] = weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.rawdamage.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; - }else{ - attributes["weaponismelee"+number] = "on"; - attributes["weaponreach"+number] = weapon.reach; - attributes["weapondv"+number] = weapon.damage_english.match(/\d+/)[0]; - attributes["weapondmgtype"+number] = weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/) != null ? weapon.damage_english.match(/S\(e\)|S\b|P|Special\b/)[0] : 0; - } - - attributes["weaponname"+number] = weapon.name; - attributes["weaponaccuracy"+number] = weapon.accuracy.match(/\d+/g).pop(); - if(isNaN(weapon.ap)){ - attributes["weaponap"+number] = 0; - }else{ - attributes["weaponap"+number] = weapon.ap; - if(weapon.rawap != null) { - attributes["weaponap"+number] = weapon.rawap; - } - } - attributes["weaponnotes"+number] = ""; - - if(typeof weapon.accessories != "undefined"){ - if(weapon.accessories.accessory.length>1){ - for(var j=0; j1){ - for(var j=0; j clip.guid === weapon.clips.clip[j].id); - if(ammo != null) { - importRepeatingAmmo(ammo, number, attributes); - } - } - }else{ - var newrowid = generateRowID(); - //find ammo to get stats - ammo = ammunition.find(clip => clip.guid === weapon.clips.clip.id); - - if(ammo != null) { - importRepeatingAmmo(ammo, number, attributes); - } - } - } -} - -function importRepeatingAmmo(ammunition, number, attributes) { - - var newrowid = generateRowID(); - - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoname"] = ammo.name; - - if(ammo.weaponbonusdamage_english != null && ammo.weaponbonusap != null && ammo.weaponbonusacc != null) { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodv"] = ammo.weaponbonusdamage_english.substring(0,2); - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodmgtype"] = ammo.weaponbonusdamage_english.substring(2); - if(ammo.name_english === "Ammo: Stick-n-Shock") { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = -5 - attributes["weaponap" + number] - } - else { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = ammo.weaponbonusap; - } - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoacc"] = ammo.weaponbonusacc; - } - else { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodv"] = 0; - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammodmgtype"] = 0; - if(ammo.name_english === "Ammo: Stick-n-Shock") { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = -5 - attributes["weaponap" + number] - } - else { - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoap"] = 0; - } - attributes["repeating_ammotype"+number+"_"+newrowid+"_ammoacc"] = 0; - } -} \ No newline at end of file diff --git a/Shadowrun5th/js/initAndMigrateSheet.js b/Shadowrun5th/js/initAndMigrateSheet.js deleted file mode 100644 index 98a2307be5..0000000000 --- a/Shadowrun5th/js/initAndMigrateSheet.js +++ /dev/null @@ -1,106 +0,0 @@ -on("sheet:opened", function() { - var names=[]; - for(var i=1; i<77; i++) - { - var name='skillspec'+i; - names[i-1]=name; - } - getAttrs(names, function(values) { - for(var prop in values) - { - if(values[prop]=="0") - { - values[prop]="none"; - } - } - values.warningcheckbox=0; - values.chummercheckbox=0; - values.chummertext="In Chummer make sure to mark your character as created\nwith a created character go to File->Export->Export JSON\ncopy the file and paste it into this textfield overriding this text\nclick import and accept\nWhen using Chummer 5.213.95 or later the import is language independent\nIf you find bugs, please report them at https://github.com/Roll20/roll20-character-sheets/issues"; - values.experimental=0; - values.nightly=0; - setAttrs(values); - }); - - var armors=[]; - for(var i=1; i <9; i++) { - armors.push('armorname'+i); - armors.push('armorcapacity'+i); - armors.push('armornotes'+i); - armors.push('armorrating'+i); - } - armors.push('armormigration042021'); - getAttrs(armors, function(values) { - var attributes={}; - keys = Object.keys(values); - - if(values.armormigration042021){ - return; - } - - if(keys.includes('armorname1') && values.armorname1 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname1; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating1 ? values.armorrating1 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes1 ? values.armornotes1 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity1 ? values.armorcapacity1 : "0"; - } - - if(keys.includes('armorname2') && values.armorname2 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname2; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating2 ? values.armorrating2 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes2 ? values.armornotes2 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity2 ? values.armorcapacity2 : "0"; - } - - if(keys.includes('armorname3') && values.armorname3 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname3; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating3 ? values.armorrating3 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes3 ? values.armornotes3 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity3 ? values.armorcapacity3 : "0"; - } - - if(keys.includes('armorname4') && values.armorname4 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname4; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating4 ? values.armorrating4 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes4 ? values.armornotes4 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity4 ? values.armorcapacity4 : "0"; - } - - if(keys.includes('armorname5') && values.armorname5 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname5; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating5 ? values.armorrating5 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes5 ? values.armornotes5 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity5 ? values.armorcapacity5 : "0"; - } - - if(keys.includes('armorname6') && values.armorname6 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname6; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating6 ? values.armorrating6 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes6 ? values.armornotes6 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity6 ? values.armorcapacity6 : "0"; - } - - if(keys.includes('armorname7') && values.armorname7 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname7; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating7 ? values.armorrating7 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes7 ? values.armornotes7 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity7 ? values.armorcapacity7 : "0"; - } - - if(keys.includes('armorname8') && values.armorname8 !== null) { - var newrowid=generateRowID() - attributes["repeating_armors_"+newrowid+"_armorname"]=values.armorname8; - attributes["repeating_armors_"+newrowid+"_armorrating"]=!!values.armorrating8 ? values.armorrating8 : "0"; - attributes["repeating_armors_"+newrowid+"_armornotes"]=!!values.armornotes8 ? values.armornotes8 : ""; - attributes["repeating_armors_"+newrowid+"_armorcapacity"]=!!values.armorcapacity8 ? values.armorcapacity8 : "0"; - } - attributes["armormigration042021"] = true; - setAttrs(attributes); - }); -}); \ No newline at end of file