• Hello game master! Welcome to our growing community. Please take a moment to Register (top right button, see how: Slides).

    If you use Campaign Logger, you can use the same login details - we've linked the app to this forum for secure and easy single sign-on for you.

    And please drop by the Introductions thread and say hi.
Old DokuWiki Content

Old DokuWiki Content

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?
How can I add formatting to log entries?
Can you help me with a technical issue?
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
    fetch.php

    Step 2: Open App and Find Preferences Area
    Open preferences:
    fetch.php

    Step 3: Paste in your License Key
    Open the license entry form:
    fetch.php

    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
  • fetch.php

    fetch.php

    Step 4: Done!
    You should get a confirmation message of success like this when done:
    fetch.php

    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:
    fetch.php

    When the export overlay pops up, click on the JSON button:
    fetch.php

    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
    fetch.php

    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:
    fetch.php

    Find the file using the service or method you chose to transfer the JSON file export over:
    fetch.php

    If you used Dropbox, click the More button and slide the Dropbox toggle on to green:
    fetch.php

    Then go back to the Choose File options and you'll see Dropbox as an available service:
    fetch.php

    When successful, the app will give you a confirmation message:
    fetch.php

    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:
    fetch.php

    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.
    fetch.php

    Import might take awhile depending on how many characters you have in the portfolio.
    fetch.php

    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:
    fetch.php
Where can I get more help?
Generator
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:
        1. Click the Raw button to display the .json file contents.
        2. Copy all of the displayed text: Press (Ctrl+A) and then (Ctrl+C).
        3. Then in Campaign Logger, click the Options button (the cog icon) and select the Manage Custom Generators option.
        4. From the Generators drop down menu, select the Add new generator… option and click the OK button.
        5. 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).
        6. Click the Save button.
        7. 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.
        8. 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.
        9. 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
    • To download the whole library as a zip package, use this link: https://github.com/open-campaign-logger/generator-library/archive/master.zip
  • 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.
Generator Resources
API

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"
    }
    Read Logs

    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"
    }
    ]
    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);
    });
    Get one existing log
    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 Logs

    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"
    }
    Response Body: JSON

    JSON:
    {
    "id": "id of log",
    "rev": "new revision of log",
    "name": "name of log"
    }
    Delete Logs

    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"
    }
    Response Body: JSON
    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",
    "..."
    ]
    }
    Read Log Entries

    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",
    "..."
    ]
    }
    ]
    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 + " entries");
    }, function (jqXHR, status, error) {
    // failure
    alert("Error: " + error);
    });
    Get one entry of one of your logs
    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 Log Entries

    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"
    }
    Response Body: JSON
    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 Log Entries

    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
    }
Examples

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.
Hero Lab, the Hero Lab logo, Realm Works, and Fog of World are registered trademarks of LWD Technology, Inc.
Author
JochenL
Views
5,743
First release
Last update
Rating
5.00 star(s) 1 ratings

More resources from JochenL

Share this resource

Latest reviews

Thhe JSON formats and API are all extremely cool to see preserved.
Top