Jump to content
  • 0

L2Homage; Making L2 Modding Accessible


Bumble

Question

Hi,

 

I'm making this post to test the waters. If what I'm about to show you doesn't interest you, I'll take it as a sign to stop spending time on it. I've been hoping that the old adage "If you build it, they will come" holds true, but I think it's time to straight up ask for feedback. I've contacted a few people for possible collaboration, but none have shown much interest (which is completely fair).

 

I've been working on L2Homage in my spare time. It's not a quick project, and it will take a long time to complete. It will be done modularly, so it will be usable in stages. The first one is already functional, but I'm still doing tests.

 

What is L2Homage?

L2Homage is a modding tool meant to make modding L2 OFF files easier. It doesn't do anything you can't do on your own, by editing a handful files.

L2H is an extensive editing tool for both client and server files for Lineage 2 Epilogue. While still in development, the intention of this project is to provide users with a tool that’s capable of repurposing most of existing ingame content. This will allow users to rethink and reshape the world of Lineage 2, providing the hordes of burnt out players with new, exciting content, without having to spend hours learning how to manipulate the data structure. The hope is to see a bunch of unique, new game worlds appear, instead of relaunches of the same L2 experience we’ve all been through too many times to count.

 

How much will it cost?

L2H will be free, and eventually completely open source. This is not a project created for monetary gain, it’s solely meant to revitalize the stagnating server scene.

 

Which L2 version does it use and why?

L2H is meant to be free, so the server files should be as well. The most complete, freely available L2OFF files are the Gracia Final/epilogues files, and with Eressea’s extender, it feels nearly bug free. It’s a very strong, free base to build this project on. This tool would likely follow Eressea's extender. If she decides to upgrade L2 version, L2H would most likely follow.

 

When will it be done?

This is a side project with a single developer attached. It won’t be completed fast, but each milestone will be made available to the public, once tested and functional. The development will be modular, with each version providing new options. If you're interested in helping out, let me know.

 

Why are you making this post now?

L2H is meant to help users customize the world of Lineage 2. Every user has a different vision, and as such it’s valuable to gather not only critique, but feature requests and suggestions from anyone interested in the project. The development direction is not set in stone, and is open to change. It's also a test to see if such a tool is even desired. If people tell me this is a waste of time, I'll throw in the towel. There's no reason to continue working on something unwanted.

 

Which language is L2H developed in?

C#

 

How do I use L2H?

Install the L2OFF gracia epilogue server files and Eressea’s extender, then open L2H. There are 3 folders in the L2H directory; client, server and data. Copy the required server script files into the server folder and the decrypted client .txt files into the client folder. There is a .txt file in each folder, informing you of what goes where. Don’t touch the data folder, as it only keeps track of the work you’ve done so far. When you’ve placed the data files in the correct folders, open the application and go to the load/save tab. Click “Load All” and wait. When done, the other tabs have been populated with data, which you can edit freely. When you’re done editing, click “Save All”. If you don’t click save, your data isn’t exported. Now copy the modified files back where they came from. Client files need to be encrypted with an encryption tool again.

 

What does it look like?

Here are a few screenshots of the application in action. It’s still very barebone, but that will change in the future. Loading functionality:

image.png.9e37d5f9f0732ac8bc2b89cbfc2828dd.png

 

Weapons editing:

image.thumb.png.a025f82977580ce24ee8191200177e1e.png

 

Armors editing:

image.thumb.png.1d1696d8cd76299ba08461de62588782.png

 

Etc editing:

image.thumb.png.a7eeb22c4552cd53f320169fdb2019c4.png

 

Sets editing:

image.thumb.png.b940972f62ef82e891d9512546dc4a88.png

 

How does L2H work?

Decrypted Lineage 2 client files and server script files are structured in a very specific way, one that can be parsed and edited. When developers add or remove content to the L2OFF platform, they do this by hand. This often requires editing more files to add a single item. For instance, if you were to add a single weapon, you would have to edit weapongrp (client), itemname-e(client), itemdata(server) and item_pch(server). L2H does this for you with one input. There are a LOT of variables for items, most of which aren't relevant to the modder, and it's easy to mess it up. One wrong space, and your server won't run, or your item won't work. Instead of adding new items from scratch, modders choose a weapon to use as a template. L2H copies all relevant information, and exposes variables that are interesting to edit in an easily accessible grid view. When you're done editing, click export all to get the correctly formatted files. You can copy those directly into the server and client (client files need to be encrypted again).

 

Can I add custom models and animations?

If you want to add custom models, you will have to do that the old fashioned way. There is a lot more to adding new models to the game, compared to repurposing it. Completely new content like that, however cool it may be, is not the goal of L2H. That being said, once you’ve added the new content, you can use L2H to edit or copy it.

 

Why are you not planning to develop X?

If you have a feature request or suggestion, feel free to message me or comment in this post. The planned features are those that are absolutely possible to deliver. The limits of L2H is well known, and there won’t be an attempt to include features beyond those. If your suggestion falls within the possibilities of L2H, it will most likely get added to the list.

 

When will the next version be available?

When it’s ready. This is an ongoing project, and while updates may be far apart, it’ll be finished one day. The project uses no copyrighted info. It's all relying on reverse engineering the data structure. It only reads the data you feed it. Development will continue until all values available for change have been exposed. If I'm doing anything I shouldn't, please let me know. I have no intention of breaking the law.

 

Will you be running a server?

No. That's not my motivation.

 

Will it work for other versions of Lineage 2?

That’s not the focus of this project, so that’s not a compatibility that will be added. It will work with any version of Lineage 2 that uses the exact same data structure as Epilogue. Should a newer version of L2OFF be made available, there’s a slim chance L2H will be updated to fit that data structure.

 

Will it mess up my files?

Remember to keep backups. There can be bugs.

 

Can I delete items?

You can only delete items you’ve created yourself. If you start removing data from the client and the server, you’ll most likely run into issues. If you delete an item that exists in the game world, you might run into issues as well. It’s better to disable these from being acquired, and then remove them from players’ inventories.

 

 

What's in the current version?

Check the roadmap and version description below.

 

Version 1.0 - Items - Done

Adding, modifying or deleting weapons

Adding, modifying or deleting armors

Adding, modifying or deleting etc items

Adding, modifying or deleting sets

 

Version 2.0 - NPCs

Adding, modifying or deleting NPCs

Adding, modifying, deleting or assigning spawn points

Adding, modifying, deleting or assigning drop lists

Adding, modifying, deleting or assigning multisell shop lists

Adding, modifying, deleting or assigning specific AI

 

Version 3.0 - Items Continued

Adding, modifying or deleting recipes

Modifying item enchant success rate

Cell input options lists, to see which options you have per cell

Adding, modifying or deleting tattoos

 

Version 4.0 - World

Adding, modifying or deleting hunting zones (Won’t appear on map)

Adding, modifying or deleting zone names (Won’t appear on map)

 

Version 5.0 - Quests

Adding, modifying or deleting quests

Adding, modifying or deleting rewards

 

Version 6.0 - Raids

Adding, modifying or deleting Raid Bosses

Creating custom NPC behavior through interface

 

Version 7.0 - Core

Modifying the base attributes, hp, mp, regen etc of each class and race per level

Modifying the XP requirement per level

Modifying race and occupation description

Adding, modifying or deleting loading help tips

Adding, modifying or deleting system messages (“You carefully nock an arrow”)

Modifying server name

 

Version 8.0 - Pets

Modifying pet stats and attributes

 

Version 9.0 - Skills

Adding, modifying or deleting Skills

Modifying when and if classes learn different skills

 

Version 10.0 - Ingame Systems

Adding, modifying or deleting manor items

Adding, modifying or deleting fishing items

 

 

Let me know what you think,

 

-B

 

Edit: I'll leave this up for a few weeks and gauge the interest before deciding the future of the project. Thanks for your interest.

 

Edit2: It seems people are interested, so I'll continue developing this. I started a Discord for anyone interested: https://discord.gg/97yAsCA

 

Edited by Bumble
  • Like 2
  • Thanks 2
  • Upvote 8
Link to comment
Share on other sites

Recommended Posts

  • 0

Your job looks amazing brother! Even if nobody likes it, still you learn a lot by doing and coding! I'm looking forward to check it out!

Thank you !

Edited by PARADISE
Link to comment
Share on other sites

  • 0

Thanks PARADISE, I appreciate it.

 

Yeah I learn a bit about the data structure of L2 by doing this, it's interesting. It just takes a lot of time to complete this, and I'm unsure if it'll even be used for anything serious afterwards. I hope people have some cool ideas of how to populate the world, and that they're willing to put some time into it.

 

My main motivation for developing this, is from the time where I used to play a lot of Diablo 2 mods back in the day. The custom items, new stories, new enemies, new skills were really interesting to play around with after burning out on the original game.

I think we can make the same thing happen in L2. Imagine a whole new world with all new items and enemies. It'll be like exploring a brand new game in the setting we already know.

 

If just 4-5 different teams started developing something like that, I'd be happy.

Edited by Bumble
Link to comment
Share on other sites

  • 0

While this project isn't getting much interest, I'm still working on it while I can. I still think it could be cool.

 

These past days I've begun working on version 2.0 - NPCs.

I'm mostly done with parsing all NPC data from the server. I've loaded much of the data into a grid, just like I did with the items. It's all editable.

 

NPC droplists were a challenge to parse and structure for. There are 4 separate types of droplists, but I've accounted for them all. Droplists will be on a separate sheet from NPCs, as they would take up too much space.

 

When 2.0 is done, L2Homage is able to completely manipulate the item system and the npc system. I'm considering putting the AI on hold. AI is always intimidating, but I'll take a look at it when NPC data and the spawning system is fully functional.

 

Link to comment
Share on other sites

  • 0

Thanks for the encouraging comments everyone, I'll keep working on this when I can. I appreciate it.

 

As the development progresses, I'll most definitely have some questions. The previous question I had was regarding the L2 coordinates. I created a whole new thread for that question. I reconsidered that approach, and I don't want to do that, as I may end up cluttering this whole forum section.

 

Instead, I'll ask any questions I have right here, in this thread. I'll try to explain my questions a bit in depth, in case someone else finds this interesting. Maybe we can teach each other some things.

 

I hope you'll help me out with some answers, if you can.

 

Two questions I need answered so far:

 

Question 1:

When parsing NPCdata from the server, I've come across some NPCs which have a different structure in the npc_ai variable. Usually, it's just:

 

{[ai_id]}{ai_variables}.

 

it looks like this:

{[stone_giant];{[MoveAroundSocial]=116};{[MoveAroundSocial1]=116};{[MoveAroundSocial2]=116};{[DDMagicSlow]=@s_mega_storm_strike_for_slow1}}

In this case, stone_giant is the id, movearoundsocial and ddmagicslow are the ai variables.

 

The issues arise when the NPC has minions, I presume. Here's an example:

{[varikan_brigand_ldr];{[MoveAroundSocial]=42};{[MoveAroundSocial1]=42};{[MoveAroundSocial2]=42};{[Privates]=[varikan_brigand:varikan_brigand:1:0;varikan_brigand:varikan_brigand:1:0;varikan_brigand:varikan_brigand:1:0;varikan_brigand:varikan_brigand:1:0]};{[ShoutMsg1]=[1000154]};{[ShoutMsg2]=[1000155]};{[ShoutMsg3]=[1000156]};{[ShoutMsg4]=[1000157]}}

The initial structure is the same, ai_id and ai_variables. But then comes a whole new part, [Privates]. Privates are always structured this way:

 

id:id:number:number

 

My question is:

I assume either the first or the second ID is the npc id. The other one must be the minion ai id. Does any of you know which is which? Or am I wrong? Also, what do the two numbers mean?

 

 

Question 2:

When parsing the droplists for each npc, they're always structured the same way. There are two different kinds of droplists, the single and the multi droplist.

 

A single droplist is structured like this:

 

[item_id] ; min_amount ; max_amount ; probability

 

Here's an example:

{{[suede];1;1;8.3081};{[stem];1;1;24.9244};{[charcoal];1;1;12.4622}}

Killing this enemy has a 8.3% chance of dropping 1 suede, 24.9% chance of 1 stem and 12.46% chance of 1 charcoal.

Since this is a single droplist, they all have a chance of dropping at the same time.

 

Multi droplists work a bit differently.

 

They follow this structure:

{{[item_id] ; min_amount ; max_amount ; group_probability}{[item_id] ; min_amount ; max_amount ; group_probability} probability}

 

Here's an example:

{{{{[adena];67;91;100}};70};{{{[leather_shirt];1;1;38.4868};{[leather_pants];1;1;61.5132}};1.023};{{{[charcoal];1;1;50};{[suede];1;1;33.3333};{[rp_wooden_arrow];1;1;16.6667}};4.9082}}

It's very similar, the difference being group_probability and probability. First, the probability is rolled, then the group probability. Multi droplists make sure that multiple items are available to find, but only one item per group is selected. Multiple groups can trigger per kill.

 

In the example above, the first group consists of only adena, with a 70% drop chance. In that group, adena has a 100% chance to be selected.

 

The second group has leather shirt and leather pants. There's a 1.023% chance of this droplist triggering. If it triggers, 38.48% of the time, a leather_shirt will drop. 61.52% of the time, the leather_pants will drop.

 

My question is:

There are Never more than 4 groups per multi droplist. Some have less, but there's never more than 4 groups out of the 9300+ NPCs. I imagine some developers would like to add more multi droplist groups per npc. Is this a hardcoded limit, or can I add more?   EDIT: This is wrong. There are multiple cases of more than 4 groups per multi droplist. I found out just now, when parsing more data. It happens all the time for raid bosses, I wasn't looking there yet. I'd still like an answer to the rest of my question though. Apologies for wrongful information.

 

Is there a limit to the amount of items that can be added to each group? Will a large amount of items available per kill have a negative impact on the server performance, or is it negligible?

Some games (like Diablo, Path of Exile) follow an itemlevel system. Almost anything is available as a drop from a monster, it's all based on the monster's level. If it's possible to add 1000+ items as drops per npc, this entire drop system can be simulated in Lineage 2, should the server developers decide to.

 

EDIT:
Disregard what I just said about never being 4 droplists per multi droplists. This is wrong, I found out just now after parsing more data.

 

Thanks,

-B

Edited by Bumble
Learned something new.
Link to comment
Share on other sites

  • 0

Progress update:

image.png.08c9b0cd9ea353f9fafd313e920cf535.png

 

Almost finished parsing all NPC data.

https://ibb.co/Yd1KrzY

 

Finished parsing all droplist data:

https://ibb.co/bsK7wkC
https://ibb.co/PTH7dXn

 

 

Droplists are separated into 6 different types:

Normal

Spoil

Multi
Multipart

Extra

Extrapart

 

The two types 'Multi' and 'Extra' contain the group probability and the ID of the different droplists that can be triggered.

The two types "Multipart' and "Extrapart' are similar to normal droplists, but are connected through the referenced multi/extra droplist they refer to.

 

For now, I've added support for each npc to have up to 10 normal drops, 20 spoil drops, 50 multi droplists, 40 multiparts, 50 extra droplists, 40 extra parts.

 

That means each enemy can theoretically drop 2000 different items through multi droplists, and 2000 more from extra droplists.

I still need to test if this will mess anything up, but my testing rig is currently not working.

 

Next step is to create the template IDs to store in the data folder, then work on exporting the data in the correct format. When the exports work, I'll move on to working on the spawn system.

Edited by Bumble
Link to comment
Share on other sites

  • 0

It's all stored in xstd::vectors etc so don't hesitate to remove all limits, everything is O(n) so it's up to server admins what they'll put there :)

Link to comment
Share on other sites

  • 0

Cool, thanks eressea! I'll remove those limits then :)

 

Do you have more info on the [privates] npcdata thing? Still unsure of the structure there.

Link to comment
Share on other sites

  • 0

NPC_NAME:NPC_AI:WEIGHT_POINT:RESPAWN_TIME

 

WEIGHT_POINT should be something similar to weight values in statistics, a bigger number should mean a bigger influence on the hate generated, it gets multiplied with variables like damage and others and gets inserted into mob attack methods. @eressea might know more about it.

Edited by sepultribe
Link to comment
Share on other sites

  • 0

That makes sense, thank you sepultribe.

 

I'll make a tooltip note of that and expose the whole [Privates] line for editing. I'll leave that one up to modders to write correctly.

 

Quick update:

Apart from 1 npc (id 31230), all npcs and droplists are exporting to the correct format. I'm going to stop for today, and I'll just exclude that npc from dynamically exporting. I don't know why its npc_ai has an extra semi-colon in it.

 

If I have time tomorrow, I'll implement npc/droplist editing/cloning/deleting. Once that's done, I'll move on to spawning.

Edited by Bumble
Link to comment
Share on other sites

  • 0

17008 and 17009 also have that redundant semicolon in the end };}, I am pretty certain that is just a mistake on their part, in all other cases the npc_ai closes with }}

 

btw anyone has any idea what the sm in myself.sm might refer to in AI? static/super member/method?

Edited by sepultribe
Link to comment
Share on other sites

  • 0

That's strange, 17008 and 17009 parsed just fine for me.

 

Yeah it's probably something weird on their end. I won't worry too much about it for now.

 

Regarding myself.sm, I haven't delved too far into AI yet, so I can't tell you that.

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
Answer this question...

×   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...