Jump to content

Bourgeon, a client-side plugin system


L1nkZ

Recommended Posts


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

Hey guys,

Sooo, a few days ago, I wanted to try and do something related to RO, but open-source for once ...

I figured, why not make a plugin system ?

The idea is simple: expose an API that will allow anyone to interface with the client through a high-level scripting language.

As far I as I know, this isn't the first RO client plugin system project. If I recall correctly, there was something named ROPS (Ragnarok Online Plugin System) that existed a few years ago, but it has since disappeared.

Edit: I was told that apparently there was also rextensions recently, that went in the same direction as ROPS and gave access to a few hooks for use with C or C++ extensions.

The idea behind this thread is, mainly, to see if there's any interest in such a system, and if there is, to see what people want to be able to do with it.

 

This is totally a work in progress and I don't know where it'll lead or what it's gonna end up like, but it's open-sourced so it'll be potentially re-usable (if anyone's brave enough) anyway.

Here are screenshots picturing different parts of the system as it is right now:

qAV9og3.jpg

MUCrqoi.jpg

 

Link to the github: https://github.com/L1nkZ/Bourgeon

 

Cheers.

Edited by L1nkZ
  • Upvote 5
  • Love 1
Link to comment
Share on other sites


  • Group:  Content Moderator
  • Topic Count:  22
  • Topics Per Day:  0.00
  • Content Count:  639
  • Reputation:   596
  • Joined:  11/25/11
  • Last Seen:  

Awesome.
In what depth are you able to inject the plugin on, what kind of changes can it achieve? I'm really interested.

I see that you can properly retrieve information from the client, but are you able to command the client itself?

Edited by Haziel
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  54
  • Topics Per Day:  0.01
  • Content Count:  1167
  • Reputation:   159
  • Joined:  06/12/12
  • Last Seen:  

Is this like OK, but with running client?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

On 1/25/2018 at 12:45 AM, Haziel said:

Awesome.
In what depth are you able to inject the plugin on, what kind of changes can it achieve? I'm really interested.

I see that you can properly retrieve information from the client, but are you able to command the client itself?

Well, it's merely a PoC at the moment. But anything that you can think of that is event-driven is doable. All it takes is some work and deciding what you want to hook.

At the moment, the only api that "commands" the client is a print_in_chat function that allows writing into the game chat from inside the plugins. As it is now, it would be possible, for example, to make an event-driven Discord or IRC client as a plugin (since you can use the usual python libraries) that would be plugged to the client and printing messages from Discord or IRC channels into the game chat.

 

On 1/25/2018 at 4:01 AM, hendra814 said:

Is this like OK, but with running client?

Yes that's a way of seeing it, with enough support from Bourgeon, you could imagine exposing networking parts (or higher level stuff like, move player, attack mob id) of the client and do whatever.

Edited by L1nkZ
  • Upvote 2
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

Alright, so to further illustrate the idea behind the plugin system I added a couple of examples on the github repository.

First I added the possibility to use items (with ragnarok_client.use_items) from within python plugins and made a basic autopot plugin out of it. You can take a look at the autopot.py plugin example in the examples folder.

And secondly, since a bird in the hand is worth two in the bush, I also added a small irc.py plugin that does what I mentioned in my previous post. The plugin listens to an IRC channel and transfer messages from IRC to the in-game chat. Here's a screenshot:

1RIi7AY.jpg

 

Edited by L1nkZ
edit repo link
  • Upvote 2
Link to comment
Share on other sites


  • Group:  Developer
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  141
  • Reputation:   45
  • Joined:  08/14/12
  • Last Seen:  

>sov

>hercules

 

reeeeeeeeeeeeeeeeeeeeeeee

 

 

  • MVP 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

1 hour ago, Nitrous said:

>sov

>hercules

 

reeeeeeeeeeeeeeeeeeeeeeee

 

 

Here's some rAthena for you :lol:

MUCrqoi.jpg

So yeah, I uploaded a very basic discord plugin on the github repository. It's a bit ugly but it does the job. Need a few things more in the API to make writing plugins a bit easier but right now it's already fairly usable. Debugging plugins is still currently messy because of the lack of exception handling (I'll be working on that) and utf8 support is still missing. I'll keep this thread updated.

Edited by L1nkZ
lel
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  796
  • Reputation:   101
  • Joined:  05/23/12
  • Last Seen:  

Its a nice idea but how about Client-Security? I think there are many ways to abuse this system.

Rynbef~

 

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

4 hours ago, Rynbef said:

Its a nice idea but how about Client-Security? I think there are many ways to abuse this system.

Rynbef~

 

I'm not sure what you mean by client security in this case but I'll assume that you're asking about making use of the plugin system to make bots, for example, rather than using of the plugin system to compromise a client with malicious scripts (although that is also a problem that users must acknowledge).

In this case, well yeah it's clear that there are many things to consider before rushing into implementing new features. Everything that allows the player to automate something is, technically, a step closer to him being able to make a bot.

For example, if we add an API that allows scripts to move the player to given coordinates, we can imagine doing a plugin that would, for example, get along with the tracking system and conveniently do the walk for you, that sounds like good enough use case to me. But then again, what about potential abuses ? Being able to move programmatically is a good start for botting as well.

So it's an open problem right now. But no matter what, a system that is open-source will always benefit to both sides I guess.

Edited by L1nkZ
  • Upvote 2
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  796
  • Reputation:   101
  • Joined:  05/23/12
  • Last Seen:  

Thats exactly what I mean. U have to add some event restrictions like the move system, chat system or else. But it whould be easy to add new bots in my opinion. But I'll check it after a few commits.

 

Rynbef~

Link to comment
Share on other sites

  • 4 weeks later...

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  3
  • Reputation:   2
  • Joined:  04/23/17
  • Last Seen:  

Thats absolutely cool!

I think for the bot matter it should be compiled to a dll and get hash checked so a player cannot script their own plugin. That way server owner can go crazy and build awesome stuff based on your api but in the end you get bound to that stuff they coded. Heck you could even end up writing your own game guard (user input --> event happens you check for ahk --> forward to client or discard)

The possiblities are endless awesome! :3

  • Like 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  84
  • Topics Per Day:  0.02
  • Content Count:  309
  • Reputation:   82
  • Joined:  11/15/11
  • Last Seen:  

@L1nkZ Is it possible to have the "announce of the NPC" advertised in the discord, Instead of chat??

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  40
  • Reputation:   72
  • Joined:  01/24/18
  • Last Seen:  

On 2/21/2018 at 5:11 PM, Popcorn said:

@L1nkZ Is it possible to have the "announce of the NPC" advertised in the discord, Instead of chat??

Hum, I'm not sure what you mean by that, could you elaborate ?

Link to comment
Share on other sites

  • 1 month later...

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  3
  • Reputation:   2
  • Joined:  04/23/17
  • Last Seen:  

On 21.2.2018 at 5:11 PM, Haikenz said:

@L1nkZ Is it possible to have the "announce of the NPC" advertised in the discord, Instead of chat??

It would be easier to make this server side via plugin, because the server knows when an announce happens. All you need to do is wire this to a discord server of your choosing. Making it the way you intended via players that receive the announce the discord server would get the message n times the player count.

  • Love 1
Link to comment
Share on other sites

  • 7 months later...

  • Group:  Members
  • Topic Count:  23
  • Topics Per Day:  0.01
  • Content Count:  236
  • Reputation:   189
  • Joined:  11/27/11
  • Last Seen:  

Nice project ! Thanks for releasing it

Link to comment
Share on other sites

  • 4 years later...

  • Group:  Members
  • Topic Count:  36
  • Topics Per Day:  0.01
  • Content Count:  141
  • Reputation:   24
  • Joined:  01/19/12
  • Last Seen:  

Hi guys, how to get base address and offset in file `configuration.h` and `20190116.h`. I want to update for new client 😀

Edited by Vietlubu
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...