GithubHelp home page GithubHelp logo

uoinfusion / infusion Goto Github PK

View Code? Open in Web Editor NEW
36.0 10.0 14.0 3.11 MB

Ultima Online assistant similar to Injection or Razor or Phoenix focused on easy scripting in C# and Yoko Injection script. Compatible with classic client, CrossUO and OrionUO.

License: MIT License

C# 100.00%
ultima-online uoerebor moria

infusion's Introduction

Infusion

Build status Join the chat at Discord

Infusion is an Ultima Online assistant similar to Injection. Infusion focuses on powerful and easy scripting features. You can write scripts in C# using either built in code editor that has source code highlighting, auto-complete and REPL (Read Eval Print Loop) which makes getting started with script authoring much easier.

Infusion supports all clients - write your scripts once and run them on official client or on CrossUO/OrionUO/ClassicUO. You don't need to rewrite them if you want switch your client.

If you are not familiar with programming you can start using example scripts which covers many repetitive task in the game. They are designed to be easy to use and they guide you through a configuration process. You don't need to change any code to start using them.

You can use Visual Studio or Visual Studio Code if you are a skilled developer and you want to enjoy their excellent refactoring and debugging capabilities.

Yoko Injection Scripts

Infusion can interpret Yoko Injection scripts. To get started, watch a video how to push a button on a gump from Yoko Injection Script.

If you want make writing Yoko Injection scripts a lot easier, you can install Injection script extension for Visual Studio Code.

Have you ever scratch your head because of "impossible" bugs? Make your live easier and debug your scripts directly from Infusion - watch a video how to do that.

If you find any missing feature or API, please create an issue here on Github.

Getting Started with C# Scripts

You may take a look at some videos:

Current C# API is in alpha release. It means that APIs are not stable yet and there may be some breaking changes.

Client support

Infusion works with official clients and CrossUO/OrionUO/ClassicUO. Infusion supports encryption and is able to connect to OSI servers.

Please, create an issue if you find any bug, missing feature or server/client combination that doesn't work for you.

UOErebor

We develop, test and regularly use Infusion in game on highly customized shard UOErebor (Czech only). Which means that Infusion is pretty stable on this shard and there is a lot of example scripts you can immediately start using:

  • Display status bar of your friends in an external window. These status bars never disappear so you always see how many HP your friends have.
  • Hiding with always walk feature to utilize stealth.
  • Targeting red karma only, skipping own summon/pets.
  • Fast and reliable walking from script.
  • Read status of spell chargers from script.
  • Damage notification.
  • Show experience in game window title.
  • Open bank using banker or house menu.
  • Using travel stones.
  • Filtering sounds, overall light and weather effect.
  • Looting.
  • Chasing and shaving sheep.
  • Easier item manipulation (moving food/regs only, moving the same type).
  • Predefined names for many item types/color combinations (spell scrolls, food, regs, tools, resources, doors and many others).
  • Popular UO client patches (like FPS patch) using UOPatcher.

infusion's People

Contributors

3hmonkey avatar dependabot[bot] avatar jakublinhart avatar nirad 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

infusion's Issues

Add search to ,help command

If ,help cannot find the specified command, it should list all commands containing specified text in their name.

Filter cancelling WaitTargetObject when client requests skill/spell/use

If a script calls WaitTargetObject, but server doesn't request a target for some reason, then WaitTargetObject sends the target to server even when user does a targeted action. Example (UOErebor)

  1. Healing calls WaitTargetObject(UO.Me); and uses bandages.
  2. A player doesn't have any clean bandages so server never asks for a target.
  3. The player casts a spell and WaitTargetObject kicks in - targets the player.

Script must handle these cases but Injection could be a little bit more safe.

The filter prohibits conscious use of this behavior - it could be supported by a new argument of WaitTargetObject (filter on/filtr off).

Wrong handling of already logged in character

If player logs out, his/her character stays in game a little while. If user relogs, then it is not required to select a character. Infusion doesn't handle this case well and (at least) Sphere closes the network connection.

Reimplement "always walk" feature by filtering walk request packets

Example script implements "always walk" feature by using stamina filter. If you turn on "always walk" then the stamina filter sets stamina to 1 on a client and the client tries to walk then. This is kind of a hack and is it is not very reliable. Stamina is not always restored after turning off "always walk".

Publish skill changed event

It would be nice to make the notification message more visible in Infusion console - e.g. use the same color as client by default does. Still it must be written to log file as well.

The benefit is also that the message will not be part of LegacyApi.

Layer is not updated when item is dragged

  1. Equip an item to hand.
  2. Check that the item is on appropriate layer.
  3. Drag the item and check the layer again.

Expected result is that the item has no layer, currently it is on the original layer.

Maybe there are more cases when the layer is not properly updated.

Remove Refresh from GameObjectCollections

Refresh usage can lead to many problems and it is difficult to use properly.

For example you track a monster. If the monster disappears from view, then Refresh returns null and you loose your mobile reference including its id. It is better to maintain id and lookup the mobile directly. The problem is related to the immutable game objects model.

The benefits of immutable model seems to be still strong enough to keep them despite the fact that the programming model is somehow different than in Injection.

Just remove the Refresh method before RC, it can be reintroduced later.

Installer

Create an installer to install Infusion to Program Files and creates folders in user's home folder for scripts and logs, so it is easy for not experienced users to not mix executable files with files requiring modifications.

Is it possible to track corpse type?

The problem is that all corpses have the same type (0x2006), so you cannot say what the corpse belongs to. Maybe you don't want to loot bodies of other players. Or on UOErebor you don't want to rip a body of mustang, otherwise you would not be able to resurrect him.

You can use the name of the body for this but you have to click the body first. The client needs to know the corpse type to display it properly.

Packet 0xAF (Display Death Action) provides a link between mobile and corpse.

The question is: how client does know how to display a corpse and is it possible to access this information from a script?

Clean-up login.cfg and uo.cfg after launching Infusion

Infusion uses login.cfg and uo.cfg to pass proxy url and user name/password to Ultima Online client. It makes harder to use simultaneously Infusion with Injection or similar tools. Insution uninstalation is more difficult also.

Potion cooldown counter

The basic script is already there, but it needs to be finished, polished and tested.

Currently it detects only usage of specific potion bottle, but more common way is to invoke .potionheal, .potioninvis and so on commands.

potions.csx

Looting script doesn't detect 'Paralyze' effect

If player tries to rip a body before looting, then the script is stuck until timeout, because Sphere doesn't send any information when using an item (doubleclick, 0x06 packet) and player is paralyzed.

This problem could be mitigated by cancelling the script when server sends "You are frozen and can not move." and paralyzed player tries to move.

This is more general problem for all waits after doubleclicking any item.

Consider using null pattern for GameObjects

So it is not necessary to check a GameObject for null when retrieving it from UO.Items/Mobiles/Corpses.

Something like this should be possible then:

if (UO.Items[myItemId].GetDistance(UO.Me) < 2)
if (UO.Items[myItemId].Exists)

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.