Giter VIP home page Giter VIP logo

avalonmudclient's People

Contributors

blakepell avatar dependabot[bot] avatar

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

avalonmudclient's Issues

Trigger bug

If the #trigger is used on a trigger in anyway that creates a trigger during the trigger loop it will cause a crash during the enumeration of the for/each loop.

A possible fix would be to defer the contents of those triggers (that create other triggers) until after the for/each has completed enumerating. There is almost no chance the newly created trigger would need to fire on the same line (that line has already been triggered).

AutoExec profile setting sometimes not firing.

Rethink this, it's not currently very useful. The issue is that commands aren't processed currently if the profile's connection to the game is open. If the game auto connects the autoexec sometimes fires and works and sometimes fired and aren't processed because the connection to the game isn't open (race condition).

One of two things should occur (or, both):

1.) Convert this to be a Lua Event instead that gets executed. This would skip the command interpreter unless lua.Send was called but would allow the user to run setup commands.
2.) Allow commands to process even if the connection isn't open and just let the network commands error if they're called.

Trigger / GagElementGenerator efficiency

Expose the underlying Regex so that the GagElementGenerator can call it directly. Gags are unique in that they can be called repeatedly on lines from the AvalonTerminal (e.g. AvalonEdit) but will never need to process a command or go through any of the additional overhead. Currently the Trigger class calls Regex.Match directory because the returned object is needed to process groups. The GagElementGenerator however can call IsMatch which doesn't need to create the Match object and simply returns a true of false.

1.) Expose the Regex as a public property.
2.) Change the GagElementGenerator to call the Regex.IsMatch method directly.

DSL: Damage Calculator

Jacob Coulter:
@blake Pell another idea for your client. A built in damage calculator for watching arena fights. Like the old damn dam calc for zmud.

DSL Plugin: Radio to OOC tab

Move this from the IC to the OOC tab:
[06:05:52 PM]: Traice radios 'Now Playing: "Rip N Dip" - Getter (Kill the Noise Remix) - plug.dj/dark-and-shattered-logs/'

Change plugin library to be netcore library instead of netstandard.

Change the example plugin library to be a netcoreapp3.1 type. The rationale for this is that the specific plugin library is for this WPF implementation and as a result we'll want to be able to include things like, Windows and Controls and MenuItems, etc. That will make the plugins very flexible/powerful.

If we expand Xamarin or UWP the core Avalon.Common can be shared via netstandard but the plugins should be platform specific to leverage the UI models of whatever that platform is.

Malwarebytes Flags as Malware

Flagged as MachineLearning/Anomalous.100%

Malwarebytes
www.malwarebytes.com

-Log Details-
Protection Event Date: 4/27/21
Protection Event Time: 4:19 PM
Log File: 3c01eaae-a79e-11eb-84e1-00d861055e78.json

-Software Information-
Version: 4.3.0.98
Components Version: 1.0.1273
Update Package Version: 1.0.39865
License: Premium

-System Information-
OS: Windows 10 (Build 19041.928)
CPU: x64
File System: NTFS
User: System

-Blocked Malware Details-
File: 1
MachineLearning/Anomalous.100%, C:\Users\jmbzy\AppData\Local\Programs\AvalonMudClient\Avalon.dll, Quarantined, 0, 392687, 1.0.39865, , shuriken, , EB3B3655A14BF8A754F57094B4F18CF7, 5F6BBA5B661EBE5C2FA96585E0BD4B13D10F7796BC507D62AA97F40459E85F10


(end)

Trigger Hash Command / Notify Property

Update the trigger hash command to allow for the additional fields to be set. Go into the Trigger class and make sure that the properties added implement Notify Property if they'll be shown through any kind of binding.

DSL Plugin: Some emotes going into the comm panel

Xenophon:

  • Some emotes are going into the comm panel, possibly when switched into another mob.
  • Listen command not scraping into comm panel.

Me:

  • See if "-->" prefix is scraping. Perhaps have an option for this.

SafeIndexOf/IndexOf Extensions for ReadOnlySpan<char>

When the new Argus.Core version is released remove these and replace the calls with the Argus.Core versions (which are identical):

public static int SafeIndexOf(this ReadOnlySpan<char> span, ReadOnlySpan<char> value, int startIndex)
public static int IndexOf(this ReadOnlySpan<char> span, ReadOnlySpan<char> value, int startIndex)

SQLite Query Control

Create a SQLite query control that gives a user everything they need to manage a SQLite database that they can choose to use. By default we will create a new SQLite database with every profile.

Crash Bug in FullyObservableCollection

Unhandled exception (TaskScheduler.UnobservedTaskException)
Unhandled exception in Avalon v2022.4.22.1
A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. (Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index'))

Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at Avalon.Common.Utilities.FullyObservableCollection`1.get_Item(Int32 index) in \Git\AvalonMudClient\src\Avalon.Common\Utilities\FullyObservableCollection.cs:line 65
   at Avalon.Common.Utilities.TriggerObservableCollection.Enumerable()+MoveNext() in \Git\AvalonMudClient\src\Avalon.Common\Utilities\TriggerObservableCollection.cs:line 41
   at Avalon.Conveyor.DisableGroup(String groupName) in \Git\AvalonMudClient\src\Avalon.Client\Conveyor.cs:line 740
   at lambda_method207(Closure , Object , Object[] )
   at MoonSharp.Interpreter.Interop.MethodMemberDescriptor.Execute(Script script, Object obj, ScriptExecutionContext context, CallbackArguments args) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Interop\StandardDescriptors\ReflectionMemberDescriptors\MethodMemberDescriptor.cs:line 346
   at MoonSharp.Interpreter.Interop.OverloadedMethodMemberDescriptor.<>c__DisplayClass37_0.<GetCallback>b__0(ScriptExecutionContext context, CallbackArguments args) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Interop\StandardDescriptors\ReflectionMemberDescriptors\OverloadedMethodMemberDescriptor.cs:line 511
   at MoonSharp.Interpreter.Execution.VM.Processor.Internal_ExecCall(ExecutionControlToken ecToken, Int32 argsCount, Int32 instructionPtr, CallbackFunction handler, CallbackFunction continuation, Boolean thisCall, String debugText, DynValue unwindHandler) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Execution\VM\Processor\Processor_InstructionLoop.cs:line 857
   at MoonSharp.Interpreter.Execution.VM.Processor.Processing_Loop(ExecutionControlToken ecToken, Int32 instructionPtr) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Execution\VM\Processor\Processor_InstructionLoop.cs:line 166
   at MoonSharp.Interpreter.Execution.VM.Processor.Call(ExecutionControlToken ecToken, DynValue function, DynValue[] args) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Execution\VM\Processor\Processor.cs:line 71
   at MoonSharp.Interpreter.Script.Internal_Call(ExecutionControlToken ecToken, DynValue function, DynValue[] args) in \Git\AvalonMudClient\src\Avalon.MoonSharp\Script.cs:line 407
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
   at Avalon.Common.Scripting.MoonSharpEngine.ExecuteFunctionAsync[T](String functionName, String[] args) in \Git\AvalonMudClient\src\Avalon.Common\Scripting\MoonSharpEngine.cs:line 372

Binding Settings MainWindow

Make the settings that are being manually set work with binding. Specifically the quick toggles on the command bar. Previous attempts had them being able to set the variables but would not update even though property notification was sent and two way binding was set.

Important: Make sure than anything that is bound calls INotifyProperty.

Hush command (from K'anata)

[1:41 PM]: K'anata OOC: 'Make sure it has chat capture, for all channels, and configureable which ones. Plus hush of channels for 1hr.'

Lua Exception on Enum Lookup

This call worked on subsequent calls. Not sure why the first call failed when retrieving the enum value from a string.

=> Lua Exception: (Line 32, Position 11-96): cannot convert a string to a clr type MahApps.Metro.IconPacks.PackIconMaterialKind
=> Lua Function: func_tr_4dacdb10_0443_402f_842f_5379bd9332a4
=> Lua Internal Data: ExecuteFunctionAsync<T>: Lua Error running function func_tr_4dacdb10_0443_402f_842f_5379bd9332a4("A minotaur spectator is struck by lightning from a grand arcanium sword.", "is struck by lightning from", "")

Crash Bug: ExecuteStaticAsync

From the interactive Lua panel:

Unhandled exception (TaskScheduler.UnobservedTaskException)
Unhandled exception in Avalon v2022.7.3.2
A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. (One or more errors occurred. (')' expected (to close '(' at line 5) near '<eof>'))

One or more errors occurred. (')' expected (to close '(' at line 5) near '<eof>')
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at MoonSharp.Interpreter.Script.<>c__DisplayClass56_0.<DoStringAsync>b__0(Task`1 prevTask)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
   at Avalon.Common.Scripting.MoonSharpEngine.ExecuteStaticAsync[T](String code)

Input from trigger not displayed as input

Hey Blake,

I have this trigger that sends multiple lines of text to DSL and I noticed that only the first line is color marked correctly as an input line.

Trigger information:

image

image

image

Julie Stone

Add a back buffer for viewing of history.

Add a back buffer to view text that was previously sent to the mud client. Ideally page up and page down would invoke the back buffer which would take over the upper part of the screen allow the player to scroll back through text that previously was sent while also being able to see text that is incoming on the lower half of the screen.

Allow for command separator char to be changed

Currently ; is used to split commands when multiple commands are sent. In some muds, namingly ROM 2.4 the ; character is used for short hand to send group tells. Set ; as the default but allow for the character to be changed via the settings.

Idea/Request from Julie Stone.

Lua script validation

See if there is anything in Moonsharp to validate Lua syntax, if not, write an extension method to validate syntax. Have places where Lua is used then validate and provide to the user syntax validation on save.

Add settings dialog to edit the core settings.

Currently the settings dialog allows for the editing of all of the profile specific settings. We also need a dialog or tabs on the current settings dialog that allow for the core client settings to be altered (these can be thought of as the global settings).

Crash bug in Lua Editor

If you type a . on an empty line the editor will crash. The issue is it invokes the intellisense and crashes finding the previous word (where there is none on an empty line). Put proper bounds checking in. This bug may exist in the SQLite database control as well.

Lua Echo Bleeds Colors

Current the Lua command to echo to the terminal uses the interpreters echo (which is mainly used for echoing text that's incoming from the game). This needs to be changed to construct it's own line that disregards the previous color from the mud (this will both preserve the correct ANSI color for incoming mud text but allow the Lua script to echo whatever it needs in whatever color it needs.

The bug is, when you echo something in Lua it keeps showing the previous color sent from the mud.

DSL Plugin: ACFL Tracking

From TJ:
Specifically for ACFL The ability to define however many characters (8 players on the field) and when they get toasted,
it pulls up a fresh window with their name and the 6 tick countdown to their unghost

That would be spectacular for ACFL coordination since it would allow me to track who is alive and dead. If you wanted to get jiggy with it, you could have it auto-populate off of the flagscore

So that the progress bars for each player can be color coordinated for red/blue

When it populates it can be set to the max-bar (like perm effects) that states ALIVE and when they are toasted it starts to tick down from 6 and when they unghost it pushes a toast to alert that they have respawned

#clearflag or the act line "^(variable) Team WON Capture the Flag!!" can clear the window

Ideal setup:
Breakaway ACFL window that pops up on Flagscore. I'll get the print syntax for it because it SHOULD provide "red team" "blue team" data. It can pull the first 4 names from each list (there is a fifth slot on each team that appears to have been scrapped last second) to populate the ACFL window with progress/status bars synced to their team color. Default state is full progress bar ALIVE status, but on parsing a toast message, sets the timer to 6 ticks that ticks down every tick similar to affects window, pushing a (name) has unghosted!) toast at 0

DSL: Affects tracking

Track affects and surface them on the UI. Provide feedback on the screen and via animations that pulse the command bar a color when spells like sanctuary or haste fall.

Trigger / Characters

Jonas:
Currently triggers work for all or just one character. Make it so a trigger can be used for multiple characters.

DSL Plugin: Filtered Logging

Xenophon: My thoughts are a client that could output either pk or rp logs easily would be epic
Rhien: Extracting the battle stuff would be straightforward. I think that'd be pretty easy to do on the fly. Could probably could show the log then you could select "Filter to RP", "Filter to PK".
Xenophon: Tick boxes for what to output or something so you can customize
Xenophon: You'd get a lot of interest from kingdom types for that alone

Window offscreen detection and mitigation.

Now that the client can save the last window position and restore it as a setting, add code that will try to detect if the Window is off the bounds of all monitors (and move it into a visible position if that's the case).

This could come about because of changes in resolution (or because it was moved off of the screen).

Lua errors on multiple entry

The Lua engine is having exceptions when more than one script enter the engine at a time. Look into the MoonSharp documentation and see if either multiple instances need to be started up for async calls or if they need to be called in a different way. The exceptions can manifest with different exceptions. Examples:
Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')

--> Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
--> Index was outside the bounds of the array.
--> Object reference not set to an instance of an object.
--> Unexpected type in table ctor : 0
--> Unexpected type in table ctor : 10
--> attempt to index a nil value
--> attempt to index a number value

To test this I created an alias that executed a Lua script and then repeated in fast succession with the #repeat command.

Lua Alias (named test):

local data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
local value = data[math.random(1, 10)]
local anotherVar = value * 5;
Cmd:Echo("Your value is " .. anotherVar)

Hash Command:

#repeat 50 test

Word completion with shift+tab

From Joules:

I am used to the shift + tab for word auto-completion based on history and was sad to see it was not a feature. This feature helps me to quickly complete the full name of the character or mob I am targeting or interacting with. The setup was nice, and I am excited to try it out.

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.