Unfortunately you do not have enough open slots in your HeroVau.lt to export this PC. Please upgrade your account or delete a PC from your account to free up some space.
',new Dialog({title:"Export to your HeroVau.lt",content:bdy,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0)):(0",label:"Export to HeroVau.lt as New PC",callback:()=>exportNewPC=!0}},bdy+="
You can export this character as a new PC, taking up a slot on your account. (Note: if the same exact copy of this character exists on your account, it will be overwritten)
"):bdy+="
You do not have enough free slots to export this character as a new PC.
",canOverwrite&&(bdy+="
Since this character already exists in your vault, you can overwrite that character with this character.
",menuButtons={...menuButtons,exportOverwrite:{icon:"",label:"Export to HeroVau.lt overwriting existing PC",callback:()=>exportOverwritePC=!0}}),menuButtons={...menuButtons,no:{icon:"",label:"Cancel"}},bdy+=`
Please choose an action to perform:
`,new Dialog({title:"Export to your HeroVau.lt",content:bdy,buttons:menuButtons,default:"exportNew",close:async html=>{if(exportNewPC){hvUID="";var exportStatus=await exportPCtoHV(targetActor,hvUserToken,hvUID,!0,portraitAddress,tokenAddress);1==exportStatus.error?ui.notifications.error("Error exporting: "+exportStatus.message):(targetActor.update({"flags.herovault.uid":exportStatus.charhash}),ui.notifications.info(exportStatus.message))}else if(exportOverwritePC){hvDebug.enabled&&console.log("export overwrite PC");let exportStatus=await exportPCtoHV(targetActor,hvUserTokenHashed,hvUID,!1,portraitAddress,tokenAddress);1==exportStatus.error?ui.notifications.error("Error exporting: "+exportStatus.message):(targetActor.update({"flags.herovault.uid":exportStatus.charhash}),ui.notifications.info(exportStatus.message))}}}).render(!0))}catch(e){console.log(e)}}"https:"!==location.protocol&&(heroVaultURL="http://herovau.lt"),Hooks.on("ready",async function(){console.log("%cHeroVau.lt/Foundry Bridge | %cinitializing",hvColor1,hvColor4),"https:"!==location.protocol&&(game.user.isGM&&ui.notifications.info("GM: Please set your server to use HTTPS. For instructions see (coming soon)."),ui.notifications.info("HeroVau.lt using insecure HTTP mode.")),Cookie.get("hvut")&&(game.settings.set("herovaultfoundry","userToken",Cookie.get("hvut")),hvUserToken=game.settings.get("herovaultfoundry","userToken"),Cookie.set("hvut","",-1)),Cookie.get("herovault_skiptoken")&&(skipTokenPrompt=Cookie.get("herovault_skiptoken"),game.settings.set("herovaultfoundry","userToken",skipTokenPrompt),Cookie.set("herovault_skiptoken","",-1)),game.settings.register("herovaultfoundry","userToken",{name:"HeroVau.lt User Token",hint:"Please enter your personal user token from "+heroVaultURL+". Your HeroVau.lt token allows you to import and export PCs directly into your HeroVau.lt account. This is not required to use the Pathbuilder or HeroLab Online features.",scope:"client",config:!0,type:String,default:hvUserToken,onChange:value=>hvUserToken=game.settings.get("herovaultfoundry","userToken")}),game.settings.register("herovaultfoundry","hlouserToken",{name:"HeroLab Online User Token (optional)",hint:"Please enter your personal user token. A user token allows external tools (like HeroVau.lt) to access the HLO server and perform export operations.",scope:"client",config:!0,type:String,default:"",onChange:value=>setHLOToken()}),game.settings.register("herovaultfoundry","debugEnabled",{name:"Enable debug mode",hint:"Debug output will be written to the js console.",scope:"client",config:!0,type:Boolean,default:!1,onChange:value=>hvDebug.enabled=game.settings.get("herovaultfoundry","debugEnabled")}),game.settings.register("herovaultfoundry","skipTokenPrompt",{name:"Skip Token Prompt",hint:"Once your HeroVau.lt user token is set, you will no longer be prompted to set it. Unchecking this makes HeroVau.lt prompt you for the User Token again.",scope:"client",config:!0,type:Boolean,default:!1,onChange:value=>skipTokenPrompt=game.settings.get("herovaultfoundry","skipTokenPrompt")}),hvDebug.enabled=game.settings.get("herovaultfoundry","debugEnabled"),HLOuserToken=game.settings.get("herovaultfoundry","hlouserToken"),hvUserToken=game.settings.get("herovaultfoundry","userToken"),skipTokenPrompt=game.settings.get("herovaultfoundry","skipTokenPrompt")}),Hooks.on("renderActorSheet",function(obj,html){const actor=obj.actor;if(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cActor type: "+actor.type+"can update?: "+actor.testUserPermission(game.user,"update"),hvColor1,hvColor4),"character"===actor.type&&actor.testUserPermission(game.user,"update")){let element=html.find(".window-header .window-title");if(1==element.length){let head=html.find(".window-header");if(0==head.find("#herovault").length){let vaultButton=$('Vault');vaultButton.on("click",()=>checkNextAction(actor)),element.after(vaultButton)}game.modules.get("pathbuilder2e-import")?.active&&enablePB&&$("a:contains('Import from Pathbuilder')").remove()}}});const checkForAccess=async(hvUserToken,hvUID)=>new Promise(resolve=>{var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),resolve(responseJSON))},hvDebug.enabled&&(console.log("%cHeroVau.lt/Foundry Bridge | %cChecking if this account can access: "+hvUID,hvColor1,hvColor4),console.log("%cHeroVau.lt/Foundry Bridge | %chttps://herovau.lt/foundrymodule.php?action=checkCharacter&userToken="+hvUserToken+"&charUID="+hvUID,hvColor1,hvColor4)),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=checkCharacter&userToken="+hvUserToken+"&charUID="+hvUID)}),getVaultSlots=async hvUserToken=>new Promise(resolve=>{var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),resolve(responseJSON))},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %chttps://herovau.lt/foundrymodule.php?action=getVaultSlots&userToken="+hvUserToken,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getVaultSlots&userToken="+hvUserToken)}),exportPCtoHV=(targetActor,userToken,charUID,importAsNew,portraitAddress,tokenAddress)=>new Promise(resolve=>{let action="";action=importAsNew?"importNewPC":"importExistingPC";var gameSystem=game.system.id,gameSystemVersion=game.system.version,foundryVersion=game.version,pcEncodedJSON=encodeURIComponent(JSON.stringify(targetActor.toObject())),xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),console.log(responseJSON),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),resolve(responseJSON))},xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action="+action+"&userToken="+userToken+"&encodedChar="+pcEncodedJSON+"&gamesystem="+gameSystem+"&charUID="+charUID+"&portraitAddress="+encodeURIComponent(portraitAddress)+"&tokenAddress="+encodeURIComponent(tokenAddress)+"&foundryVersion="+encodeURIComponent(foundryVersion)+"&gameSystemVersion="+encodeURIComponent(gameSystemVersion))});function herovaultMenu(targetActor){let importPC=!1,exportPC=!1;var menuButtons={...menuButtons={import:{icon:"",label:"Import from HeroVau.lt",callback:()=>importPC=!0},export:{icon:"",label:"Export to HeroVau.lt",callback:()=>exportPC=!0}},no:{icon:"",label:"Cancel"}};new Dialog({title:"HeroVau.lt Import",content:"
Unfortunately you do not have enough open slots in your HeroVau.lt to export this PC. Please upgrade your account or delete a PC from your account to free up some space.
',new Dialog({title:"Export to your HeroVau.lt",content:bdy,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0)):(0",label:"Export to HeroVau.lt as New PC",callback:()=>exportNewPC=!0}},bdy+="
You can export this character as a new PC, taking up a slot on your account. (Note: if the same exact copy of this character exists on your account, it will be overwritten)
"):bdy+="
You do not have enough free slots to export this character as a new PC.
",canOverwrite&&(bdy+="
Since this character already exists in your vault, you can overwrite that character with this character.
",menuButtons={...menuButtons,exportOverwrite:{icon:"",label:"Export to HeroVau.lt overwriting existing PC",callback:()=>exportOverwritePC=!0}}),menuButtons={...menuButtons,no:{icon:"",label:"Cancel"}},bdy+=`
Please choose an action to perform:
`,new Dialog({title:"Export to your HeroVau.lt",content:bdy,buttons:menuButtons,default:"exportNew",close:async html=>{if(exportNewPC){hvUID="";var exportStatus=await exportPCtoHV(targetActor,hvUserToken,hvUID,!0,portraitAddress,tokenAddress);1==exportStatus.error?ui.notifications.error("Error exporting: "+exportStatus.message):(targetActor.update({"flags.herovault.uid":exportStatus.charhash}),ui.notifications.info(exportStatus.message))}else if(exportOverwritePC){hvDebug.enabled&&console.log("export overwrite PC");let exportStatus=await exportPCtoHV(targetActor,hvUserTokenHashed,hvUID,!1,portraitAddress,tokenAddress);1==exportStatus.error?ui.notifications.error("Error exporting: "+exportStatus.message):(targetActor.update({"flags.herovault.uid":exportStatus.charhash}),ui.notifications.info(exportStatus.message))}}}).render(!0))}catch(e){console.log(e)}}"https:"!==location.protocol&&(heroVaultURL="http://herovau.lt"),Hooks.on("ready",async function(){console.log("%cHeroVau.lt/Foundry Bridge | %cinitializing",hvColor1,hvColor4),"https:"!==location.protocol&&(game.user.isGM&&ui.notifications.info("GM: Please set your server to use HTTPS. For instructions see (coming soon)."),ui.notifications.info("HeroVau.lt using insecure HTTP mode.")),Cookie.get("hvut")&&(game.settings.set("herovaultfoundry","userToken",Cookie.get("hvut")),hvUserToken=game.settings.get("herovaultfoundry","userToken"),Cookie.set("hvut","",-1)),Cookie.get("herovault_skiptoken")&&(skipTokenPrompt=Cookie.get("herovault_skiptoken"),game.settings.set("herovaultfoundry","userToken",skipTokenPrompt),Cookie.set("herovault_skiptoken","",-1)),game.settings.register("herovaultfoundry","userToken",{name:"HeroVau.lt User Token",hint:"Please enter your personal user token from "+heroVaultURL+". Your HeroVau.lt token allows you to import and export PCs directly into your HeroVau.lt account. This is not required to use the Pathbuilder or HeroLab Online features.",scope:"client",config:!0,type:String,default:hvUserToken,onChange:value=>hvUserToken=game.settings.get("herovaultfoundry","userToken")}),game.settings.register("herovaultfoundry","hlouserToken",{name:"HeroLab Online User Token (optional)",hint:"Please enter your personal user token. A user token allows external tools (like HeroVau.lt) to access the HLO server and perform export operations.",scope:"client",config:!0,type:String,default:"",onChange:value=>setHLOToken()}),game.settings.register("herovaultfoundry","debugEnabled",{name:"Enable debug mode",hint:"Debug output will be written to the js console.",scope:"client",config:!0,type:Boolean,default:!1,onChange:value=>hvDebug.enabled=game.settings.get("herovaultfoundry","debugEnabled")}),game.settings.register("herovaultfoundry","skipTokenPrompt",{name:"Skip Token Prompt",hint:"Once your HeroVau.lt user token is set, you will no longer be prompted to set it. Unchecking this makes HeroVau.lt prompt you for the User Token again.",scope:"client",config:!0,type:Boolean,default:!1,onChange:value=>skipTokenPrompt=game.settings.get("herovaultfoundry","skipTokenPrompt")}),hvDebug.enabled=game.settings.get("herovaultfoundry","debugEnabled"),HLOuserToken=game.settings.get("herovaultfoundry","hlouserToken"),hvUserToken=game.settings.get("herovaultfoundry","userToken"),skipTokenPrompt=game.settings.get("herovaultfoundry","skipTokenPrompt")}),Hooks.on("renderActorSheet",function(obj,html){const actor=obj.actor;if(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cActor type: "+actor.type+"can update?: "+actor.testUserPermission(game.user,"update"),hvColor1,hvColor4),"character"===actor.type&&actor.testUserPermission(game.user,"update")){let element=html.find(".window-header .window-title");if(1==element.length){let head=html.find(".window-header");if(0==head.find("#herovault").length){let vaultButton=$('Vault');vaultButton.on("click",()=>checkNextAction(actor)),element.after(vaultButton)}game.modules.get("pathbuilder2e-import")?.active&&enablePB&&$("a:contains('Import from Pathbuilder')").remove()}}});const checkForAccess=async(hvUserToken,hvUID)=>new Promise(resolve=>{var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),resolve(responseJSON))},hvDebug.enabled&&(console.log("%cHeroVau.lt/Foundry Bridge | %cChecking if this account can access: "+hvUID,hvColor1,hvColor4),console.log("%cHeroVau.lt/Foundry Bridge | %chttps://herovau.lt/foundrymodule.php?action=checkCharacter&userToken="+hvUserToken+"&charUID="+hvUID,hvColor1,hvColor4)),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=checkCharacter&userToken="+hvUserToken+"&charUID="+hvUID+"&hvVer="+encodeURIComponent(hvVer))}),getVaultSlots=async hvUserToken=>new Promise(resolve=>{var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),resolve(responseJSON))},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %chttps://herovau.lt/foundrymodule.php?action=getVaultSlots&userToken="+hvUserToken,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getVaultSlots&userToken="+hvUserToken+"&hvVer="+encodeURIComponent(hvVer))}),exportPCtoHV=(targetActor,userToken,charUID,importAsNew,portraitAddress,tokenAddress)=>new Promise(resolve=>{let action="";action=importAsNew?"importNewPC":"importExistingPC";var gameSystem=game.system.id,gameSystemVersion=game.system.version,foundryVersion=game.version,pcEncodedJSON=encodeURIComponent(JSON.stringify(targetActor.toObject())),xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),console.log(responseJSON),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(responseJSON),hvColor1,hvColor4),charUID=responseJSON.charhash,toDataURL(targetActor.img,function(dataUrl){var xmlhttpPortrait=new XMLHttpRequest;xmlhttpPortrait.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),console.log(responseJSON),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cPortrait Upload:"+JSON.stringify(responseJSON),hvColor1,hvColor4),ui.notifications.info("Successfully exported portrait image HeroVau.lt."),resolve(responseJSON))},xmlhttpPortrait.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttpPortrait.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttpPortrait.send("action=portraitSend&userToken="+userToken+"&charUID="+charUID+"&portraitBase64="+encodeURIComponent(dataUrl)+"&hvVer="+encodeURIComponent(hvVer))},"image/png"),toDataURL(targetActor.prototypeToken.texture.src,function(dataUrl){var xmlhttpToken=new XMLHttpRequest;xmlhttpToken.onreadystatechange=function(){var responseJSON;4==this.readyState&&200==this.status&&(responseJSON=JSON.parse(this.responseText),console.log(responseJSON),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cToken Upload:"+JSON.stringify(responseJSON),hvColor1,hvColor4),ui.notifications.info("Successfully exported token image HeroVau.lt."),resolve(responseJSON))},xmlhttpToken.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttpToken.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttpToken.send("action=tokenSend&userToken="+userToken+"&charUID="+charUID+"&tokenBase64="+encodeURIComponent(dataUrl)+"&hvVer="+encodeURIComponent(hvVer))}),resolve(responseJSON))},xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action="+action+"&userToken="+userToken+"&encodedChar="+pcEncodedJSON+"&gamesystem="+gameSystem+"&charUID="+charUID+"&foundryVersion="+encodeURIComponent(foundryVersion)+"&gameSystemVersion="+encodeURIComponent(gameSystemVersion)+"&hvVer="+encodeURIComponent(hvVer))});function herovaultMenu(targetActor){let importPC=!1,exportPC=!1;var menuButtons={...menuButtons={import:{icon:"",label:"Import from HeroVau.lt",callback:()=>importPC=!0},export:{icon:"",label:"Export to HeroVau.lt",callback:()=>exportPC=!0}},no:{icon:"",label:"Cancel"}};new Dialog({title:"HeroVau.lt Import",content:"
Please choose an action to perform:
",buttons:menuButtons,default:"yes",close:html=>{importPC?(hvDebug.enabled&&console.log("import PC menu"),loadPersonalVault(targetActor,hvUserToken)):exportPC&&(hvDebug.enabled&&console.log("export PC"),exportToHV(targetActor,hvUserToken))}},{width:650,height:"auto"}).render(!0)}function exportPC(targetActor){null==hvUserToken&&(hvUserToken="")}function beginVaultConnection(targetActor){skipTokenPrompt?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cCalling herovaultMenu in beginVaultConnection",hvColor1,hvColor4),herovaultMenu(targetActor,hvUserToken)):(null==hvUserToken&&(hvUserToken=""),getVaultToken(herovaultMenu,targetActor,hvUserToken))}function loadPersonalVault(targetActor){var gameSystem=game.system.id;let error=!1;var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){if(4==this.readyState&&200==this.status){let responseJSON=JSON.parse(this.responseText);hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+responseJSON,hvColor1,hvColor4),responseJSON.hasOwnProperty("error")?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cerror found in response",hvColor1,hvColor4),error=!0):hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+Object.keys(responseJSON).length,hvColor1,hvColor4),error?new Dialog({title:"HeroVau.lt",content:`
Error
${responseJSON.error}
-
`,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0):1<=Object.keys(responseJSON).length?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cCalling checkHLOCharacterIsCorrect",hvColor1,hvColor4),createPCTable(targetActor,responseJSON)):(ui.notifications.warn("Unable to load vault. Please double-check your User Token."),game.settings.set("herovaultfoundry","skipTokenPrompt",!1),getVaultToken(loadPersonalVault,targetActor,hvUserToken))}},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cusertoken: "+hvUserToken,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getvault&gamesystem="+encodeURIComponent(gameSystem)+"&hvVer="+hvVer+"&userToken="+hvUserToken)}function createPCTable(targetActor,responseJSON){var charName,charRace,charClass,charLevel,pickedCharacter,selectedCharUID;hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cin createPCTable",hvColor1,hvColor4);for(var htmlOut="Select a PC from the list:
",new Dialog({title:"Importable Character List",content:`
+
`,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0):1<=Object.keys(responseJSON).length?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cCalling checkHLOCharacterIsCorrect",hvColor1,hvColor4),createPCTable(targetActor,responseJSON)):(ui.notifications.warn("Unable to load vault. Please double-check your User Token."),game.settings.set("herovaultfoundry","skipTokenPrompt",!1),getVaultToken(loadPersonalVault,targetActor,hvUserToken))}},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cusertoken: "+hvUserToken,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getvault&gamesystem="+encodeURIComponent(gameSystem)+"&hvVer="+hvVer+"&userToken="+hvUserToken+"&hvVer="+encodeURIComponent(hvVer))}function createPCTable(targetActor,responseJSON){var charName,charRace,charClass,charLevel,pickedCharacter,selectedCharUID;hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cin createPCTable",hvColor1,hvColor4);for(var htmlOut="Select a PC from the list:
",new Dialog({title:"Importable Character List",content:`
`+htmlOut+`
`,buttons:{yes:{icon:"",label:"Proceed",callback:()=>pickedCharacter=!0},no:{icon:"",label:"Cancel",callback:()=>pickedCharacter=!1}},default:"yes",close:html=>{pickedCharacter?(hvDebug.enabled&&console.log("yes clicked"),selectedCharUID=html.find('[id="pcid"]')[0].value,hvDebug.enabled&&console.log("Selected PC id: "+selectedCharUID),requestCharacter(targetActor,selectedCharUID)):hvDebug.enabled&&console.log("cancel clicked")}},{width:650,height:"auto"}).render(!0)}function requestCharacter(targetActor,charUID){let error=!1;var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){if(4==this.readyState&&200==this.status){let responseJSON=JSON.parse(this.responseText);hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+responseJSON,hvColor1,hvColor4),responseJSON.hasOwnProperty("error")?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cerror found in response",hvColor1,hvColor4),error=!0):hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+Object.keys(responseJSON).length,hvColor1,hvColor4),error?new Dialog({title:"HeroVau.lt",content:`
`,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0):responseJSON.downloadURL?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cGot the URL: "+responseJSON.downloadURL,hvColor1,hvColor4),importCharacter(targetActor,responseJSON.downloadURL)):ui.notifications.warn("Unable find character. Please contact HeroVau.lt support.")}},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %ccharUID: "+charUID,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getCharacter&charUID="+encodeURIComponent(charUID))}async function importCharacter(targetActor,charURL){var importPCID,charDataStr,charImport,errMsg="",xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=async function(){if(4==this.readyState&&200==this.status){var request2=JSON.parse(this.responseText);hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(request2),hvColor1,hvColor4);{var newSaves=targetActor._id;let coreVersionMismatch=!1,systemVersionMismatch=!1,abort=!1;var chatData=game.system.version,coreVersion=game.version;let pcGameSystemVersion,pcCoreVersion;if(request2?.flags?.herovault?.gameSystemVersion&&request2?.flags?.herovault?.foundryVersion?(pcCoreVersion=request2.flags.herovault.foundryVersion,pcGameSystemVersion=request2.flags.herovault.gameSystemVersion):request2.flags?.exportSource?.systemVersion&&request2.flags?.exportSource?.coreVersion&&(pcCoreVersion=request2.flags.exportSource.coreVersion,pcGameSystemVersion=request2.flags.exportSource.systemVersion),pcCoreVersion!=coreVersion&&(coreVersionMismatch=!0,errMsg=errMsg+"This PC was exported from Foundry v"+pcCoreVersion+" and this game server is running Foundry v"+coreVersion+".
"),pcGameSystemVersion!=chatData&&(systemVersionMismatch=!0,errMsg=1==HVversionCompare(pcGameSystemVersion,chatData)?(abort=!0,errMsg+"This PC was exported from "+game.system.title+": "+pcGameSystemVersion+" and this game server is running "+game.system.title+": "+chatData+".
Unfortunately, game systems usually are not backwards compatible, so we areaborting this import. To manually override, please download the hero export from herovau.lt. This may break this PC -- you have been warned!
If the actor won't open, it is corrupted and should be deleted. If this PC fails to import or corrupts the actor it was imported to, you should attempt to import your PC into Foundry v9 and re-export to HeroVau.lt here: https://slate-pf2-dev.forge-vtt.com/game Once that procedure is complete, come back to this game and retry importing from HeroVau.lt again."):errMsg+"This PC was exported from "+game.system.title+": "+pcGameSystemVersion+" and this game server is running "+game.system.title+": "+chatData+".
"),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | Mismatch?:%c"+systemVersionMismatch+" | "+coreVersionMismatch,hvColor1,hvColor4),systemVersionMismatch||coreVersionMismatch){errMsg+="There may be compatibility issues.
If the actor won't open, it is corrupted and should be deleted. If this PC fails to import or corrupts the actor it was imported to, you should attempt to import your PC into Foundry v9 and re-export to HeroVau.lt here: https://slate-pf2-dev.forge-vtt.com/game Once that procedure is complete, come back to this game and retry importing from HeroVau.lt again.
";chatData={user:game.user._id,speaker:ChatMessage.getSpeaker(),content:errMsg,whisper:[game.user._id]};if(ChatMessage.create(chatData,{}),abort)return}request2._id?(importPCID=new RegExp(request2._id,"g"),charDataStr=JSON.stringify(request2),hvDebug.enabled&&(console.log("%cHeroVau.lt/Foundry Bridge | Target ID:%c"+newSaves,hvColor1,hvColor4),console.log("%cHeroVau.lt/Foundry Bridge | %c"+charDataStr,hvColor1,hvColor4)),charDataStr=charDataStr.replace(importPCID,newSaves),charImport=JSON.parse(charDataStr)):(charImport=request2)._id=newSaves,charImport?.data?.saves&&Array.isArray(charImport.data.saves)&&(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cConverting a bad saves array to object.",hvColor1,hvColor4),newSaves=charImport.data.saves,newSaves=Object.assign({},newSaves),charImport.data.saves=newSaves),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cChecking for crafting:"+request2?.data?.crafting,hvColor1,hvColor4),charImport?.data&&!charImport?.data?.crafting&&(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c Adding crafting block to PC",hvColor1,hvColor4),charImport.data.crafting={formulas:[]});request2=targetActor.permission;charImport.permission=request2,hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cHLO Importer | %c Importing "+charImport.name,hvColor1,hvColor5,hvColor4);request2=targetActor._id;targetActor=Actor.get(request2),charImport=await fixOldSlugs(charImport=await removeDarkvision(charImport));request2=JSON.stringify(charImport);hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cFinal json for import: "+request2,hvColor1,hvColor4);await doImport(targetActor,request2);request2=new XMLHttpRequest;void 0!==charImport?.prototypeToken?.texture?.src&&(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cFetching token image "+charImport.prototypeToken.texture.src,hvColor1,hvColor4),request2.open("GET",charImport.prototypeToken.texture.src,!0),request2.onreadystatechange=function(){404===this.status&&(targetActor.update({"prototypeToken.texture.src":"icons/svg/mystery-man.svg"}),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c404 fetching image "+charImport.prototypeToken.texture.src,hvColor1,hvColor4))},request2.send());request2=new XMLHttpRequest;hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cFetching image "+charImport.src,hvColor1,hvColor4),request2.open("GET",charImport.img,!0),request2.onreadystatechange=function(){404===this.status&&(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c404 fetching image "+charImport.img,hvColor1,hvColor4),targetActor.update({img:"icons/svg/mystery-man.svg"}))},request2.send()}}},xmlhttp.open("GET",charURL,!0),xmlhttp.send()}async function doImport(obj,json){return obj.importFromJSON(json)}async function removeDarkvision(charJSON){if("pf2e"==charJSON?.flags?.exportSource?.system)for(const property in charJSON.items)"darkvision"==charJSON.items[property]?.data?.slug&&charJSON.items.splice(property,1);return charJSON}async function fixOldSlugs(charJSON){if("pf2e"==(charJSON=Object.assign({},charJSON))?.flags?.exportSource?.system)for(const property in charJSON.items)if(charJSON.items[property]?.flags?.core?.sourceId){var itemData=charJSON.items[property].flags.core.sourceId.split(".");if("equipment-srd"==itemData[2]){let pack=game.packs.get(itemData[1]+"."+itemData[2]);itemData=Object.assign({},await pack.getDocument(itemData[3]));if(itemData){let oldItemData=Object.assign({},charJSON.items[property]);oldItemData?.data?.slug&&itemData?.system?.slug&&(oldItemData.data.slug=itemData.system.slug,charJSON.items.push(itemData),charJSON.items.splice(property,1))}}}return charJSON}async function checkForStaleData(charJSON){if("pf2e"==(charJSON=Object.assign({},charJSON))?.flags?.exportSource?.system){var itemSource;for(const property in charJSON.items)charJSON.items[property]?.flags?.core?.sourceId?(itemSource=charJSON.items[property].flags.core.sourceId.split("."),console.log(itemSource[0]+"."+itemSource[1]+"."+itemSource[2]),"equipment-srd"!=itemSource[2]&&"pathfinder-society-boons"!=itemSource[2]&&charJSON.items[property]?._stats&&(charJSON.items[property]._stats.systemId="pf2e",charJSON.items[property]._stats.systemVersion=game.system.version,charJSON.items[property]._stats.coreVersion=game.version,charJSON.items[property]._stats.createdTime=Math.floor(Date.now()/1e3),charJSON.items[property]._stats.modifiedTime=Math.floor(Date.now()/1e3),charJSON.items[property]._stats.lastModifiedBy=game.userId)):console.log("No sourceId, skipping")}return console.log("modified charJSON"),console.log(charJSON),charJSON}var Cookie={set:function(name,value,host){var domain,expires=host?((domain=new Date).setTime(domain.getTime()+864e5*host),"; expires="+domain.toGMTString()):"",host=location.host;1===host.split(".").length?document.cookie=name+"="+value+expires+"; path=/; SameSite=Strict":((domain=host.split(".")).shift(),domain="."+domain.join("."),host.includes("forge-vtt.com")?document.cookie=name+"="+value+expires+"; path=/; domain=.forge-vtt.com; SameSite=Strict":(document.cookie=name+"="+value+expires+"; path=/; domain="+domain+"; SameSite=Strict",document.cookie=name+"="+value+expires+"; path=/; domain="+host+"; SameSite=Strict"),null!=Cookie.get(name)&&Cookie.get(name)==value||(domain="."+host,document.cookie=name+"="+value+expires+"; path=/; domain="+domain+"; SameSite=Strict"))},get:function(name){for(var nameEQ=name+"=",ca=document.cookie.split(";"),i=0;iparseInt(b[i]))return 1;if(b[i]&&!a[i]&&0b.toString(16).padStart(2,"0")).join("")}Hooks.on("init",()=>{game.modules.get("herovaultfoundry").api={exportToHVFromPBHLO:exportToHVFromPBHLO,supportCheck:supportCheck},Hooks.callAll("herovaultfoundryReady",game.modules.get("herovaultfoundry").api)});export{exportToHVFromPBHLO,supportCheck};
\ No newline at end of file
+
`,buttons:{yes:{icon:"",label:"Ok"}},default:"yes"}).render(!0):responseJSON.downloadURL?(hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %cGot the URL: "+responseJSON.downloadURL,hvColor1,hvColor4),importCharacter(targetActor,responseJSON.downloadURL)):ui.notifications.warn("Unable find character. Please contact HeroVau.lt support.")}},hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %ccharUID: "+charUID,hvColor1,hvColor4),xmlhttp.open("POST",heroVaultURL+"/foundrymodule.php",!0),xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xmlhttp.send("action=getCharacter&charUID="+encodeURIComponent(charUID)+"&hvVer="+encodeURIComponent(hvVer))}async function importCharacter(targetActor,charURL){var importPCID,charDataStr,charImport,errMsg="",xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=async function(){if(4==this.readyState&&200==this.status){var request2=JSON.parse(this.responseText);hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | %c"+JSON.stringify(request2),hvColor1,hvColor4);{var newSaves=targetActor._id;let coreVersionMismatch=!1,systemVersionMismatch=!1,abort=!1;var chatData=game.system.version,coreVersion=game.version;let pcGameSystemVersion,pcCoreVersion;if(request2?.flags?.herovault?.gameSystemVersion&&request2?.flags?.herovault?.foundryVersion?(pcCoreVersion=request2.flags.herovault.foundryVersion,pcGameSystemVersion=request2.flags.herovault.gameSystemVersion):request2.flags?.exportSource?.systemVersion&&request2.flags?.exportSource?.coreVersion&&(pcCoreVersion=request2.flags.exportSource.coreVersion,pcGameSystemVersion=request2.flags.exportSource.systemVersion),pcCoreVersion!=coreVersion&&(coreVersionMismatch=!0,errMsg=errMsg+"This PC was exported from Foundry v"+pcCoreVersion+" and this game server is running Foundry v"+coreVersion+".
"),pcGameSystemVersion!=chatData&&(systemVersionMismatch=!0,errMsg=1==HVversionCompare(pcGameSystemVersion,chatData)?(abort=!0,errMsg+"This PC was exported from "+game.system.title+": "+pcGameSystemVersion+" and this game server is running "+game.system.title+": "+chatData+".
Unfortunately, game systems usually are not backwards compatible, so we areaborting this import. To manually override, please download the hero export from herovau.lt. This may break this PC -- you have been warned!
If the actor won't open, it is corrupted and should be deleted. If this PC fails to import or corrupts the actor it was imported to, you should attempt to import your PC into Foundry v9 and re-export to HeroVau.lt here: https://slate-pf2-dev.forge-vtt.com/game Once that procedure is complete, come back to this game and retry importing from HeroVau.lt again."):errMsg+"This PC was exported from "+game.system.title+": "+pcGameSystemVersion+" and this game server is running "+game.system.title+": "+chatData+".
"),hvDebug.enabled&&console.log("%cHeroVau.lt/Foundry Bridge | Mismatch?:%c"+systemVersionMismatch+" | "+coreVersionMismatch,hvColor1,hvColor4),systemVersionMismatch||coreVersionMismatch){errMsg+="There may be compatibility issues.
If the actor won't open, it is corrupted and should be deleted. If this PC fails to import or corrupts the actor it was imported to, you should attempt to import your PC into Foundry v9 and re-export to HeroVau.lt here: https://slate-pf2-dev.forge-vtt.com/game Once that procedure is complete, come back to this game and retry importing from HeroVau.lt again.