Compare commits
	
		
			54 Commits
		
	
	
		
			v1.1.1
			...
			old-system
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 40b9d3a053 | ||
|  | 47206a8695 | ||
|  | 015c3e5181 | ||
|  | bde6ffca74 | ||
|  | 6dc5149c3b | ||
|  | 8f8a66c78a | ||
|  | 4af976cac7 | ||
|  | efa4ac6457 | ||
|  | c1a962e3b8 | ||
|  | 2eac4210e6 | ||
|  | 5dfdd81d74 | ||
|  | 60c31993b0 | ||
|  | 1e105cfc41 | ||
|  | f653eb2ef2 | ||
|  | fbf7e826d0 | ||
|  | beb4322917 | ||
|  | d18c52ac54 | ||
|  | 21d17ba037 | ||
|  | 863236d478 | ||
|  | 34238b7dc9 | ||
|  | ef50b84dba | ||
|  | 6e69dd8681 | ||
|  | e83c7b8ee0 | ||
|  | aa7a951ae1 | ||
|  | 004143280b | ||
|  | dcdd9af271 | ||
|  | bef8d4bf7e | ||
|  | 0c670b82b6 | ||
|  | 428b82e388 | ||
|  | 917bd6456d | ||
|  | 943e2c5185 | ||
|  | c112950a3e | ||
|  | 0ad5baa341 | ||
|  | 46ecf27fa5 | ||
|  | 34878dfd57 | ||
|  | 86b3240616 | ||
|  | 9f9b093d71 | ||
|  | b9b014d59f | ||
|  | a514ad4367 | ||
|  | 1ec482a98f | ||
|  | cc49017b3f | ||
|  | e928c253eb | ||
|  | f81fcb6111 | ||
|  | de8b7ec38a | ||
|  | 36a506b338 | ||
|  | 2294addb8a | ||
|  | 6fe30953cc | ||
|  | 90f4d79e48 | ||
|  | aff0d5ffbe | ||
|  | cf66b7e128 | ||
|  | 928739218d | ||
|  | 520ebaeed0 | ||
|  | b5c01caff2 | ||
|  | f6efcd73e2 | 
							
								
								
									
										128
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							| @@ -1,11 +1,24 @@ | ||||
| image: ubuntu:latest  | ||||
|  | ||||
|  | ||||
| stages: | ||||
|   - compile | ||||
|   - build | ||||
|   - release | ||||
|  | ||||
| # Compile Job (runs on every commit) | ||||
| compile: | ||||
|   stage: compile | ||||
|   image: ubuntu:latest  | ||||
| variables: | ||||
|   MANIFEST: "system.json" | ||||
|   ZIPFILE: "kidsonbrooms.zip" | ||||
|   PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}" | ||||
|   MANIFEST_RELEASE_URL: "${PACKAGE_REGISTRY_URL}/${MANIFEST}" | ||||
|   ZIPFILE_RELEASE_URL: "${PACKAGE_REGISTRY_URL}/${ZIPFILE}" | ||||
|   MANIFEST_PERMALINK_URL: "https://gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/-/releases/${CI_COMMIT_TAG}/downloads/${MANIFEST}" | ||||
|   ZIPFILE_PERMALINK_URL: "https://gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/-/releases/${CI_COMMIT_TAG}/downloads/${ZIPFILE}" | ||||
|   dry_run: true | ||||
|  | ||||
|  | ||||
| # Build job | ||||
| build: | ||||
|   stage: build | ||||
|   before_script: | ||||
|     # Install Node.js v21.x manually | ||||
|     - apt-get update && apt-get install -y curl | ||||
| @@ -17,94 +30,55 @@ compile: | ||||
|     - gulp --version  # Verify Gulp is installed | ||||
|   script: | ||||
|     - npm install | ||||
|     - gulp compile | ||||
|   only: | ||||
|     - branches | ||||
|     - gulp build | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - kidsonbrooms.zip | ||||
|     expire_in: never | ||||
|       - system.json | ||||
|       - packs/ | ||||
|   only: | ||||
|     - branches | ||||
|  | ||||
| # Release Job (manually triggered with version) | ||||
| # Release job | ||||
| release: | ||||
|   stage: release | ||||
|   image: ubuntu:latest | ||||
|   rules: | ||||
|     - if: $CI_COMMIT_TAG | ||||
|   variables: | ||||
|     dry_run: "false"   | ||||
|   before_script: | ||||
|     # Install necessary tools | ||||
|     - apt-get update && apt-get install -y curl jq git | ||||
|     # Install Node.js v21.x manually | ||||
|     - apt-get update && apt-get install -y curl | ||||
|     - curl -fsSL https://deb.nodesource.com/setup_21.x | bash - | ||||
|     - apt-get install -y nodejs | ||||
|     - node -v  # Verify the correct Node.js version | ||||
|     # Install Gulp globally | ||||
|     - npm install --global gulp-cli | ||||
|     - gulp --version  # Verify Gulp is installed | ||||
|     - git fetch --all | ||||
|     - git switch master | ||||
|     - git branch --set-upstream-to=origin/master master | ||||
|   script: | ||||
|     # Check if VERSION is provided | ||||
|     - | | ||||
|       if [ -z "$VERSION" ]; then | ||||
|         echo "Error: VERSION variable is required." | ||||
|         exit 1 | ||||
|       fi | ||||
|  | ||||
|     # Install dependencies and run Gulp release task | ||||
|     - npm install | ||||
|     - gulp release | ||||
|  | ||||
|     - grep '"download":' system.json | ||||
|     - git config --global user.name "GitLab CI" | ||||
|     - git config --global user.email "ci@gitlab.com" | ||||
|     - git add kidsonbrooms.zip | ||||
|     - git commit -m "Update .zip with new version" | ||||
|     - git push "https://$CI_COMMITTER_USER_AND_TOKEN@gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}.git" HEAD:master | ||||
| # Create GitLab release | ||||
| create-release: | ||||
|   stage: release | ||||
|   image: registry.gitlab.com/gitlab-org/release-cli:latest | ||||
|   needs: | ||||
|     - job: release | ||||
|   rules: | ||||
|     - if: $CI_COMMIT_TAG | ||||
|   script: | ||||
|     - echo "Creating GitLab release for $CI_COMMIT_TAG" | ||||
|   release: | ||||
|     name: "$CI_COMMIT_TAG" | ||||
|     tag_name: "$CI_COMMIT_TAG" | ||||
|     description: "Release $CI_COMMIT_TAG of $CI_PROJECT_NAME." | ||||
|     assets: | ||||
|       links: | ||||
|         - name: "$MANIFEST" | ||||
|           url: "${MANIFEST_RELEASE_URL}" | ||||
|           filepath: "/${MANIFEST}" | ||||
|         - name: "$ZIPFILE" | ||||
|           url: "${ZIPFILE_RELEASE_URL}" | ||||
|           filepath: "/${ZIPFILE}" | ||||
|  | ||||
|      # Create a release on GitLab | ||||
|     - | | ||||
|       export RELEASE_RESPONSE=$(curl --request POST \ | ||||
|         --header "PRIVATE-TOKEN: ${GITLAB_PAT}" \ | ||||
|         --header "Content-Type: application/json" \ | ||||
|         --data '{ | ||||
|             "name": "Release v'$VERSION'", | ||||
|             "tag_name": "v'$VERSION'", | ||||
|             "description": "Release v'$VERSION'", | ||||
|             "ref": "master", | ||||
|             "assets": { | ||||
|               "links": [ | ||||
|                 { | ||||
|                   "name": "Download kidsonbrooms.zip", | ||||
|                   "url": "https://gitlab.com/wintermyst/kidsonbrooms/-/raw/master/kidsonbrooms.zip?inline=false" | ||||
|                 } | ||||
|               ] | ||||
|             } | ||||
|         }' "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/releases") | ||||
|     # Publish the release to the Foundry API | ||||
|     - | | ||||
|       curl -X POST https://api.foundryvtt.com/_api/packages/release_version/ \ | ||||
|         -H "Authorization: $FOUNDRY_API_KEY" \ | ||||
|         -H "Content-Type: application/json" \ | ||||
|         -d "{ | ||||
|           \"id\": \"Your-Package-ID\", | ||||
|           \"release\": { | ||||
|             \"version\": \"$VERSION\", | ||||
|             \"manifest\": \"https://gitlab.com/wintermyst/kidsonbrooms/-/raw/master/system.json", | ||||
|             \"notes\": \"https://gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/-/releases/v$VERSION\", | ||||
|             \"compatibility\": { | ||||
|               \"minimum\": \"12.331\", | ||||
|               \"verified\": \"12.331\", | ||||
|               \"maximum\": \"\" | ||||
|             } | ||||
|           } | ||||
|         }" | ||||
|   only:  | ||||
|     - master | ||||
|   when: manual | ||||
|   allow_failure: false | ||||
|   dependencies: | ||||
|     - compile | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - kidsonbrooms.zip | ||||
|     expire_in: never | ||||
|   | ||||
| @@ -162,72 +162,140 @@ | ||||
| } | ||||
|  | ||||
| .flex-group-center { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: center; | ||||
|   flex-direction: center; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: center; | ||||
| } | ||||
|  | ||||
| .flex-group-left { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: flex-start; | ||||
|   flex-direction: flex-start; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: left; | ||||
| } | ||||
|  | ||||
| .flex-group-right { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: flex-end; | ||||
|   flex-direction: flex-end; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: right; | ||||
| } | ||||
|  | ||||
| .flexshrink { | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0; | ||||
|   flex: 0; | ||||
| } | ||||
|  | ||||
| .flex-between { | ||||
|   -webkit-box-pack: justify; | ||||
|   -ms-flex-pack: justify; | ||||
|   justify-content: space-between; | ||||
| } | ||||
|  | ||||
| .flexlarge { | ||||
|   -webkit-box-flex: 2; | ||||
|   -ms-flex: 2; | ||||
|   flex: 2; | ||||
| } | ||||
|  | ||||
| .align-left { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: flex-start; | ||||
|   flex-direction: flex-start; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: left; | ||||
| } | ||||
|  | ||||
| .align-right { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: flex-end; | ||||
|   flex-direction: flex-end; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: right; | ||||
| } | ||||
|  | ||||
| .align-center { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: vertical; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: center; | ||||
|   flex-direction: center; | ||||
|   -ms-flex-wrap: center; | ||||
|   flex-wrap: center; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   -webkit-box-align: stretch; | ||||
|   -ms-flex-align: stretch; | ||||
|   align-items: stretch; | ||||
|   text-align: center; | ||||
| } | ||||
|  | ||||
| .right-align-input { | ||||
|   -webkit-box-flex: 1; | ||||
|   -ms-flex: 1; | ||||
|   flex: 1; | ||||
|   margin-left: auto; | ||||
|   max-width: 260px; | ||||
| @@ -243,26 +311,47 @@ | ||||
|   cursor: pointer; | ||||
| } | ||||
|  | ||||
| .editor-container { | ||||
|   min-height: 200px; /* Adjust this value as needed */ | ||||
| } | ||||
|  | ||||
| /* Styles limited to kidsonbrooms sheets */ | ||||
| .kids-on-brooms .item-form { | ||||
|   font-family: "Roboto", sans-serif; | ||||
| } | ||||
| .kids-on-brooms .sheet-header { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-orient: horizontal; | ||||
|   -webkit-box-direction: normal; | ||||
|   -ms-flex-direction: row; | ||||
|   flex-direction: row; | ||||
|   -ms-flex-wrap: wrap; | ||||
|   flex-wrap: wrap; | ||||
|   -webkit-box-align: start; | ||||
|   -ms-flex-align: start; | ||||
|   align-items: flex-start; | ||||
|   -webkit-box-pack: start; | ||||
|   -ms-flex-pack: start; | ||||
|   justify-content: flex-start; | ||||
|   align-items: stretch; | ||||
|   flex: 0 auto; | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0 1 auto; | ||||
|   flex: 0 1 auto; | ||||
|   overflow: hidden; | ||||
|   margin-bottom: 10px; | ||||
|   height: 110px; | ||||
| } | ||||
| .kids-on-brooms .sheet-header .profile-img { | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0 0 100px; | ||||
|   flex: 0 0 100px; | ||||
|   height: 100px; | ||||
|   margin-right: 10px; | ||||
| } | ||||
| .kids-on-brooms .sheet-header .header-fields { | ||||
|   -webkit-box-flex: 1; | ||||
|   -ms-flex: 1; | ||||
|   flex: 1; | ||||
| } | ||||
| .kids-on-brooms .sheet-header h1.charname { | ||||
| @@ -281,7 +370,9 @@ | ||||
|   border-radius: 10px; | ||||
| } | ||||
| .kids-on-brooms .sheet-tabs { | ||||
|   flex: 0; | ||||
|   -webkit-box-flex: 1; | ||||
|   -ms-flex: 1; | ||||
|   flex: 1; | ||||
| } | ||||
| .kids-on-brooms .sheet-body, | ||||
| .kids-on-brooms .sheet-body .tab, | ||||
| @@ -295,8 +386,14 @@ | ||||
|   padding: 0 8px; | ||||
| } | ||||
| .kids-on-brooms .selection-row { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-pack: justify; | ||||
|   -ms-flex-pack: justify; | ||||
|   justify-content: space-between; | ||||
|   -webkit-box-align: center; | ||||
|   -ms-flex-align: center; | ||||
|   align-items: center; | ||||
|   margin-bottom: 10px; | ||||
| } | ||||
| @@ -307,6 +404,8 @@ | ||||
|   height: 28px; | ||||
|   margin: 2px 0; | ||||
|   padding: 0; | ||||
|   -webkit-box-align: center; | ||||
|   -ms-flex-align: center; | ||||
|   align-items: center; | ||||
|   background: rgba(0, 0, 0, 0.05); | ||||
|   border: 2px groove #eeede0; | ||||
| @@ -320,6 +419,8 @@ | ||||
|   font-weight: bold; | ||||
|   padding-left: 5px; | ||||
|   text-align: left; | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
| } | ||||
| .kids-on-brooms .items-list { | ||||
| @@ -336,7 +437,11 @@ | ||||
|   padding: 0; | ||||
| } | ||||
| .kids-on-brooms .items-list .item { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-align: center; | ||||
|   -ms-flex-align: center; | ||||
|   align-items: center; | ||||
|   padding: 0 2px; | ||||
|   border-bottom: 1px solid #c9c7b8; | ||||
| @@ -345,11 +450,15 @@ | ||||
|   border-bottom: none; | ||||
| } | ||||
| .kids-on-brooms .items-list .item .item-name { | ||||
|   -webkit-box-flex: 2; | ||||
|   -ms-flex: 2; | ||||
|   flex: 2; | ||||
|   margin: 0; | ||||
|   overflow: hidden; | ||||
|   font-size: 13px; | ||||
|   text-align: left; | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   color: #191813; | ||||
| } | ||||
| @@ -359,6 +468,8 @@ | ||||
|   overflow-x: hidden; | ||||
| } | ||||
| .kids-on-brooms .items-list .item .item-name .item-image { | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0 0 30px; | ||||
|   flex: 0 0 30px; | ||||
|   height: 30px; | ||||
|   background-size: 30px; | ||||
| @@ -366,8 +477,14 @@ | ||||
|   margin-right: 5px; | ||||
| } | ||||
| .kids-on-brooms .items-list .item-controls { | ||||
|   display: -webkit-box; | ||||
|   display: -ms-flexbox; | ||||
|   display: flex; | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0 0 100px; | ||||
|   flex: 0 0 100px; | ||||
|   -webkit-box-pack: end; | ||||
|   -ms-flex-pack: end; | ||||
|   justify-content: flex-end; | ||||
| } | ||||
| .kids-on-brooms .items-list .item-controls a { | ||||
| @@ -385,6 +502,8 @@ | ||||
|   height: 28px; | ||||
|   margin: 2px 0; | ||||
|   padding: 0; | ||||
|   -webkit-box-align: center; | ||||
|   -ms-flex-align: center; | ||||
|   align-items: center; | ||||
|   background: rgba(0, 0, 0, 0.05); | ||||
|   border: 2px groove #eeede0; | ||||
| @@ -399,6 +518,8 @@ | ||||
|   text-align: left; | ||||
| } | ||||
| .kids-on-brooms .item-formula { | ||||
|   -webkit-box-flex: 0; | ||||
|   -ms-flex: 0 0 200px; | ||||
|   flex: 0 0 200px; | ||||
|   padding: 0 8px; | ||||
| } | ||||
| @@ -418,6 +539,4 @@ | ||||
| .kids-on-brooms .kids-on-brooms select:focus { | ||||
|   outline: none; | ||||
|   border-color: #8102dd; | ||||
| } | ||||
|  | ||||
| /*# sourceMappingURL=kidsonbrooms.css.map */ | ||||
| } | ||||
							
								
								
									
										298
									
								
								gulpfile.js
									
									
									
									
									
								
							
							
						
						
									
										298
									
								
								gulpfile.js
									
									
									
									
									
								
							| @@ -3,6 +3,41 @@ const prefix = require('gulp-autoprefixer'); | ||||
| const sourcemaps = require('gulp-sourcemaps'); | ||||
| const sass = require('gulp-sass')(require('sass')); | ||||
| const zip = require('gulp-zip'); | ||||
| const fs = require('fs'); | ||||
| const fetch = require('node-fetch'); | ||||
| const replace = require('gulp-replace'); | ||||
| const FormData = require('form-data'); | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Export Tasks | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| exports.default = gulp.series( | ||||
|   compileScss, | ||||
|   watchUpdates | ||||
| ); | ||||
|  | ||||
| exports.build = gulp.series( | ||||
|   compileScss, | ||||
|   checkVersion, | ||||
|   ensureOutputDirExists, | ||||
|   packageCompendiums, | ||||
|   updateSystemJson, | ||||
|   zipRelease | ||||
| ); | ||||
|  | ||||
| exports.compile = gulp.series( | ||||
|   compileScss, | ||||
|   ensureOutputDirExists, | ||||
|   packageCompendiums, | ||||
| ); | ||||
|  | ||||
|  | ||||
| exports.release = gulp.series( | ||||
|   exports.build, | ||||
|   uploadToPackageRegistry, | ||||
|   publishToFoundry | ||||
| ); | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Compile Sass | ||||
| @@ -30,31 +65,15 @@ function compileScss() { | ||||
|     })) | ||||
|     .pipe(gulp.dest("./css")) | ||||
| } | ||||
| const css = gulp.series(compileScss); | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Watch Updates | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| function watchUpdates() { | ||||
|   gulp.watch(SYSTEM_SCSS, css); | ||||
|   gulp.watch(SYSTEM_SCSS, compileScss); | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Export Tasks | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| exports.default = gulp.series( | ||||
|   compileScss, | ||||
|   watchUpdates | ||||
| ); | ||||
| exports.build = gulp.series( | ||||
|   compileScss | ||||
| ); | ||||
| exports.compile = gulp.series( | ||||
|   compileScss | ||||
| ); | ||||
| exports.css = css; | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /* Zip Release                   | ||||
| @@ -71,12 +90,249 @@ function zipRelease() { | ||||
|     '!./package.json', | ||||
|     '!./scss/**/*', | ||||
|     '!./.github/**/*', | ||||
|     '!./.gitlab-ci.yml', | ||||
|     '!./README.md', | ||||
|     '!./compendiums/**/*', | ||||
|     '!./*.zip' | ||||
|   ], { base: '.' }) | ||||
|   .pipe(zip('kidsonbrooms.zip')) | ||||
|   .pipe(gulp.dest('.')); | ||||
| } | ||||
|  | ||||
| exports.release = gulp.series( | ||||
|   compileScss, | ||||
|   zipRelease | ||||
| ); | ||||
| /* ----------------------------------------- */ | ||||
| /* Version Check                  | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
|  | ||||
| function checkVersion(done) { | ||||
|   const Manifest = JSON.parse(fs.readFileSync('system.json')); | ||||
|   const manifestVersion = Manifest.version; | ||||
|   const gitTag = process.env.CI_COMMIT_TAG; | ||||
|  | ||||
|   if (gitTag && manifestVersion !== gitTag) { | ||||
|     console.error(`Version mismatch between tag (${gitTag}) and manifest (${manifestVersion})!`); | ||||
|     process.exit(1); | ||||
|   } else { | ||||
|     console.log(`Version check passed: ${manifestVersion}`); | ||||
|     done(); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /* Bundle Compendium                 | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| const { exec } = require('child_process'); | ||||
|  | ||||
| function packageCompendiums(done) { | ||||
|   const packsDir = './compendiums'; // Adjust to your compendium source directory | ||||
|   const outputDir = './packs'; | ||||
|   const moduleId = 'kidsonbrooms'; // Replace with your actual module ID | ||||
|  | ||||
|   // Read all subdirectories in the packsDir | ||||
|   if (!fs.existsSync(packsDir)) { | ||||
|     console.log(`Compendium directory ${packsDir} does not exist. Skipping packaging.`); | ||||
|     done(); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // Read all files and directories in the packsDir | ||||
|   fs.readdir(packsDir, (err, files) => { | ||||
|     if (err) { | ||||
|       console.error(`Error reading directory ${packsDir}: ${err}`); | ||||
|       process.exit(1); | ||||
|     } | ||||
|  | ||||
|     // Filter to get only directories | ||||
|     const folders = files.filter(file => { | ||||
|       const fullPath = path.join(packsDir, file); | ||||
|       return fs.statSync(fullPath).isDirectory(); | ||||
|     }); | ||||
|  | ||||
|     if (folders.length === 0) { | ||||
|       console.log(`No compendium folders found in ${packsDir}. Skipping packaging.`); | ||||
|       done(); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     let completed = 0; | ||||
|     folders.forEach(folder => { | ||||
|       const packName = folder; // Use the folder name as the pack name | ||||
|       const inputPath = path.join(packsDir, folder); | ||||
|       const command = `npx fvtt package pack --type System --id ${moduleId} -n "${packName}" --in "${inputPath}" --out "${outputDir}" --yaml`; | ||||
|  | ||||
|       exec(command, (err, stdout, stderr) => { | ||||
|         if (err) { | ||||
|           console.error(`Error packaging compendium ${packName}:\n${stderr}`); | ||||
|           process.exit(1); | ||||
|         } else { | ||||
|           console.log(`Compendium ${packName} packaged successfully.`); | ||||
|           console.log(stdout); | ||||
|           completed++; | ||||
|           // When all compendiums have been processed, call done() | ||||
|           if (completed === folders.length) { | ||||
|             done(); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     }); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Ensure Output Directory Exists | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| function ensureOutputDirExists() { | ||||
|   const outputDir = './packs'; | ||||
|   if (!fs.existsSync(outputDir)) { | ||||
|     fs.mkdirSync(outputDir); | ||||
|   } | ||||
|   return Promise.resolve(); | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Upload to Package Registry | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
|  | ||||
| async function uploadToPackageRegistry(done) { | ||||
|   const manifestFile = 'system.json';  | ||||
|   const zipFile = process.env.ZIPFILE || 'kidsonbrooms.zip'; | ||||
|   const packageRegistryUrl = process.env.PACKAGE_REGISTRY_URL; | ||||
|   const ciJobToken = process.env.CI_JOB_TOKEN; | ||||
|  | ||||
|   if (!packageRegistryUrl || !ciJobToken) { | ||||
|     console.error('PACKAGE_REGISTRY_URL or CI_JOB_TOKEN is not defined.'); | ||||
|     process.exit(1); | ||||
|   } | ||||
|  | ||||
|   try { | ||||
|     // Upload manifest file | ||||
|     const manifestUploadUrl = `${packageRegistryUrl}/${manifestFile}`; | ||||
|     console.log(`Uploading ${manifestFile} to ${manifestUploadUrl}`); | ||||
|  | ||||
|     let response = await fetch(manifestUploadUrl, { | ||||
|       method: 'PUT', | ||||
|       headers: { | ||||
|         'JOB-TOKEN': ciJobToken, | ||||
|         'Content-Type': 'application/octet-stream', | ||||
|       }, | ||||
|       body: fs.createReadStream(manifestFile), | ||||
|     }); | ||||
|  | ||||
|     if (response.ok) { | ||||
|       console.log(`Uploaded ${manifestFile} successfully.`); | ||||
|     } else { | ||||
|       console.error(`Failed to upload ${manifestFile}: ${response.statusText}`); | ||||
|       process.exit(1); | ||||
|     } | ||||
|  | ||||
|     // Upload zip file | ||||
|     const zipUploadUrl = `${packageRegistryUrl}/${zipFile}`; | ||||
|     console.log(`Uploading ${zipFile} to ${zipUploadUrl}`); | ||||
|  | ||||
|     response = await fetch(zipUploadUrl, { | ||||
|       method: 'PUT', | ||||
|       headers: { | ||||
|         'JOB-TOKEN': ciJobToken, | ||||
|         'Content-Type': 'application/octet-stream', | ||||
|       }, | ||||
|       body: fs.createReadStream(zipFile), | ||||
|     }); | ||||
|  | ||||
|     if (response.ok) { | ||||
|       console.log(`Uploaded ${zipFile} successfully.`); | ||||
|     } else { | ||||
|       console.error(`Failed to upload ${zipFile}: ${response.statusText}`); | ||||
|       process.exit(1); | ||||
|     } | ||||
|  | ||||
|     done(); | ||||
|   } catch (error) { | ||||
|     console.error(`Error uploading files: ${error.message}`); | ||||
|     process.exit(1); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /* Publish to FoundryVTT                | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| async function publishToFoundry(done) { | ||||
|   const moduleManifestPath = 'system.json'; | ||||
|   const moduleManifest = JSON.parse(fs.readFileSync(moduleManifestPath)); | ||||
|  | ||||
|   const id = moduleManifest.name; | ||||
|   const version = moduleManifest.version; | ||||
|   const compMin = moduleManifest.compatibility.minimum; | ||||
|   const compVer = moduleManifest.compatibility.verified; | ||||
|   const compMax = moduleManifest.compatibility.maximum; | ||||
|   const manifest = process.env.MANIFEST_PERMALINK_URL || `https://gitlab.com/${process.env.CI_PROJECT_NAMESPACE}/${process.env.CI_PROJECT_NAME}/-/releases/${process.env.CI_COMMIT_TAG}/downloads/${moduleManifestPath}`; | ||||
|   const notes = `https://gitlab.com/${process.env.CI_PROJECT_NAMESPACE}/${process.env.CI_PROJECT_NAME}/-/releases/${process.env.CI_COMMIT_TAG}`; | ||||
|  | ||||
|   const dryRun = process.env.dry_run === 'true'; | ||||
|   const authToken = process.env.FOUNDRY_API_KEY; | ||||
|  | ||||
|   if (!authToken) { | ||||
|     console.error('Foundry VTT API authentication token (FOUNDRY_API_KEY) is not defined.'); | ||||
|     process.exit(1); | ||||
|   } | ||||
|  | ||||
|   // Construct the payload | ||||
|   const payload = { | ||||
|     id: "kidsonbrooms", | ||||
|     release: { | ||||
|       version: version, | ||||
|       manifest: manifest, | ||||
|       notes: notes, | ||||
|       compatibility: { | ||||
|         minimum: compMin, | ||||
|         verified: compVer, | ||||
|         maximum: compMax, | ||||
|       }, | ||||
|     }, | ||||
|   }; | ||||
|  | ||||
|   if (dryRun) { | ||||
|     payload['dry-run'] = true; | ||||
|   } | ||||
|  | ||||
|   // Send the POST request to Foundry VTT API | ||||
|   const response = await fetch('https://api.foundryvtt.com/_api/packages/release_version', { | ||||
|     method: 'POST', | ||||
|     headers: { | ||||
|       'Content-Type': 'application/json', | ||||
|       Authorization: authToken, | ||||
|     }, | ||||
|     body: JSON.stringify(payload), | ||||
|   }); | ||||
|  | ||||
|   const responseData = await response.text(); | ||||
|  | ||||
|   if (responseData.includes('success')) { | ||||
|     console.log('Successfully published to Foundry VTT:'); | ||||
|     console.log(JSON.stringify(responseData, null, 2)); | ||||
|     done(); | ||||
|   } else { | ||||
|     console.error('Failed to publish to Foundry VTT:'); | ||||
|     console.error(JSON.stringify(responseData, null, 2)); | ||||
|     process.exit(1); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* ----------------------------------------- */ | ||||
| /*  Update systen.json with Download URL | ||||
| /* ----------------------------------------- */ | ||||
|  | ||||
| function updateSystemJson(done) { | ||||
|   const ManifestPath = 'system.json'; | ||||
|   const Manifest = JSON.parse(fs.readFileSync(ManifestPath)); | ||||
|   const zipUrl = process.env.ZIPFILE_RELEASE_URL || 'https://gitlab.com/wintermyst/kidsonbrooms/-/raw/master/kidsonbrooms.zip?inline=false'; | ||||
|  | ||||
|   Manifest.download = zipUrl; | ||||
|  | ||||
|   fs.writeFileSync(ManifestPath, JSON.stringify(Manifest, null, 2)); | ||||
|   console.log(`Updated module.json with download URL: ${zipUrl}`); | ||||
|   done(); | ||||
| } | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								kidsonbrooms.zip
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kidsonbrooms.zip
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ export class KidsOnBroomsActor extends Actor { | ||||
|   /** | ||||
|    * Override getRollData() that's supplied to rolls. | ||||
|    */ | ||||
|   getRollData() { | ||||
|   getRollDataPC() { | ||||
|     let data = { ...this.system }; | ||||
|    | ||||
|     // Wand bonuses | ||||
| @@ -18,6 +18,12 @@ export class KidsOnBroomsActor extends Actor { | ||||
|    | ||||
|     return data; | ||||
|   } | ||||
|  | ||||
|   getRollDataNPC() { | ||||
|     let data = { ...this.system}; | ||||
|  | ||||
|     return data; | ||||
|   } | ||||
|    | ||||
|   _getWandBonus(type) { | ||||
|     const bonuses = { | ||||
|   | ||||
| @@ -7,9 +7,9 @@ | ||||
|   return loadTemplates([ | ||||
|  | ||||
|     // Actor partials. | ||||
|     "systems/kids-on-brooms/templates/actor/parts/actor-features.html", | ||||
|     "systems/kids-on-brooms/templates/actor/parts/actor-adversity.html", | ||||
|     "systems/kids-on-brooms/templates/actor/parts/actor-stats.html", | ||||
|     "systems/kids-on-brooms/templates/actor/parts/actor-npc-stats.html", | ||||
|     "systems/kidsonbrooms/templates/actor/parts/actor-features.html", | ||||
|     "systems/kidsonbrooms/templates/actor/parts/actor-adversity.html", | ||||
|     "systems/kidsonbrooms/templates/actor/parts/actor-stats.html", | ||||
|     "systems/kidsonbrooms/templates/actor/parts/actor-npc-stats.html", | ||||
|   ]); | ||||
| }; | ||||
|   | ||||
| @@ -42,12 +42,13 @@ Hooks.once('init', async function() { | ||||
|     decimals: 2 | ||||
|   }; | ||||
|  | ||||
|  | ||||
|   // Define custom Document classes | ||||
|   CONFIG.Actor.documentClass = KidsOnBroomsActor; | ||||
|  | ||||
|   // Register sheet application classes | ||||
|   Actors.unregisterSheet("core", ActorSheet); | ||||
|   Actors.registerSheet("kids-on-brooms", KidsOnBroomsActorSheet, { makeDefault: true }); | ||||
|   Actors.registerSheet("kidsonbrooms", KidsOnBroomsActorSheet, { makeDefault: true }); | ||||
|  | ||||
|   //If there is a new chat message that is a roll we add the adversity token controls | ||||
|   Hooks.on("renderChatMessage", (message, html, messageData) => { | ||||
| @@ -67,7 +68,7 @@ Hooks.once('init', async function() { | ||||
|         } | ||||
|  | ||||
|         // Check if the token has already been claimed -- Contigency if the button somehow activates again | ||||
|         if (message.getFlag("kids-on-brooms", "tokenClaimed")) { | ||||
|         if (message.getFlag("kidsonbrooms", "tokenClaimed")) { | ||||
|           ui.notifications.warn("This adversity token has already been claimed."); | ||||
|           return; | ||||
|         } | ||||
| @@ -85,10 +86,10 @@ Hooks.once('init', async function() { | ||||
|           // Update the message content | ||||
|           tokenControls.update({ content: updatedContent }); | ||||
|           // Set the flag on the chat message to indicate that the token has been claimed | ||||
|           tokenControls.setFlag("kids-on-brooms", "tokenClaimed", true); | ||||
|           tokenControls.setFlag("kidsonbrooms", "tokenClaimed", true); | ||||
|         } else { | ||||
|           // Emit a socket request to update the message to show that the token has been claimed | ||||
|           game.socket.emit('system.kids-on-brooms', { | ||||
|           game.socket.emit('system.kidsonbrooms', { | ||||
|             action: "takeToken", | ||||
|             messageID: message.id, | ||||
|             actorID: actor.id, | ||||
| @@ -104,12 +105,10 @@ Hooks.once('init', async function() { | ||||
|     } | ||||
|   }); | ||||
|    | ||||
|  | ||||
|    | ||||
|    | ||||
|  | ||||
|   // Preload Handlebars templates. | ||||
|   return preloadHandlebarsTemplates(); | ||||
|  | ||||
|    | ||||
| }); | ||||
|  | ||||
| /*** | ||||
| @@ -118,7 +117,7 @@ Hooks.once('init', async function() { | ||||
|  * if a player wants to claim a token we will update the message since they do not have the permissions | ||||
|  */ | ||||
| Hooks.once('ready', function() { | ||||
|   game.socket.on('system.kids-on-brooms', async (data) => { | ||||
|   game.socket.on('system.kidsonbrooms', async (data) => { | ||||
|     console.log("Socket data received:", data); | ||||
|  | ||||
|     if (data.action === "spendTokens") { | ||||
| @@ -190,7 +189,7 @@ Hooks.once('ready', function() { | ||||
|       // Update the message content | ||||
|       tokenControls.update({ content: updatedContent }); | ||||
|       // Set the flag on the chat message to indicate that the token has been claimed | ||||
|       tokenControls.setFlag("kids-on-brooms", "tokenClaimed", true); | ||||
|       tokenControls.setFlag("kidsonbrooms", "tokenClaimed", true); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| @@ -277,7 +276,7 @@ async function _onSpendAdversityTokens(e, rollMessageId) { | ||||
|     console.log(`Requesting to spend ${tokensToSpend} tokens for ${rollActor.name} by ${spendingPlayerActor.name} (cost: ${tokenCost})`); | ||||
|  | ||||
|     // Emit a socket request to spend tokens | ||||
|     game.socket.emit('system.kids-on-brooms', { | ||||
|     game.socket.emit('system.kidsonbrooms', { | ||||
|       action: "spendTokens", | ||||
|       rollActorId: rollActorId, | ||||
|       spendingActorId: spendingPlayerActor.id,  // Send the player's actor who is spending the tokens | ||||
| @@ -300,8 +299,8 @@ async function _updateRollMessage(rollMessageId, tokensToSpend, isPlayerOfActor) | ||||
|   } | ||||
|    | ||||
|   // Retrieve current tokens spent from flags, or initialize to 0 if not found | ||||
|   let cumulativeTokensSpent = message.getFlag("kids-on-brooms", "tokensSpent") || 0; | ||||
|   let newTotal = message.getFlag("kids-on-brooms", "newRollTotal") || message.rolls[0].total; | ||||
|   let cumulativeTokensSpent = message.getFlag("kidsonbrooms", "tokensSpent") || 0; | ||||
|   let newTotal = message.getFlag("kidsonbrooms", "newRollTotal") || message.rolls[0].total; | ||||
|  | ||||
|   /*if(isPlayerOfActor) | ||||
|   { | ||||
| @@ -312,10 +311,10 @@ async function _updateRollMessage(rollMessageId, tokensToSpend, isPlayerOfActor) | ||||
|   }*/ | ||||
|   cumulativeTokensSpent += tokensToSpend; | ||||
|   newTotal += tokensToSpend; | ||||
|   await message.setFlag("kids-on-brooms", "newRollTotal", newTotal); | ||||
|   await message.setFlag("kidsonbrooms", "newRollTotal", newTotal); | ||||
|  | ||||
|   // Update the message's flags to store the cumulative tokens spent | ||||
|   await message.setFlag("kids-on-brooms", "tokensSpent", cumulativeTokensSpent); | ||||
|   await message.setFlag("kidsonbrooms", "tokensSpent", cumulativeTokensSpent); | ||||
|   let newContent = ""; | ||||
|   if(cumulativeTokensSpent === 1) | ||||
|   { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ export class KidsOnBroomsActorSheet extends ActorSheet { | ||||
|   static get defaultOptions()  | ||||
|   { | ||||
|     return foundry.utils.mergeObject(super.defaultOptions, { | ||||
|       classes: ["kids-on-brooms", "sheet", "actor"], | ||||
|       classes: ["kidsonbrooms", "sheet", "actor"], | ||||
|       width: 800, | ||||
|       height: 800, | ||||
|       tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "features" }] | ||||
| @@ -19,7 +19,9 @@ export class KidsOnBroomsActorSheet extends ActorSheet { | ||||
|   get template()  | ||||
|   { | ||||
|     console.log("template", this.actor) | ||||
|     return `systems/kids-on-brooms/templates/actor/actor-${this.actor.type}-sheet.html`; | ||||
|     return `systems/kidsonbrooms/templates/actor/actor-${this.actor.type}-sheet.html`; | ||||
|  | ||||
|  | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
| @@ -40,8 +42,6 @@ async getData() | ||||
|  | ||||
|   // Add roll data for TinyMCE editors. | ||||
|   context.rollData = context.actor.getRollData(); | ||||
|   // Add roll data for TinyMCE editors. | ||||
|   context.rollData = context.actor.getRollData(); | ||||
|  | ||||
|  | ||||
|   console.log(context); | ||||
| @@ -87,7 +87,16 @@ async getData() | ||||
|       if (dataset.roll) { | ||||
|       let label = dataset.label ? `${dataset.label}` : ''; | ||||
|       // Get the roll data and include wand bonuses | ||||
|       let rollData = this.actor.getRollData(); | ||||
|  | ||||
|       let rollData; | ||||
|       if(this.actor.type == "character") { | ||||
|         rollData = this.actor.getRollDataPC(); | ||||
|       } else if (this.actor.type == "npc") { | ||||
|         rollData = this.actor.getRollDataNPC(); | ||||
|       } else { | ||||
|         console.log("ERROR: UNKNOWN AUTHOR TYPE"); | ||||
|         return; | ||||
|       } | ||||
|       let totalBonus = 0; | ||||
|       console.log(dataset.roll); | ||||
|       // Apply wood bonus if it matches the stat being rolled for | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "kids-on-brooms", | ||||
|   "version": "2.0.0", | ||||
|   "name": "kidsonbrooms", | ||||
|   "version": "1.1.5", | ||||
|   "description": "CSS compiler for the Kids On Brooms system", | ||||
|   "scripts": { | ||||
|     "build": "gulp build", | ||||
| @@ -15,12 +15,15 @@ | ||||
|   "license": "MIT", | ||||
|   "private": true, | ||||
|   "dependencies": { | ||||
|     "form-data": "^4.0.0", | ||||
|     "gulp": "^5", | ||||
|     "gulp-autoprefixer": "^8", | ||||
|     "gulp-replace": "^1.1.4", | ||||
|     "gulp-sass": "^5", | ||||
|     "gulp-sourcemaps": "^2.6.5", | ||||
|     "gulp-zip": "^5.0.1", | ||||
|     "kids-on-brooms": "file:" | ||||
|     "kidsonbrooms": "file:", | ||||
|     "node-fetch": "^2.7.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "sass": "^1.79.1" | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| The Kids On Brooms System Implemented in FoundryVTT, reupload from https://github.com/Singularity-Lathe-VTT/kids-on-brooms | ||||
| The Kids On Brooms System Implemented in FoundryVTT | ||||
|  | ||||
| To get support create a issue on this Repository | ||||
| To get support create a issue on this Repository or join my discord: | ||||
|  | ||||
| https://discord.gg/4sTXjxs5Yv | ||||
| @@ -3,10 +3,15 @@ | ||||
| } | ||||
|  | ||||
| .sheet-header { | ||||
|   @include flexbox(row, wrap, flex-start); // Use a mixin for flexbox | ||||
|   flex: 0 auto; | ||||
|   display: flex; | ||||
|   flex-direction: row; | ||||
|   flex-wrap: wrap; | ||||
|   align-items: flex-start; | ||||
|   justify-content: flex-start; // Use a mixin for flexbox | ||||
|   flex: 0 1 auto; | ||||
|   overflow: hidden; | ||||
|   margin-bottom: 10px; | ||||
|   height: 110px; | ||||
|  | ||||
|   .profile-img { | ||||
|     flex: 0 0 100px; | ||||
| @@ -38,7 +43,7 @@ div.editor-border { | ||||
| } | ||||
|  | ||||
| .sheet-tabs { | ||||
|   flex: 0; | ||||
|   flex: 1; | ||||
| } | ||||
|  | ||||
| .sheet-body, | ||||
|   | ||||
| @@ -14,6 +14,10 @@ | ||||
| @import 'global/flex'; | ||||
| @import 'global/base'; | ||||
|  | ||||
| .editor-container { | ||||
|   min-height: 200px; /* Adjust this value as needed */ | ||||
| } | ||||
|  | ||||
| /* Styles limited to kidsonbrooms sheets */ | ||||
| .kids-on-brooms { | ||||
|   @import 'components/forms'; | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| { | ||||
|   "id": "kidsonbrooms", | ||||
|   "title": "Kids on Brooms System", | ||||
|   "description": "The Kids on Brooms system for FoundryVTT! - Deprecated", | ||||
|   "version": "1.1.0", | ||||
|   "description": "The Kids on Brooms system for FoundryVTT!", | ||||
|   "version": "1.1.6", | ||||
|   "compatibility": { | ||||
|     "minimum": 12, | ||||
|     "verified": 12 | ||||
|     "verified": 12.331 | ||||
|   }, | ||||
|   "authors": [{ | ||||
|     "name": "Joscha Maier" | ||||
|   | ||||
							
								
								
									
										68
									
								
								template.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								template.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| { | ||||
|   "Actor": { | ||||
|     "types": ["character", "npc"], | ||||
|     "templates": { | ||||
|       "base": { | ||||
|         "stats": { | ||||
|           "fight": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           }, | ||||
|           "flight": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           }, | ||||
|           "brains": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           }, | ||||
|           "brawn": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           }, | ||||
|           "charm": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           }, | ||||
|           "grit": { | ||||
|             "value": "d4", | ||||
|             "stat": 0, | ||||
|             "magic": 0 | ||||
|           } | ||||
|         }, | ||||
|         "description": "" | ||||
|       } | ||||
|     }, | ||||
|     "character": { | ||||
|       "templates": ["base"], | ||||
|       "trope": "", | ||||
|       "age": "", | ||||
|       "pronouns": "", | ||||
|       "fear": "", | ||||
|       "motivation": "", | ||||
|       "grade":"", | ||||
|       "broom": { | ||||
|         "name": "", | ||||
|         "look": "", | ||||
|         "mechanicalbenifit": "" | ||||
|       }, | ||||
|       "wand": { | ||||
|         "wood": "", | ||||
|         "core": "" | ||||
|       }, | ||||
|       "animalfamiliar":"", | ||||
|       "schoolbag": "", | ||||
|       "adversityTokens": 0, | ||||
|       "tropequestions": "", | ||||
|       "strengths": "" | ||||
|     }, | ||||
|     "npc": { | ||||
|       "templates": ["base"] | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -32,21 +32,27 @@ | ||||
|     <div class="tab features" data-group="primary" data-tab="features"> | ||||
|       <section class="grid grid-3col"> | ||||
|         <section class="main grid-span-2"> | ||||
|           {{> "systems/kids-on-brooms/templates/actor/parts/actor-features.html"}} | ||||
|           {{> "systems/kids-on-brooms/templates/actor/parts/actor-adversity.html"}} | ||||
|           {{> "systems/kidsonbrooms/templates/actor/parts/actor-features.html"}} | ||||
|           {{> "systems/kidsonbrooms/templates/actor/parts/actor-adversity.html"}} | ||||
|         </section> | ||||
|  | ||||
|         <aside class="sidebar"> | ||||
|           {{> "systems/kids-on-brooms/templates/actor/parts/actor-stats.html"}} | ||||
|           {{> "systems/kidsonbrooms/templates/actor/parts/actor-stats.html"}} | ||||
|            | ||||
|         </aside> | ||||
|  | ||||
|       </section> | ||||
|     </div> | ||||
|     {{!-- Schoolbag Tab --}} | ||||
|     <div class="tab features editor-border" data-group="primary" data-tab="schoolbag"> | ||||
|       {{editor schoolbag target="system.schoolbag" engine="prosemirror" button=false collaborate=false editable=true}} | ||||
|  | ||||
|     <div class="tab schoolbag" data-group="primary" data-tab="schoolbag"> | ||||
|       {{!-- Schoolbag Tab --}} | ||||
|       <div class="tab features editor-border" data-group="primary" data-tab="schoolbag"> | ||||
|         {{editor schoolbag target="system.schoolbag" engine="prosemirror" button=false collaborate=false editable=true}} | ||||
|       </div> | ||||
|     </div> | ||||
|      | ||||
|      | ||||
|      | ||||
|  | ||||
|     {{!-- Strengths Tab --}} | ||||
|     <div class="tab features editor-border" data-group="primary" data-tab="strengths"> | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
|  | ||||
|     {{!-- Owned Features Tab --}} | ||||
|     <div class="tab features" data-group="primary" data-tab="features"> | ||||
|       {{> "systems/kids-on-brooms/templates/actor/parts/actor-npc-stats.html"}} | ||||
|       {{> "systems/kidsonbrooms/templates/actor/parts/actor-npc-stats.html"}} | ||||
|     </div> | ||||
|   </section> | ||||
| </form> | ||||
|   | ||||
| @@ -25,7 +25,7 @@ | ||||
|         <!-- Magic rolling and input --> | ||||
|         <Fieldset class="flexrow flex-group-center"> | ||||
|           <legend>Magic</legend> | ||||
|           <span class="ability-mod rollable" data-roll="1{{stat.value}}x+1d4+{{stat.stat}}" data-label="Magic Roll for {{key}}" data-key="{{key}}"> | ||||
|           <span class="ability-mod rollable" data-roll="1{{stat.value}}x+1d4x+{{stat.stat}}" data-label="Magic Roll for {{key}}" data-key="{{key}}"> | ||||
|             <i class="fas fa-dice-d20"></i> | ||||
|           </span> | ||||
|         </Fieldset> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user