Campaign Logger Wiki
Our Cookie & Privacy Policy Disclaimer Legal Notice & Imprint
Common Questions
Where can I download the Campaign Logger software?
The mobile and desktop apps are currently offline while we update them to be GDPR compliant.
Only the Web App can be purchased at this time. We are looking into offering paid versions on other platforms.
Where can I purchase the full version of Campaign Logger?
Here are solutions to the most common problems:
With the Campaign Logger generator functionality you can produce randomized results with just one click - from simple random table rolls to complex content generators.
Programmers can use the Campaign Logger functionality via the provided Application Programming Interface (API).
Note: The API is still at beta stage and is subject to change!
Currently the following API functions are available:
Contributing
How can I join in and make Campaign Logger even better?
Our Cookie & Privacy Policy Disclaimer Legal Notice & Imprint
Common Questions
Where can I download the Campaign Logger software?
The mobile and desktop apps are currently offline while we update them to be GDPR compliant.
Only the Web App can be purchased at this time. We are looking into offering paid versions on other platforms.
Where can I purchase the full version of Campaign Logger?
- You can subscribe to Campaign Logger here: https://www.roleplayingtips.com/campaign-logger/
- Login & Registration Guide
- See the Campaign Logger cheat sheet.
Here are solutions to the most common problems:
- How to change your Campaign Logger password: a short tutorial video
- Windows Store is giving me the error message code 0x80004002 when installing the Campaign Logger App for Windows.
Try the following:- Press the key combination Windows + X
- Select the Command Line (Administrator) option.
- Enter the following command: sfc /scannow
- The Chrome browser no longer allows downloading logs
This is a problem encountered with version 54 of the Chromebrowser. To solve it, follow these steps:- Reset your user settings.
- Completely shutdown Chrome (and all extensions).
- Start Chrome again.
- Now all downloads should work.
- I Cannot Register My App / I'm Having App Registration Problems
Note: the unlocked/registered mobile apps are currently only available to Lifetime Charter Members.
A monthly subscription to the Campaign Logger web app is still available. For more details, visit this page: https://www.roleplayingtips.com/campaign-logger/
For Lifetime Charter Members who are experiencing troubles with mobile/Windows registration, please continue to read on.
First, make sure you've got the latest app version.
1. Download the latest app here:
https://docs.campaign-logger.com/doku.php?id=start
Due to store restrictions for the types of features we add, we're not able to update the same app every time. So sometimes you need to download a new app and re-register.
2. Make a Backup
If you are using an old version or a trial version, export your data in JSON format before you install or update your app.
3. Have You Already Registered The Web App?
If so, use the QR code solution in step 3a. If not, skip to step 3b.
3a. Yes, I have registered the Web app: Use the QR Code.
Open the web app and open a Campaign Log.
Click on the cog icon in the top right corner.
Choose the Edit License Key option.
Choose the Show License Key QR Code option.
Open the mobile app on your device.
Scan the QR code.
You should now be successfully registered.
3b. I have not registered the Web app: Paste your email and license into a test plain text file.
Note that spaces and invisible characters from a careless copy & paste operation will result in a registration error. To avoid that, paste your email and license key into Notepad or some other plain text editor.
Check that there are no spaces before or after the email address and the license code.
Also ensure that the license contains all the == signs at the end. Those are part of the license code.
4. Open the app and register
Now open the app and register, copying and pasting the text from a plain text file to prevent spaces and invisible characters. - Remote Support Client
- How to License & Unlock Your iOS App
Here's a tutorial on how to use your Campaign Logger license key to unlock the full version of Campaign Logger iOS.
Step 1: Download Campaign Logger from the Apple Store
Download link: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1192701222&mt=8
Step 2: Open App and Find Preferences Area
Open preferences:
Step 3: Paste in your License Key
Open the license entry form:
Paste in your email and license key.- Avoid pasting any spaces before or after your email and key
- Include the double == signs at the end of your key
Step 4: Done!
You should get a confirmation message of success like this when done:
Encounter A Problem?
If you get stuck on applying your license to the iOS app, please send us a help request- How to Copy a Campaign Log to Your iOS App
You've got your campaign log on the web or another device and now want to use it on your iOS App. Here's how.
Step 1: Export Your Log
Using the Web App as an example, you first go to your Campaign Logs home screen:
When the export overlay pops up, click on the JSON button:
the app will automatically download the file for you.
Step 2: Put Your Exported Log File on Your iOS Device
Use whatever method you normally use to transfer files to your iOS device:- Dropbox
- iCloud
- iTunes
- etc.
- We prefer Dropbox.
Step 3: Open Your iOS Campaign Logger App and Open Preferences
Step 4: Open Your iOS Campaign Logger App and Open Preferences
Choose the JSON file to import.
Click the Choose File button on the overlay that pops up next:
Find the file using the service or method you chose to transfer the JSON file export over:
If you used Dropbox, click the More button and slide the Dropbox toggle on to green:
Then go back to the Choose File options and you'll see Dropbox as an available service:
When successful, the app will give you a confirmation message:
Encounter A Problem?
Please give the import a couple of minutes to work. Sometimes it takes the app awhile to parse through all the information.
If import fails the first time, please try again. Just to be sure you selected the correct file, etc.
The very first time I opened my iOS Campaign Logger app and imported a log file, it would not work for me until I created a test Campaign Log within the app. I do not know if it was just me or if it's a bug. But if import fails after two tries, then create a new Campaign Log within the app and try the import again. That worked great for me.
If you get stuck on importing Campaign Log files into the iOS app, please send us a help request - How to Import Characters from Hero Lab
You can export character portfolios and import them as tagged NPCs in Campaign Logger.
Note that this is a beta feature.
We've only tested this with D&D 5E portfolios.
If you encounter any bugs, please let us know and send over your Hero Lab portfolio .por file for us to test.
Step 1. Export From Hero Lab
Build your NPCs and PCs in Hero Lab.
Campaign Logger supports single and multi-character Hero Lab portfolios.
Export from Hero Lab as a .por portfolio file:
Step 2. Import Into Campaign Logger
Create a temporary Campaign Log to import the Hero Lab portfolio into.
You want to use a temporary log in case the import does not work. You don't want to ruin your main Campaign Log or experience a partial import and have to do some clean-up afterwards.
Once your temporary Campaign Log is created, open it up.
Then click on the import button under the Log Entry area, to the right.
Import might take awhile depending on how many characters you have in the portfolio.
Step 3. Copy NPCs to Your Main Campaign Log
All characters imported will automatically be tagged by their name.
They'll also be given a bit of formatting to help you read the stat block better.
Once you've successfully imported your Hero Lab characters, use the Log Entry copy function to copy/move characters to your main Campaign Log:
- For more questions, see the Campaign Logger FAQ at RolePlayingTips.com.
If you want to ask questions or advice from other Campaign Logger users, visit the Campaign Logger For RPG Google+ group.Check out Johnn Four's Campaign Logger playlist on YouTube.- If you get stuck or find a bug, send us a help request via the Campaign Community forum.
With the Campaign Logger generator functionality you can produce randomized results with just one click - from simple random table rolls to complex content generators.
- Generator Service - Help
Generators are defined using JSON-formatted text. The expected data consists of an object (the generator or root object) which contains name, resultPattern, and tables objects. The name and resultPattern objects are strings, whereas tables is an array of objects.
A table object contains a name and entries objects. The name object is a string and entries is an array of strings.
Example JSON
JSON:{ "name": "Simple NSC Generator", "resultPattern": "{name}", "tables": [ { "name": "name", "entries": [ "Adam", "Eve" ] } ] }
More details can be found in an example file in the Campaign Logger open repository.
How It Works
The resultPattern and the table entries can contain any text you wish. But text enclosed in curly braces (i.e. { and }) is treated as a table call.
Whenever a table call is encountered, an entry from that table is selected to replace the call. If the selected entry also includes references they get expanded, too. References (and thereby table names) must start with a letter and may only include letters, digits, and blanks. References (and thereby table names) are case-sensitive.
See Also- For more complete instructions, see the Generator Guide document.
- Use the generator from your site
Endpoint Address: https://generator.campaign-logger.com/
Example using jQuery
JavaScript:function generate(generatorJson) { $.ajax("https://generator.campaign-logger.com/", { method: "POST", contentType: "application/json", data: generatorJson }).then(function (data) { var resultText = data.result; // ... }); }
- Generator Guide: more detailed instructions for using the generator features
- Generator Library
There are plenty of ready-made tables that can be used with Campaign Loggeras such, or customized as you like. The full generator library is available in the Campaign Logger open repository: - The generators in the library can be either used directly from the online libary (which requires online access), or copied to your device for offline use.
Using Generators Directly from the Library
If you are online, you can call The Campaign Logger generator library from your own generators. This works just like a standard table call, just by adding the lib: string in front of the table name. For example {lib:color} would call the color generator from the library and output a random color.
Copying Files to Your Campaign Logger installation- To download a single file from the repository, locate an interesting generator file (ending in .json) from the list and follow these instructions:
- How to Copy a Generator File from the Repository
To download a single file from the generator library repository, click the desired file name (ending in .json) and follow these steps:- Click the Raw button to display the .json file contents.
- Copy all of the displayed text: Press (Ctrl+A) and then (Ctrl+C).
- Then in Campaign Logger, click the Options button (the cog icon) and select the Manage Custom Generators option.
- From the Generators drop down menu, select the Add new generator… option and click the OK button.
- Select the default text from the New Generator window (Ctrl+A), and replace the default generator content by pasting the copied generator text into the text box (Ctrl+V).
- Click the Save button.
- In the Campaign Logger user interface, there is a button underneath the Log Entry section called Show Generators. Clicking this button will show your custom generators.
- The Generators display can have several tabs. The Uncategorized tab shows the generators that do not have their Categories property defined. Other generators are listed under different tabs, each according to their Categories value.
- Note that some generators require several .json files to function, so you may need to copy more files from the repository.
- How to Copy the Whole Generator Library
To download the whole of the open generator library as a zip package, use this link: https://github.com/open-campaign-logger/generator-library/archive/master.zip
- How to Copy a Generator File from the Repository
- To download the whole library as a zip package, use this link: https://github.com/open-campaign-logger/generator-library/archive/master.zip
- To download a single file from the repository, locate an interesting generator file (ending in .json) from the list and follow these instructions:
- Generators installed on your own Campaign Logger setup can be called from any table just like other tables, just by adding the gen: string in front of the table name. For example {gen:jewelry} would call a jewelry generator that you have installed on your own Campaign Logger setup.
See the Generator Guide document for more information.
Library File Name Conventions
Some of the library file names have suffixes that indicate the word form produced by that generator:- The ending _wia means “with indefinite article”.
- The ending _formal indicates an uppercase beginning.
- The ending _pl indicates plural form.
- The Generator Service test bed can be used to try out generators and check their validity.
- The Wordpress plugin can be used to embed generators to a Wordpress blog.
- The Random Creation blog contains sample generators and tips for creating your own.
Programmers can use the Campaign Logger functionality via the provided Application Programming Interface (API).
Note: The API is still at beta stage and is subject to change!
Currently the following API functions are available:
- Authentication
To authenticate to the API endpoints you need to define two header entries in every request- CL-Username
- CL-Password
- and provide your credentials in plain text - as we use HTTPS they get encrypted automatically on their way through the net.
Example using jQuery
JavaScript:$.ajax("https://campaign-logger.com/gateway/rest/public/logs", { dataType: "json", headers: { "CL-Username": "...", "CL-Password": "..." }, type: "GET" }).then(function (data, status, jqXHR) { // success alert("Found " + data.length + " log(s)"); }, function (jqXHR, status, error) { // failure alert("Error: " + error); });
- Create, Read, Update, Delete Logs
This API is protected, see Authentication above.
Old endpoints are available since January 2017, new endpoints are available since November 2017.
Create Logs
Create a new log
Method: POST
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log
Request Body: JSON
JSON:{ "name": "Name of the new log" }
Response Body: JSON
JSON:{ "id": "id of new log", "rev": "first revision of new log", "name": "name of new log" }
Get a list of all your logs
Method: GET
Old Endpoint Address: https://campaign-logger.com/gateway/rest/public/logs
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log
Request Body: empty
Response Body: JSON
JSON:[ { "id": "id of log #1", "rev": "current revision of log #1", "name": "name of log #1" }, { "id": "...", "rev": "...", "name": "..." }, { "id": "id of log #n", "rev": "current revision of log #n", "name": "name of log #n" } ]
JavaScript:$.ajax("https://campaign-logger.com/gateway/rest/public/logs", { dataType: "json", headers: { "CL-Username": "...", "CL-Password": "..." }, type: "GET" }).then(function (data, status, jqXHR) { // success alert("Found " + data.length + " log(s)"); }, function (jqXHR, status, error) { // failure alert("Error: " + error); });
Method: GET
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{id}
Request Body: empty
Response Body: JSON
Less:{ "id": "id of log", "rev": "current revision of log", "name": "name of log" }
Update an existing log
Method: PUT
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{id}
Request Body: JSON
JSON:{ "rev": "current revision of log", "name": "New name of log" }
JSON:{ "id": "id of log", "rev": "new revision of log", "name": "name of log" }
Delete a log
Method: DELETE
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{id}
Request Body: empty
Response Body: JSON
JSON:{ "id": null, "rev": null, "name": null }
- Create, Read, Update, Delete Log Entries
This API is protected, see Authentication.
Old endpoints are available since January 2017, new endpoints are available since November 2017.
Create Log Entries
Create a new log entry
Method: POST
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{log-id}/entry
Request Body: JSON
JSON:{ "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist" }
JSON:{ "id": "id of new log entry", "rev": "first revision of new log entry", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist", "htmlText": "rawText rendered to HTML", "tags": [ "@Name A", "#Place B", "..." ] }
Get all entries of one of your logs
Method: GET
Old Endpoint Address: https://campaign-logger.com/gateway/rest/public/logs/{log-id}
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{log-id}/entry
Request Body: empty
Response Body: JSON
JSON:[ { "id": "id of log entry #1", "rev": "current revision of log entry #1", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist", "htmlText": "rawText rendered to HTML", "tags": [ "@Name A", "#Place B", "..." ] }, { "id": "...", "rev": "...", "rawText": "...", "timestamp": "...", "uniqueId": "...", "htmlText": "...", "tags": [ "..." ] }, { "id": "id of log entry #n", "rev": "current revision of log entry #n", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist", "htmlText": "rawText rendered to HTML", "tags": [ "@Name C", "#Place D", "..." ] } ]
JavaScript:$.ajax("https://campaign-logger.com/gateway/rest/public/logs/...", { dataType: "json", headers: { "CL-Username": "...", "CL-Password": "..." }, type: "GET" }).then(function (data, status, jqXHR) { // success alert("Found " + data.length + " entries"); }, function (jqXHR, status, error) { // failure alert("Error: " + error); });
Method: GET
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{log-id}/entry/{entry-id}
Request Body: empty
Response Body: JSON
JSON:{ "id": "id of log entry", "rev": "current revision of log entry", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist", "htmlText": "rawText rendered to HTML", "tags": [ "@Name A", "#Place B", "..." ] }
Update an existing log entry
Method: PUT
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{log-id}/entry/{entry-id}
Request Body: JSON
JSON:{ "rev": "current revision of log entry", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist" }
JSON:{ "id": "id of log entry", "rev": "new revision of log entry", "rawText": "text as entered by user", "timestamp": "yyyy-MM-ddThh:mm:ss", "uniqueId": "anything uniquely identifying this entry among all entries that might ever exist", "htmlText": "rawText rendered to HTML", "tags": [ "@Name A", "#Place B", "..." ] }
Delete one entry of one of your logs
Method: DELETE
New Endpoint Address: https://campaign-logger.com/gateway/rest/public/log/{log-id}/entry/{entry-id}
Request Body: empty
Response Body: JSON
JSON:{ "id": null, "rev": null, "rawText": null, "timestamp": null, "uniqueId": null, "htmlText": null, "tags": null }
- Using the generator from your own site: see above
- API client demo
Contributing
How can I join in and make Campaign Logger even better?
- You can submit wishes and feature ideas via Google Forms.
- How Can I Contribute to the Campaign Logger Project?
Though Campaign Logger is a commercial app, we cannot afford to pay staff at this time. Server costs, tool subscriptions, and ecommerce costs whittle revenues away.
However, we have built Campaign Logger with extensibility in mind. And if you would like to help make Campaign Logger more valuable to you and your fellow game masters, we'd welcome the help and would love to work with you!
Before You Start
After reading this page, please email us with your desire to help and what you have in mind.
This will prevent duplicate work. And we can fill you in on any technical requirements or workflow steps to avoid wasting any of your time.
We'll also add you to our Slack Team.
If You Are A Coder
API
We have a basic API. See above for information about it.
Feel free to work in your own dev environment and build apps using our API.
For example, check out this cool Google Maps + Campaign Logger driven campaign map.
PDF Export Features
We launched a basic MVP of the PDF export feature in 2016. We'd love to see additional features added, such as:- Making links in PDF files clickable and working.
- Layout/design tweaks (we're looking for suggestions, as well)
- If you can write C# code and have knowledge of Syncfusion's PDF library and a license for that library, let us know.
If You Are A Designer
We'd like to let users upload different skins and styles for their Campaign Logs. A little CSS can make a Campaign Log feel special, thematic, and unique!
You would design a style file for us and we'd test it out as a proof of concept. If users like the option, then we'd like your help creating additional style files.
We also need a designer's expertise for improving the UX of the tool. If you have UX experience, please send us your feedback.
If You Are A Writer
Cookie Monster wants more generators! Nom nom nom.
We're looking for basic and complex random generators. Basic ones are like name generators. Complex ones are like kingdom generators.
Creating a generator requires just a little bit of JSON knowledge. The rest is up to your imagination and writing skills.
Use our Generator Service to build and test your generators.
Then send your file to us when ready.
Contact Us
If you have other ideas for helping out, please feel free to email us.
You can also visit the Campaign Logger community to ask questions and talk out ideas with us and your fellow Campaign Logger game masters.