Code Monkey home page Code Monkey logo

steffendx / gonorth Goto Github PK

View Code? Open in Web Editor NEW
556.0 27.0 28.0 41.26 MB

GoNorth is a story and content planning tool for RPGs and other open world games.

License: MIT License

C# 19.93% CSS 3.28% JavaScript 67.21% HTML 7.81% Shell 0.01% Ruby 0.01% PowerShell 0.01% Lua 0.14% Dockerfile 0.01% Batchfile 0.01% Handlebars 0.10% Less 1.30% SCSS 0.13% TypeScript 0.08%
gaming gamedev-tool storytelling map dotnet-core dotnetcore mongodb knockoutjs bootstrap dialog

gonorth's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gonorth's Issues

Adding skills, npcs, and other things.

I go into the skills management screen. I click on "Create Template" and from there I proceed to create a skills. It doesn't show up. I'm honestly not sure what I am supposed to do, and I hate to use the "Issues" thread to ask for help.

[Enhancement] Additional Nodes

Looking to see if it would be possible to add more actions that are player oriented.

1: Player speak to NPC - enables the ability to view NPC data as well as get the outcome of the interaction, whether it be conversation, updating objectives, or quest completion.

2: Player Interact - enables the ability to target a location or item objective.

Additionally - It would be nice to have smarter Location, NPC, and Item nodes to be used in the Node editors as referencing objects/items/npcs feels overly nested and difficult to follow when replicating into non-importable sources.

[Feature Request] Export a quest

I think the real strength of GN as a lore/story building tool is that you can export the data in an easy way. I've already worked on being able to automatically generate characters purely off the NPC JSON, items and skills also.

I think its worth having one for quests. Currently it cannot be exported

Publish executable releases for installers and/or portable versions of the app (e.g., via GitHub Actions)

As you've probably noticed, multiple people have remarked on the setup process being too complicated and error-prone. As a potential user, I'd also agree that there should be a very simple way of running the application locally that "just works ". The possibility of things not working aside, it should also be very fast to get started since otherwise some users won't bother giving the app a try.

Where I'm unsure is in how far there exist tools to create this for the technology you're using. Once that's been researched, you could set up a build pipeline to automatically attach the installer/portables to each release.

That part I've recently set up myself, using GitHub actions, which seems to be the simplest method of doing this. I could provide some assistance since I still remember most of the details :)

Redeploying Docker Drops Project Object Folders

After code updates are made, rebuilding and redeploying with docker-compose will discard all contents of the internal project folders (NpcImages, KirjaFiles, ItemImages, MapImages, TaskImages, SkillImages). This is presumably due to these folders being hosted completely within the docker container which is discarded following a build.

Antiforgery deserialization token error

After updating to the latest release (1.8.1.0), I'm seeing this error in the console, and it might explain why the map and quest page is empty for me. I don't see anything specifically mentioned in the update log. Did I miss anything?

      An exception was thrown while deserializing the token.
      Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The antiforgery token could not be decrypted.
       ---> System.Security.Cryptography.CryptographicException: The key {3f9a4971-7bcb-4458-a3a7-bfb6ca1b6644} was not found in the key ring.
         at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
         at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
         at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
         at Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
         --- End of inner exception stack trace ---
         at Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
         at Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery.GetCookieTokenDoesNotThrow(HttpContext httpContext)```

[Feature Request] Karta zoom/size

Using any resolution images in karta seems to result in a similiarly small tile that, when loaded initially is pretty tiny (fully zoomed out) and somewhat unreadable when filled with markers.
As it seems to stay approximately the same size (2048 is almost the same as 128), maybe initially load it with a zoom that makes it fit the frame or something similar.

Document docker deployment, diligently

Couldn't resist the alliteration.

I figured I'd make an issue for this so it doesn't fall off of the radar (mine, or anyone else's). Although docker exists for this repo, Github's wiki system is not friendly to contributions. Once the documentation repository, website, or directory gets created, I plan on making those changes ASAP.

Minified JS file incorrect case

the file projectManagement.viewmodel.min.js should be named
projectManagement.ViewModel.min.js

I built a new server today with the latest release, and this issue prevented me from created a project. I'm not sure if Windows and IIS ignores capitilization. But my combination of Firefox+Ubuntu Client & Server+Nginx as a proxy is particular about it.

I've fixed it myself, by renaming the file.

Now I can get stuck in :)

Unable to run Deployment First run from Docker

I ran the command docker-compose up to bring up the web app. After the docker machines are brought up, I was able to navigate to http://localhost:5000 and saw the login screen. I set a password in appsettings.json for "FirstTimeDeploymentPassword," I then went to http://localhost:5000/Deployment. I keep getting a 500 response with the app console reading:

web_1    | warn: GoNorth.Controllers.DeploymentController[0]
web_1    |       User tried to access first time deployment page while not valid.

Any idea on what can resolve this?

Attached is a screenshot with my current docker version running on macOS 10.13.3 (17D47).

screen shot 2018-02-27 at 14 25 59

Bug: Text doesn't properly scale with zooming in and out

Good day,

When zooming in and out, in the quest and dialogue box view, the text does not scale together with the boxes. The text seems to always remain the same size. In larger quests and dialogues, where zooming out would be very useful, the feature becomes unusable because the text doesn't scale down with the boxes, resulting in text falling behind the borders of the box and not being readable anywhere.

Another small annoyance that we noticed together with this; when zooming in and out, the zooming doesn't happen on the cursor, but rather the top left of the screen. It makes zooming in and out on specific locations rather difficult, and requires the user to also active move towards the right position during the zooming action.

Currently we run v1.8.1.0. Have not updated yet to the latest version, but I don't see any mention of this issue in the history, so I assume this issue is still there.

Still loving the software; keep it up!

Unhandled exception: The GuidRepresentation for the reader is CSharpLegacy

I'm working on a docker container for this so it can be prop'd up on a laptop easily (and technically a swarm? not there yet.) I've run into the following exception when attempting to use the 'configure database' option inside server administration (full error log):

gonorth_1  |       An unhandled exception has occurred: The GuidRepresentation for the reader is CSharpLegacy, which requires the binary sub type to be UuidLegacy, not UuidStandard.
gonorth_1  | System.FormatException: The GuidRepresentation for the reader is CSharpLegacy, which requires the binary sub type to be UuidLegacy, not UuidStandard.

Feature request: annotate arrows / lines between nodes in quest and dialogue views

Good day once again;

I come today with a small feature request I hope you can consider. It's a small, but handy option. When making larger quests & dialogue nodes, it is sometimes unclear what the flow is between nodes is when there are multiple possible flows. We'd like to propose a small addition to both the quest and dialogue view, to be able to annotate (add text on) lines & arrows between nodes. With this, we should be able to easily specify what each flow means by annotating the lines.

In the form of a user story;

As a content creator, I want to be able to annotate the lines between quest & dialogue nodes, so that I can better clarify what each possible flow does or is caused by

I also want to mention that we are very happy and thankful for your continued support towards all of our feature requests & bug reports. Can we buy you a coffee or beer somewhere?

Karta Map Marker Links Not Switching Map

When placing a Karta marker on a map in the Karta module, clicking on the marker title link doesn't cause the map to switch.

Note: I think the root problem was that with the change from hash to query notation, Map.KartaMarker.prototype.loadContent wasn't updated.

Feature Request: GoNorth Backup system

It would be very convenient to be able to backup/restore the GoNorth system in case of system failure. Do you have any suggestions on how this could be done?

Feature: Autosave, save shortcut or local storage progress

Hello again,

Today, I bring forth another feature request we'd like to propose after extensively using GoNorth. We've noticed that, currently, there is no auto save feature, nor any temporarily saving based on local storage for instance. When building content end to end (NPCs, monsters, skills, quests, dialogue), and having many tabs open as a result, one will likely accidentally close the page or navigate to a different page. Doing either of those causes all unsaved progress to get lost.

I'd like to propose a few options to improve the overall saving functionality & workflow. There are a few options, which I'll elaborate below;

  • As a content creator, I want to have an auto save feature, so that I don't lose major progress when forgetting to use the button

A lot of modern web-based content editing software has an autosave, shortcut or local storage implementation. It has come to an unfortunate surprise to some of my team members that GoNorth currently does not have any of these, resulting in a bit of work getting lost.

  • As a content creator, I want to have a save shortcut (such as CTRL+S) to save my document, so that I don't have to remove my hand from the keyboard towards my house

While nothing major, a small addition could include a shortcut to save. I can imagine that, while working on the larger pages, writing out wiki's, quest setups or dialogue flows, one doesn't want to manually use the mouse to press the save button. A short-cut to save could be a small improvement to workflow.

  • As a content creator, I want to have unsaved progress be saved in the browser's local storage, so that even if I don't save, the progress is still kept after accidentally navigating to a different page or closing the page entirely

Perhaps the most important one; when auto saving is not an option (which currently there isn't yet), most users would expect their progress to be saved in the browsers local storage. This allows them to swap pages, close tabes, close the browser entirely, and they would still have their work-in-progress changes. This feature naturally does not replace the save functionality all together, but can greatly help a user in preventing loss of work.

As always, we are currently very pleased with GoNorth and we hope you'll consider these three features. Would love to hear back from you.

Empty Screen.

I've followed the directions, went perfectly smooth. I go to localhost:5000 and all I have is a screen that has "Welcome to Project ". Nothing else.
BlankScreen

docker builds appear to be failing

I'm trying to rehome my laptop install of gonorth to a server so I can use it less tethered to one machine but am running into issues. I've tried cloning over the gonorth install from my laptop and rebuilding with that i end up with the below but am allowed to login (all data appears to be missing however):

sudo docker-compose up
Creating mongodb ... done
Creating gonorthlaptop_web_1 ... done
Attaching to mongodb, gonorthlaptop_web_1
web_1      | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
web_1      |       No XML encryptor configured. Key {04d4c90c-d6dc-4b55-bfa0-6c40efb0afff} may be persisted to storage in unencrypted form.
web_1      | Hosting environment: Production
web_1      | Content root path: /app
web_1      | Now listening on: http://[::]:80
web_1      | Application started. Press Ctrl+C to shut down.
web_1      | fail: Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery[7]
web_1      |       An exception was thrown while deserializing the token.
web_1      | System.InvalidOperationException: The antiforgery token could not be decrypted. ---> System.Security.Cryptography.CryptographicException: The key {bdcb965b-99ac-4e9b-836e-b81d840227bc} was not found in the key ring.
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
web_1      |    --- End of inner exception stack trace ---
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.GetCookieTokenDoesNotThrow(HttpContext httpContext)

If I try to start from scratch and just copy over the dbdata i get a much longer series of errors:

GoNorth]$ sudo docker-compose up
Creating mongodb ... done
Creating gonorth_web_1 ... done
Attaching to mongodb, gonorth_web_1
web_1      | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
web_1      |       No XML encryptor configured. Key {6a1b47d2-7348-42b8-9689-2fb2b1e720c9} may be persisted to storage in unencrypted form.
web_1      | Hosting environment: Production
web_1      | Content root path: /app
web_1      | Now listening on: http://[::]:80
web_1      | Application started. Press Ctrl+C to shut down.
web_1      | fail: Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery[7]
web_1      |       An exception was thrown while deserializing the token.
web_1      | System.InvalidOperationException: The antiforgery token could not be decrypted. ---> System.Security.Cryptography.CryptographicException: The key {04d4c90c-d6dc-4b55-bfa0-6c40efb0afff} was not found in the key ring.
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
web_1      |    at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
web_1      |    --- End of inner exception stack trace ---
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)
web_1      |    at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.GetCookieTokenDoesNotThrow(HttpContext httpContext)
web_1      | fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0]
web_1      |       An unhandled exception has occurred: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/mongo:27017" }", EndPoint: "Unspecified/mongo:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
web_1      |          at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
web_1      |          at System.Net.Dns.ResolveCallback(Object context)
web_1      |       --- End of stack trace from previous location where exception was thrown ---
web_1      |          at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |          at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
web_1      |          at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
web_1      |          at System.Net.Dns.<>c.<GetHostAddressesAsync>b__25_1(IAsyncResult asyncResult)
web_1      |          at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
web_1      |       --- End of stack trace from previous location where exception was thrown ---
web_1      |          at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |          at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |          at MongoDB.Driver.Core.Connections.TcpStreamFactory.<ResolveEndPointsAsync>d__10.MoveNext()
web_1      |       --- End of stack trace from previous location where exception was thrown ---
web_1      |          at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |          at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |          at MongoDB.Driver.Core.Connections.TcpStreamFactory.<CreateStreamAsync>d__4.MoveNext()
web_1      |       --- End of stack trace from previous location where exception was thrown ---
web_1      |          at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |          at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |          at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
web_1      |          --- End of inner exception stack trace ---
web_1      |          at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
web_1      |       --- End of stack trace from previous location where exception was thrown ---
web_1      |          at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |          at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |          at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }] }.
web_1      | System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/mongo:27017" }", EndPoint: "Unspecified/mongo:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
web_1      |    at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
web_1      |    at System.Net.Dns.ResolveCallback(Object context)
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
web_1      |    at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
web_1      |    at System.Net.Dns.<>c.<GetHostAddressesAsync>b__25_1(IAsyncResult asyncResult)
web_1      |    at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.Core.Connections.TcpStreamFactory.<ResolveEndPointsAsync>d__10.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.Core.Connections.TcpStreamFactory.<CreateStreamAsync>d__4.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
web_1      |    --- End of inner exception stack trace ---
web_1      |    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }] }.
web_1      |    at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description)
web_1      |    at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask)
web_1      |    at MongoDB.Driver.Core.Clusters.Cluster.<WaitForDescriptionChangedAsync>d__50.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.Core.Clusters.Cluster.<SelectServerAsync>d__43.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.MongoClient.<AreSessionsSupportedAfterSeverSelctionAsync>d__37.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.MongoClient.<AreSessionsSupportedAsync>d__34.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.MongoClient.<StartImplicitSessionAsync>d__26.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.MongoCollectionImpl`1.<UsingImplicitSessionAsync>d__91`1.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at MongoDB.Driver.IAsyncCursorSourceExtensions.<FirstOrDefaultAsync>d__5`1.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at GoNorth.Data.User.UserMongoDbAccess.<GetUserByNormalizedUserName>d__6.MoveNext() in /app/Data/User/UserMongoDbAccess.cs:line 80
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at GoNorth.Authentication.GoNorthUserStore.<FindByNameAsync>d__7.MoveNext() in /app/Authentication/GoNorthUserStore.cs:line 96
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
web_1      |    at Microsoft.AspNetCore.Identity.SignInManager`1.<PasswordSignInAsync>d__34.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at GoNorth.Controllers.AccountController.<Login>d__14.MoveNext() in /app/Controllers/AccountController.cs:line 132
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextActionFilterAsync>d__10.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeInnerFilterAsync>d__14.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeNextResourceFilter>d__22.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeFilterPipelineAsync>d__17.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeAsync>d__15.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.<Invoke>d__4.MoveNext()
web_1      | --- End of stack trace from previous location where exception was thrown ---
web_1      |    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
web_1      |    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
web_1      |    at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext()
^CGracefully stopping... (press Ctrl+C again to force)
Stopping gonorth_web_1 ... done
Stopping mongodb       ... done

Any thoughts on how to get this working?

Feature request: Word count in dialogue and quest boards

Hello!

Best wishes for 2021! I come again today with a proposal, which I hope can be added to the base product.

What I come to propose today is a small feature to add a word count on quest (text boxes) and dialogue boards. Allow me to explain the use case, as I can imagine that this doesn't seem very useful at first glance.

When building a game, one may hire contractors to do small parts of the game. For example, side quests. These contractors are commonly paid on a per-word basis. When someone, as a contractor, builds a side quest, then the payout of this is done based on the amount of words in that quest and/or dialogue. Currently, we didn't find an easy or straight forward way to simply count the words, hence why I'd like to propose this improvement. Alternatives, such as ArcWeave, do have this functionality (but are in return missing a lot of functionality that GoNorth does offer).

Please refer to the below user story if this adds further clearance;

As a project manager / team lead, I would like to be able to see a word count on quest and dialogue boards, so that I can easily calculate contractor payouts for quests/dialogue that this person worked on.

Please share us your thoughts.

Feature request: Export quests

Happy new year!

It seems that GoNorth has a set of export features, combined with a scripting language, which can allow anyone to create a smoother end-to-end integration from design into actual game implementation. This is very awesome. What we did notice is that quests are currently excluded from this, as we do not see the same functionality being available there.

We would like the export & scripting capabilities to be extended into quests, so that we can create our own export script and optimize our design to implementation flow. Is there any possibility in getting this added?

Feature request: Being able to color notes on map views

Hello again,

Today I come with a small feature request; being able to specify a color when creating a note on the map view. Currently they are all white. When having a large number of these notes, it may become difficult to navigate. Having the ability to color these notes would allow users to give each note its own category. This could make navigation on maps with lots of notes considerably easier.

Still rocking GoNorth internally!

Would love to hear back

[Feature Request] Map marker export with coordinates

I can see that the movement targets for the daily routine events has latitude and longitude like so:

"MovementTarget": { "MapId": "84b13232-7897-44fb-a7de-2d35aa651430", "Lat": 55.379112, "Lng": -65.03201, "Name": "testEvent", "ExportName": "testEventMarker" },

in the NPC export.
As such, it would be good to attach these coordinate variables to marker exports. I think the easiest place to do this is just add it as fields to the marker exports along with the ID of the marker and map (such as adding to the actionData for actions):

"ActionData": "{\"mapId\":\"84b13232-7897-44fb-a7de-2d35aa651430\",\"markerId\":\"7cee098b-b36a-4c80-880c-92f36d0ff0cc\",\"markerType\":\"Note\",\"movementState\":\"\"}",

However, a better way might be to export the map in terms of marker exports with their types similar to the movement target above and we just use the Ids to link them. This would be extremely useful for things like auto-generating maps from this export and using coordinates to place items/npcs. Something like:

mapID: <string>, markers: [ {markerType: <string>, markerId: <string>, lat: <float>, lng: <float>, exportName: <string> }, .... ] }

While the map and marker Id's can be exported, however, to my knowledge, there isn't a way to use it without manually creating objects and copy-pasting Id's.

[Feature Request] Karta Labels title display

Currently Karta Labels only reveal their title when clicked like the other Markers. But for those especially it would be more fitting if they displayed it at all times, similar to a typical map label you can find on real world maps.
Otherwise (or maybe additionally :-) ) it would be nice to be able to assign them custom icons.

[NotAnIssue] Upgrading note

Just wanted to leave that here in case anyone else stumbles upon this too: when upgrading from 1.0 to 1.1 i was missing the new Evne module. I figured out that i had to assign the new roles to my account in the admin panel (and it only appeared after logging out and in again, refresh didn't do it).

[Feature Request] Concept map editor?

Hello! What do you think about adding a simple tile map editor to the Karta module?
I think it can be useful for people. Making maps in a different app is an option too, but after that we need to make map img, and modify map everytime we want to change something.

It's just a loose idea, I believe that it would be hard to implement.
Something like this: https://www.mipui.net/app
Example Map.

Bug / improvement: Lock times are too long

Hello!

I want to start off by stating that this is a wonderful peace of software, and we're very pleased with some testing we have given it the past couple of days.

While our testing, we did notice that some page locks were very long. We we're testing it out with several users. Even though these users closed the page in question, and clicked around in other pages of GoNorth, all the pages visited before this remained locked for a pretty extensive time (we didn't explicitly count, but could've been 15 minutes easily). Especially when trying to work on a large map with several people, this becomes quite the issue.

Please let me know if this is intended or not. Perhaps some kind of lock time configuration setting could be added, or perhaps going to a different page will unlock the previous one.

Let me know, and thanks again for making this great software!

JSON Export for NPC's

With the NPC export, under dialogs, how do you know which is the first node to interact with?

In the export array I'd expect a field start or first_node with the uuid of the node, how else do you tell which is the first dialog to appear? Is it that links[][0] is always the first step in a dialog and then you connect the nodes from there?

[Feature Request] Kirja (Wiki) Editor QoL Changes

I've been having some trouble with the editor used for the Wiki pages (Kirja). Most notably, I have difficulty removing formatting (heading styles) or a table of contents when set/inserted by accident. I have a few suggestions/thoughts:

  • My initial thoughts led me to try to update the 'bootstrap-wysiwyg' library to latest version of the actively developed fork (steveathon/bootstrap-wysiwyg). However, I found a few issues that hindered my ability to simply update the library. I noticed you appear to be using a customized version of bootstrap-wysiwyg and you introduced a localization transformations to the library.
  • My second thought is a suggestion for either introducing a toggle button to the editor that would allow direct modification of the underlying HTML (Similar to how you can using Summernote).

[Feature Request] Pictures/Icons for Categories

This is primarily for the Items section, but could be for other parts of GoNorth.

A description field for categories would also be useful, and this could be viewed as part of a 'tooltip'/hovering over the category before clicking.

Usability - node canvas initial view with nodes

When placing nodes on the canvas while it is offset (Position not at 0,0), i.e. a large negative value, the next time the graph loads they are out of view and one could easily think it is empty (maybe a minimap could help?).

[Feature Request] Hiding children nodes

Creation of very large number of nodes can become quickly overwhelming, even with the navigation window at the top left. Being able to hide all child nodes from any parent could be very helpful in organizing the node graph.

Especially since I'm writing dialogue for the player per chapter, grouping nodes and hiding them under a specific node (a reference to the chapter for example), would make it easier to focus on another branch.

[Feature Request] Thumbnails/Size Reduction for Pictures

is there any chance we could have a feature for when you upload an image to items or (soon to be) categories, it can run image-magick(or another library) to reduce the size? (to 300x300) etc. I've been utilizing some place holder images that are quite large in size (2mb+).

Pulling several mb and many requests across the web can be slow.

Storing the original image is important and will still need the ability to download the fullsize image(on demand?).
but for when I'm on Item screens, they should be thumbnails of very small size.

Removing non-empty chapters

Currently, removing a chapter with the 'x' button removes it from the canvas, but clicking save afterwards just spits out errors if it was not empty when removing. It should not be removable when being non-empty (maybe print an error at this point). Or if possible give a confirmation dialog with the option to force remove it (i guess this needs more work with handling missing references/cleanup etc. but could be nice to have)

[Enhancement] adding page for monster

I would like to suggest that adding some pages for monster data will be helped in documenting. it's the same as NPC or items but focusing on monsters.

Improve linking towards other components from quest & dialogue boards

Hello again!

I come with another improvement to propose; hopefully you don't mind. We like this tool and we hope to share some of our thoughts with you on how we can improve it.

During our time with GoNorth, we currently notice how something is missing which we think could add value. Basically, we'd like to propose workflow improvements to making quests & dialogue. I'll elaborate below.

When designing a quest, there's naturally multiple steps to go through. Most noticeably, during a single quest, there may be several dialogues. Currently the dialogue board and quest boards are fully separate, which can remain as it, but I think workflow wise there could be an improvement where we could link / reference between the two.

For example, let's say I'm designing the "My awesome quest" quest. During this awesome quest, we have five dialogue sequences. Workflow wise, it's is rather tedious to go back and forth between this quest and the dialogues, having to manually look for these entries. We propose to add something like a generic "link box" (similar to Player line, NPC line, Choice, Action and Condition boxes) in which one could create a direct reference to a quest, another dialogue, or even things like items. This box could be used in both quest boards and dialogue boards, because both have their use cases for referencing something.

I hope I'm not asking too much, but when linking between quest boards and dialogue boards (and visa versa), we're hoping it would also be possible to link to a specific box within these boards, and have the screen automatically center / focus on said box.

If you find it useful, below are some user stories I could think of if this helps;

  • As a user, I want to have a link/reference box in the quest board, so that I can reference and navigate to referenced items, NPCs, other quests, dialogues, skills, .... and improve my workflow efficiency.
  • As a user, I want to have a link/reference box in the dialogue board, so that I can reference and navigate to referenced items, NPCs, quests, dialogues, skills, .... and improve my workflow efficiency.

Please share us your thoughts.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.