Jump to content

Recommended Posts

  • 3 weeks later...
  • 5 weeks later...
Posted (edited)

I replied on your video on YT. I didn't think anyone else out there would have ever wanted to do this. I figured L2 had died. Like you, I had that nostalgic feeling one day and decided to see if it would be doable in Unity. I built the whole world based on how it was for H5. There's a ridiculous amount of learning required if you want to actually take this all the way. Blender skills are a must. As someone else mentioned in this thread, you can get a long way with just the static meshes, but the devs used BSP brushes for most of the interiors and large parts of the map. A lot of the shapes are not just simple cubes but are stamped out using the BSP brushes they had at the the time, which makes replicating them somewhat difficult.. But, it can be done. I was impressed you figured out the pitch, yaw, and roll conversions needed to orient the static meshes properly on the map. I would think that would be a big hurdle for anyone else trying to do this without knowing where to look to understand what unreal units are. 

 

Some of my thoughts on proceeding with this were:

  • Texture enhancement (this will only get you so far and can cause problems because instead of using single textures, the original devs used multiple textures per model which can cause artifacts when introducing normal maps). Talk about super inefficient too. I'm amazed the game ran relatively smoothly when it came out with all those draw calls.
  • Re-paint textures entirely by hand so that you can take advantage of PBR and get true metallic maps for a more modern look. The current painted-on lighting/shading looks terrible. Apparently they added some specular maps at some point but it's still pretty awful. 
  • Custom animation controller to allow for 8-direction movement (true WASD)
  • Potential animation re-work to include jumping animations and other modifications necessary to be able to blend animations to get a more WoW-like combat play style. Let's be honest, the animations were designed for click-to-move and that was a horrible design decision.  If you don't already have experience with animation, this is going to be a real pain point. 
  • Implementation of world streaming. Script to re-label all static meshes to support scene splitting and streaming. You can't build any sort of a prototype client without streaming. 
  • At some point, someone is going to have to manually create all the spell effects which is going to be a HUGE pain in the ass. I've redone some like certain buffs and healing spells but it's going to take a lot of time to go through the spell static meshes and figure out what was used for what. Some are obvious, others are not.
  • Above applies for skill effects as well.
  • Have to settle on an MMO engine. There are some in the unity asset store worth checking out, but likely it's not going to take you all the way and will require LOTS of tweaking to get things how you want them. Even once you settle on one you are going to have to spend time learning it as well and modifying it as necessary. 

 

Long story short, building the map is the easy part. Converting all the static meshes you need to import into unity is EXTREMELY time consuming. Same goes for creating the textures. It's possible if you got a team together I suppose. I guess I just love this game that much that I want to see it remade in a modern engine with some slight changes to the playstyle and with better mechanics for mobs and bosses. 

 

You've done a really great job from what I saw in your video. As I mentioned, I was going down this road too but it sure would be better to work on it as a team. If you might be interested in that, let me know. I can only handle working on it myself in bursts here and there. I'd be happy to share more of what I've done and the challenges/experiences I had as well.

 

Here's a screenshot of my work scene with a few areas populated with their static meshes. I have all the textures imported, but I haven't taken the time to remap all the materials as it wasn't important to me at the time since so many other things needed to be done. I didn't texture the terrains with the original splat maps cause I wanted to use different textures with normal maps. 

aden.jpg

Edited by cgrahamseven
Posted
2 hours ago, cgrahamseven said:

At some point, someone is going to have to manually create all the spell effects which is going to be a HUGE pain in the ass. I've redone some like certain buffs and healing spells but it's going to take a lot of time to go through the spell static meshes and figure out what was used for what. Some are obvious, others are not.

Above applies for skill effects as well.

That's the first thing I tought when i saw all those projects, like LU4, UE5 L2, etc. These people are gonna want to hang themselves when they get to skill effects 😂
Especially since the the particle system in UE2 is rudimentary AF

About finding out what you need to port to make a skill, you can figure it out by checking skillgrp.dat > checking the skill effect ID > decompiling LineageSkillEffect.u/Skill.usk (depending on the client) > checking the script for the skill you're looking for, to see what effects are used > decompile LineageEffect.u and check each of the skill's effects separately

you'll see scripts like this (this one is the smallest i could find, usually they're up to 5-50 times the size of this one):
 

Class d_tersi_b  Extends Emitter;
DefaultProperties
{
    Begin Object Name=SpriteEmitter75 Class=SpriteEmitter
        Acceleration=(X=0,Y=0,Z=2)
        ColorScale(0)=(RelativeTime=0,Color=(B=128,G=128,R=255,A=255))
        ColorScale(1)=(RelativeTime=1,Color=(B=64,G=128,R=255,A=0))
        ColorMultiplierRange=(X=(Min=0,Max=0),Y=(Min=0.3,Max=0.5),Z=(Min=1,Max=1))
        Opacity=0.91
        FadeOutStartTime=0.3975
        FadeOut=true
        FadeInEndTime=0.2025
        FadeIn=true
        MaxParticles=12
        Name="Fire"
        StartLocationRange=(X=(Min=-0.75,Max=0.75),Y=(Min=-0.75,Max=0.75),Z=(Min=0,Max=0))
        RevolutionsPerSecondRange=(X=(Min=-0.3,Max=0.3),Y=(Min=-0.3,Max=0.3),Z=(Min=-0.3,Max=0.3))
        SpinParticles=true
        SpinsPerSecondRange=(X=(Min=0.05,Max=0.2),Y=(Min=0,Max=0),Z=(Min=0,Max=0))
        StartSpinRange=(X=(Min=0,Max=1),Y=(Min=0,Max=0),Z=(Min=0,Max=0))
        UseSizeScale=true
        UseRegularSizeScale=false
        UniformSize=true
        SizeScale(0)=(RelativeTime=0,RelativeSize=0.65)
        SizeScale(1)=(RelativeTime=1,RelativeSize=0.3)
        StartSizeRange=(X=(Min=9.75,Max=13.25),Y=(Min=9.75,Max=13.25),Z=(Min=9.75,Max=13.25))
        InitialParticlesPerSecond=6
        AutomaticInitialSpawning=false
        Texture=Texture'LineageEffectsTextures.Particles5.fx_m_t4072'
        TextureUSubdivisions=4
        TextureVSubdivisions=4
        BlendBetweenSubdivisions=true
        SubdivisionEnd=16
        LifetimeRange=(Min=2,Max=2)
        StartVelocityRange=(X=(Min=0,Max=0),Y=(Min=0,Max=0),Z=(Min=3,Max=5))
    End Object
    Emitters(0)=SpriteEmitter75
    SpawnSound(0)=Sound'SkillSound15.GD1.d_tersi_1'
    SoundRadius=20
    SoundVolume=250
    SoundLooping=true
    bLightChanged=true
    bNoDelete=false
    bSunAffect=true
    DrawScale=0.1
}


Doesn't make it less painful but at least you know where to look for each skill

Posted (edited)

I went this way back on 2017...

But after seeing the amount of work it needed, I decided to create a client with free assets, stepping out of commercial IPs. The result was Epic Dragon World.

I really hopped for more people to join, as with L2J, but it never actually happened.

Most people where there to rather criticize and project their own ideas and preferences, than actually help.

 

You may consider using it, to make make your project multiplayer and more appealing.
The necessary code to connect a Java server with a C# Unity client is already done and it is quite simple.
Server: https://github.com/PantelisAndrianakis/JMMOS

Client: https://github.com/PantelisAndrianakis/EpicDragonWorld

The exact same networking is used by all projects at L2jMobius.
https://bitbucket.org/MobiusDev/l2j_mobius/src/master/L2J_Mobius_CT_0_Interlude

 

It is possible to connect L2J_Mobius_CT_0_Interlude with a Unity client.

 

Edited by Mobius
Posted (edited)
1 hour ago, 911reg said:

That's the first thing I tought when i saw all those projects, like LU4, UE5 L2, etc. These people are gonna want to hang themselves when they get to skill effects 😂
Especially since the the particle system in UE2 is rudimentary AF
 


It gives me anxiety just thinking about it 🙂 

When I was working on this more full time, it would just drain me mentally. Get one little thing done and then realize the mountain of other things that still needed to be done. There just isn’t enough time in the day for one person to do it alone unless they have no day job lol. But it’s still super fun to try! I’d probably go back to working on this project more if more people like Carow were interested in doing it as a team. Need several people with programming backgrounds and a knack for reverse engineering. I remember back in the day I used to live on PostPacific forums and all that got me obsessed with RE. Ahh the glory days. I miss that. 

Edited by cgrahamseven
Posted
12 hours ago, cgrahamseven said:

It gives me anxiety just thinking about it 🙂 

When I was working on this more full time, it would just drain me mentally. Get one little thing done and then realize the mountain of other things that still needed to be done.

Yep, i honestly wouldn't even try to do that, it's fucking nightmarish to even think about, porting each little thing by hand... But honestly i think Carow has the best approach to it; by trying to automatize everything. Honestly, since almost everything in UE2 can be turned into plain text, you can probably find out a way to create a script to automatically adapt everything into whatever format Unity or any other modern engine uses. Same for maps, staticmeshes, BSP brushes, etc.

Plus a big advantage of L2 is that it's made in a pretty old engine, so there are plenty of custom tools to extract any data necessary, and there is a lot of extensive documentation (both official and user-made)

 

12 hours ago, Mobius said:

I went this way back on 2017...

But after seeing the amount of work it needed, I decided to create a client with free assets, stepping out of commercial IPs. The result was Epic Dragon World.

I really hopped for more people to join, as with L2J, but it never actually happened.

Most people where there to rather criticize and project their own ideas and preferences, than actually help.

People from L2 tend to be especially retarded when you try to do something new, they'd rather keep playing the same thing they've been playing for 25 years and keep it that way, so it's probably not the best target audience for things like that 😂
tho i guess it's expected, since most people on this community are 30-50 year old kids

Posted
1 hour ago, 911reg said:

Yep, i honestly wouldn't even try to do that, it's fucking nightmarish to even think about, porting each little thing by hand... But honestly i think Carow has the best approach to it; by trying to automatize everything. Honestly, since almost everything in UE2 can be turned into plain text, you can probably find out a way to create a script to automatically adapt everything into whatever format Unity or any other modern engine uses. Same for maps, staticmeshes, BSP brushes, etc.


I did everything just like he did for the most part. Started with L2SMR or whatever the Java app was that read static mesh coords. I exported them per map and then wrote a blender script in python to instantiate the meshes at the correct coordinates for Unity and then just exported the whole tile as an FBX and placed it at its world coordinates on top of the terrain. I agree that scripting is the best approach for sure to save time, but there are inevitably things you will run into that you can’t script your way out of. One of the things I meant to go back to was looking at how L2SMR parsed the .unr map files so I could extract the audio and BSP pieces. I don’t think L2SMR pulls the audio source coordinates but I’m sure you could figure out by looking at unreal engine docs. 

Posted
1 hour ago, cgrahamseven said:


I did everything just like he did for the most part. Started with L2SMR or whatever the Java app was that read static mesh coords. I exported them per map and then wrote a blender script in python to instantiate the meshes at the correct coordinates for Unity and then just exported the whole tile as an FBX and placed it at its world coordinates on top of the terrain. I agree that scripting is the best approach for sure to save time, but there are inevitably things you will run into that you can’t script your way out of. One of the things I meant to go back to was looking at how L2SMR parsed the .unr map files so I could extract the audio and BSP pieces. I don’t think L2SMR pulls the audio source coordinates but I’m sure you could figure out by looking at unreal engine docs. 

You can extract everything in text format, in separate .t3d files for every map, and get something like this:
image.png

From there, you can literally see the whole map as plain .txt files, for example, here's a bsp brush:
 

Quote
Begin Actor Class=Brush Name=Brush26
    CsgOper=CSG_Add
    MainScale=(Scale=(X=1.000000,Y=1.000000,Z=1.000000),SheerRate=0.000000,SheerAxis=SHEER_ZX)
    PostScale=(Scale=(X=1.000000,Y=1.000000,Z=1.000000),SheerRate=0.000000,SheerAxis=SHEER_ZX)
    Level=LevelInfo'myLevel.LevelInfo0'
    Region=(Zone=ZoneInfo'myLevel.ZoneInfo3',iLeaf=549,ZoneNumber=1)
    Tag="Brush"
    Group="None,G_ch"
    PhysicsVolume=PhysicsVolume'myLevel.PhysicsVolume2'
    Location=(X=85153.000000,Y=149899.000000,Z=-3418.000000)
    Begin Brush Name=Model26
        Begin PolyList
            Begin Polygon Texture=Giran_Village_T.Giran_floor01 Link=0
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   -00001.000000,+00000.000000,+00000.000000
                TextureU +00000.000000,+00002.000000,+00000.000000
                TextureV +00000.000000,+00000.000000,-00002.000000
                Vertex   -00128.000000,-00128.000000,-00229.000000
                Vertex   -00128.000000,-00128.000000,-00217.000000
                Vertex   -00128.000000,+00285.000000,-00217.000000
                Vertex   -00128.000000,+00285.000000,-00229.000000
            End Polygon
            Begin Polygon Texture=Giran_Village_T.Giran_floor01 Link=1
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   +00000.000000,+00001.000000,+00000.000000
                TextureU +00002.000000,+00000.000000,+00000.000000
                TextureV +00000.000000,+00000.000000,-00002.000000
                Vertex   -00128.000000,+00285.000000,-00229.000000
                Vertex   -00128.000000,+00285.000000,-00217.000000
                Vertex   +01176.000000,+00285.000000,-00217.000000
                Vertex   +01176.000000,+00285.000000,-00229.000000
            End Polygon
            Begin Polygon Texture=Giran_Village_T.Giran_floor01 Link=2
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   +00001.000000,+00000.000000,+00000.000000
                TextureU +00000.000000,-00002.000000,+00000.000000
                TextureV +00000.000000,+00000.000000,-00002.000000
                Vertex   +01176.000000,+00285.000000,-00229.000000
                Vertex   +01176.000000,+00285.000000,-00217.000000
                Vertex   +01176.000000,-00128.000000,-00217.000000
                Vertex   +01176.000000,-00128.000000,-00229.000000
            End Polygon
            Begin Polygon Texture=Giran_Village_T.Giran_floor01 Link=3
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   +00000.000000,-00001.000000,+00000.000000
                TextureU -00002.000000,+00000.000000,+00000.000000
                TextureV +00000.000000,+00000.000000,-00002.000000
                Vertex   +01176.000000,-00128.000000,-00229.000000
                Vertex   +01176.000000,-00128.000000,-00217.000000
                Vertex   -00128.000000,-00128.000000,-00217.000000
                Vertex   -00128.000000,-00128.000000,-00229.000000
            End Polygon
            Begin Polygon Texture=interior_A_ch_t.Skins.interior_A_ch02-4 Link=4
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   +00000.000000,+00000.000000,+00001.000000
                TextureU -00002.000000,+00000.000000,+00000.000000
                TextureV +00000.000000,-00002.000000,+00000.000000
                Vertex   -00128.000000,+00285.000000,-00217.000000
                Vertex   -00128.000000,-00128.000000,-00217.000000
                Vertex   +01176.000000,-00128.000000,-00217.000000
                Vertex   +01176.000000,+00285.000000,-00217.000000
            End Polygon
            Begin Polygon Texture=Giran_Village_T.Giran_floor01 Link=5
                Origin   -85280.000000,-149613.000000,+03202.000000
                Normal   +00000.000000,+00000.000000,-00001.000000
                TextureU +00002.000000,+00000.000000,+00000.000000
                TextureV +00000.000000,-00002.000000,+00000.000000
                Vertex   -00128.000000,-00128.000000,-00229.000000
                Vertex   -00128.000000,+00285.000000,-00229.000000
                Vertex   +01176.000000,+00285.000000,-00229.000000
                Vertex   +01176.000000,-00128.000000,-00229.000000
            End Polygon
        End PolyList
    End Brush
    Brush=Model'myLevel.Model26'
    PrePivot=(X=-127.000000,Y=286.000000,Z=-216.000000)
    TexModifyInfo=(bUseModify=false,bTwoSide=false,bAlphaBlend=false,bDummy=false,Color=(B=255,G=255,R=255,A=255),AlphaOp=1,ColorOp=1)
End Actor

 

So it's annoying, but it's possible to port everything with scripts (even map sounds, map effects, map ambience sounds/lighting, etc)

 

 

Posted
3 hours ago, 911reg said:

You can extract everything in text format, in separate .t3d files for every map, and get something like this:
image.png

From there, you can literally see the whole map as plain .txt files, for example, here's a bsp brush:
 

So it's annoying, but it's possible to port everything with scripts (even map sounds, map effects, map ambience sounds/lighting, etc)

 

 

 

Oh cool yea that's super useful. 

Posted

if you have such skills and making an obsolete game instead of creating a new one, (my oppinion?) stupid. i mean its up to you and all but lineage?

:pepe-hmmm:so many games out there

Posted (edited)
7 hours ago, Nightw0lf said:

if you have such skills and making an obsolete game instead of creating a new one, (my oppinion?) stupid. i mean its up to you and all but lineage?

:pepe-hmmm:so many games out there

 

It's the nostalgia of Lineage 2. I can't speak for Carow, but for myself, L2 was my first MMO and I always dreamed of what Lineage 2 could have been if a few things had been done differently. Things like getting rid of click-to-move and having true WASD movement requiring players to manage distance to themselves rather than the server moving them to the target to attack. Re-working mob and boss mechanics so that there are more challenges for players. Lineage 2 always seemed to be about just putting players in a box somewhere and having them kill zergs of mobs. What about real dungeon experiences where you need multiple players using class-specific skills to help clear rooms and CC so your tank/healers don't get overwhelmed? What if you gave mobs more skills and the intelligence to use them? Why was progression in L2 all about just grinding XP? Why couldn't it have been quest-based which provided more experience than grinding mobs? That way everyone could reach max level within an acceptable time frame (not years) and start on dungeon content to obtain/craft the best gear. There are plenty of things you can do once someone reaches max level to keep them engaged. 

 

Those are just a few of the things that come to mind. Of course there is always the update to a modern engine that would be so refreshing. I have no idea why NCSoft never switched to a later version of UE. They could have really changed the game aesthetically, but they never did. I guess after they realized they had lost to Blizzard and World of Warcraft, they just gave up on development expenses and decided to milk whatever was left of the L2 population.

 

It's interesting, I played Lineage 2M when it released and after all these years, NCSoft learned nothing from the mistakes of the past. Instead they just repeat the same model of L2 in L2M. Yes, there are more quests, but it's still just "kill x number of mobs", rinse, repeat. Then grind grind grind where it takes you months to reach a new level. That's just plain shit gameplay. I guess that's how Korea likes it, but for a western market, that's not how we like to play games. 

 

But you know, the one thing I will give L2 credit for was the music. Musically, L2 beat any other game hands down. How is it that even 20 years later, people can still get chills from Dion Village's theme song? Bill Brown really created some incredibly timeless masterpieces for them. Totally worth watching btw: Shepard's Flute (Dion Town Theme)

Edited by cgrahamseven
Posted
2 hours ago, cgrahamseven said:

 

But you know, the one thing I will give L2 credit for was the music. Musically, L2 beat any other game hands down. How is it that even 20 years later, people can still get chills from Dion Village's theme song? Bill Brown really created some incredibly timeless masterpieces for them. Totally worth watching btw: Shepard's Flute (Dion Town Theme)

 

L2 music was way ahead of its time and still is after so many years, just like how LOTR trilogy destroys most of modern movies after decades. I regurarly listen to L2 music while at work, something very eerie / relaxing about it.

 

 

Quote

Re-working mob and boss mechanics so that there are more challenges for players. Lineage 2 always seemed to be about just putting players in a box somewhere and having them kill zergs of mobs. What about real dungeon experiences where you need multiple players using class-specific skills to help clear rooms and CC so your tank/healers don't get overwhelmed? What if you gave mobs more skills and the intelligence to use them? Why was progression in L2 all about just grinding XP? Why couldn't it have been quest-based which provided more experience than grinding mobs? That way everyone could reach max level within an acceptable time frame (not years) and start on dungeon content to obtain/craft the best gear.

 

This was always also my desire to do, to create some instances / dungeons where players actually use their heads to progress, while at the same time keeping normal RBs, sieges and other retail mechanics intact for the PVP interaction. L2 imho offers a very good base (client wise and L2OFF server wise) for such project but the effort required is just too much. I had made an attempt to create a "safely escort an npc" type of mission, even tried to use stock effects to compliment the result (like explosions) but never actually got to finish ti due to the time required (both AI work and client matching choices with what I wanted to depict). One of the videos is this: 

 

 

Posted
37 minutes ago, Blitzkrieg said:

This was always also my desire to do, to create some instances / dungeons where players actually use their heads to progress, while at the same time keeping normal RBs, sieges and other retail mechanics intact for the PVP interaction. L2 imho offers a very good base (client wise and L2OFF server wise) for such project but the effort required is just too much. I had made an attempt to create a "safely escort an npc" type of mission, even tried to use stock effects to compliment the result (like explosions) but never actually got to finish ti due to the time required (both AI work and client matching choices with what I wanted to depict). One of the videos is this: 

 

 

I love it! You must fondly remember the WoW escort quests where you end up screaming at your NPC to "stop moving so slow!!!!" while they just get beat on by mobs before you can kill them all. Yea, see those types of quests are engaging and fun for players. I agree too with keeping sieges and other retail mechanics intact to encourage world pvp for sure. I always thought one of the best features of L2 was castle sieges. That really was something different back in the day.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • 🏆 UPDATE: CLAN RACE — R$ 300 (PIX in Brazil, or the equivalent in USDT/PayPal) for the first clan ready for World B PvP Worlds opens on Friday, September 25, 19:00 BRT (GMT-3). Everyone starts together, from scratch. The challenge: the first clan with 9 members ready to enter World B wins. Ready = level 51, World C registered and the full C set equipped (weapon, armor and jewelry) with at least 3 attributes on each piece. Only Queen Ant stands between you and World B. Rules: main character only; 9 different people, each on their own PC; the server records the exact time each member became ready. Deadline: October 14. Sign up your clan on our Discord (link on the site): l2mog.com/pvp
    • 🚀 L2-Gold Custom PvP – Beta Test is LIVE! 🚀 Hey guys! We are opening a brand new Custom PvP server and looking for passionate players to help us test it out before the official grand opening! 💥 What we offer: High Rates & Custom PvP Gameplay Custom NPC Buffer, GM Shop & Global GK Balanced classes and epic custom items Interlude with c4 skills 🎁 Beta Rewards: Every active tester who reports bugs or gives feedback will receive Exclusive Custom Rewards on the official launch day! 🛑 No website needed yet! All files, patch, and support are inside our Discord. 🔗 Join Beta Test Here: [https://discord.gg/9qkSxQtTq]
    • "CAN YOU DO A BULGARIAN REVOLUT?" – WE DID. FIRST DRAFT, NO EDITS The request came in short: a photo of a bank card, Bulgaria, Revolut. We said yes and asked the only question that matters – what data. The client was on the road, asked for a couple of hours, then sent the lot: number, expiry, CVV, payment system, bank, cardholder name. Then came the part the client never sees: - ran the number through Luhn – the check digit has to add up, otherwise the card is dead the second anything automated looks at it - matched the BIN to the issuer: Revolut in Bulgaria isn't a "local bank", the cards run through Revolut Bank UAB. The number range has to actually belong there, not just start with the right digit - built the current design, not a five-year-old picture: vertical layout, flat laser print instead of embossing, correct chip module, contactless mark where it belongs - the payment system logo – with the right gradient where the circles overlap and the wordmark sitting exactly where it should. A small thing that kills half the fakes out there - and finally, physics. Plastic has to catch light: a highlight along the edge, a micro-shadow under the chip, a faint fingerprint. A phone shot, not a render Sent the draft for approval. The client looked it over, signed off with zero corrections – final files went out. One pass, no rework. A card is a deceptively simple document. Looks like a rectangle and sixteen digits. In reality it's maths in the number, a tie to the issuer, a current design and light on plastic. Miss any one of the four and the file gets exactly two seconds of attention. Need a card for a specific bank and country? Message us. We'll tell you straight what's realistic for your case – then build it. { all data published with the client's consent} › TG: @mustang_service_ms ( https:// t.me/ mustang_service_ms ) › Channel: Mustang Service ( https:// t.me/ +JPpJCETg-xM1NjNl ) #drawing #card #photoshop #revolut #case
    • ============================================================               CLExt Classic Interlude: v7.80 ============================================================   01. Fixed ValidateLocation handling and player/client position synchronization. 02. Added protection against invalid coordinates and characters falling under the map. 03. Improved XY/Z position and heading validation. 04. Fixed MoveToLocation and MoveToPawn packet conversion and target validation. 05. Fixed TargetSelected, TargetUnselected and MyTargetSelected packet handling. 06. Improved GeoData Z-location handling and disabled unsafe PathNode modifications. 07. Added ExUserInfoInventoryWeight support. 08. Fixed inventory weight and maximum load synchronization. 09. Fixed incorrect 0% inventory weight after character login. 10. Added automatic inventory weight updates after EnterWorld and inventory changes. 11. Added inventory weight packet spam protection and safe weight caching. 12. Fixed BuyList and SellList inventory, slot and weight synchronization. 13. Improved NPC target and Buy/Sell packet validation. 14. Reworked mail attachment inventory and weight validation. 15. Added all-or-nothing mail attachment receiving and safe retry handling. 16. Fixed stackable mail attachment validation and INT_MAX overflow protection. 17. Improved COD Adena validation and post-mail inventory weight refresh. 18. Improved Warehouse Deposit and Withdraw validation. 19. Added protection against malformed warehouse item counts, DBIDs and amounts. 20. Added warehouse INT_MAX, CItem and pSID validation. 21. Improved warehouse anti-dupe protection. 22. Reworked the HTML Cache system for improved stability and memory usage. 23. Added lazy HTML loading instead of loading ~20,000 files during startup. 24. Fixed HTML Cache startup crashes with large HTML collections. 25. Added thread-safe HTML Cache access and Clear/Reload support. 26. Added bad allocation, invalid HTML and oversized HTML protection. 27. Reduced HTML Cache RAM usage, startup allocations and disk I/O. 28. Added HTML Caching ON/OFF with live HTM loading support. 29. Fixed ToggleCachingHook and added VS2005-compatible live HTML handling. 30. Fixed ShortcutInit processing and skill synchronization order. 31. Improved shortcut item validation, augmentation handling and va_list safety. 32. Added LiveMode Ability Point system. 33. Added inventory-item-based Ability Points with configurable pointItemId. 34. Preserved the original level-based Ability Point system as fallback. 35. Fixed incorrect Ability Point display and inventory synchronization. 36. Improved Ability skill learning and point validation. 37. Improved OfflineShopRestore loading and FakePC/DBID handling. 38. Added safer OfflineShopRestore socket limits and batch processing. 39. Prevented thousands of restore sockets from loading simultaneously. 40. Added delayed, non-blocking OfflineShopRestore after server startup. 41. Improved OnEnterWorld initialization order and stability. 42. Improved inventory weight, SkillList and acquired-skill initialization after login. 43. Added VIP integration to the EnterWorld process. 44. Added safe UserExtData initialization without modifying the native User structure. 45. Improved duplicate Bronch Jewel and equipped-slot protection. 46. Improved Bracelet, Belt, Bronch and general UseItem validation. 47. Improved general packet, UserSocket, User, pSD and Creature validation. 48. Added safer INT32/INT64 packet handling and malformed-packet protection. 49. Improved L2Server startup memory usage and lazy resource loading. 50. Reduced unnecessary startup allocations. 51. Improved account-only KeyEngine authentication and remote account validation. 52. Removed account expiration-time requirements. 53. Added updater/restart design without requiring CLExtUpdate.exe. 54. Improved CLIEXT HWID, shared-memory and client/server version validation. 55. Improved ReadFile/WriteFile hooks and MemoryProtector handling. 56. Added UoPilot and Extreme Injector detection handling. 57. Reworked VIP point loading, saving and database synchronization. 58. Fixed VIP Level 0 initialization and first VIP activation. 59. Fixed vip.htm activation after login and from party-shared points. 60. Fixed VIP points being incorrectly reset before successful activation. 61. Improved VIP progression from Level 1 through Level 7. 62. Added proper VIP Level 7 MAX/DONE behavior with no Level 8 requirement. 63. Disabled further VIP point collection after reaching maximum level. 64. Reworked VIP BonusInfo/ReceiveVipInfo packet synchronization. 65. Fixed VIP tier, points, duration and level requirement packet fields. 66. Added VIP duration, tier, point and User validation protections. 67. Added safer 64-bit VIP EXP and party EXP calculations. 68. Preserved subclass maximum EXP protection. 69. Improved ItemDataEx validation during character loading. 70. Fixed augmentation loss during login, relog and server restart. 71. Added safe restoration of augmentation IDs directly from the database. 72. Added CItem, pSID, pExItem and User validation during ItemDataEx loading. 73. Improved Shadow Item mana and item lifetime loading. 74. Preserved item protection timeout data during character loading. 75. Added augmentation loading diagnostics and protected valid augmentation data. 76. Preserved database value 0 for genuinely non-augmented items. 77. Added RaidBoss Status synchronization with the World Map. 78. Fixed alive/dead RaidBoss status updates after spawn and death. 79. Added RaidBossStatus as the source of truth for RaidBoss map packets. 80. Fixed RaidBoss map status synchronization after server/database loading.
    • 🚀 L2AQUILA — GRAND OPENING TOMORROW! Lineage 2 Gracia Final — Like L2 Pride, but fresh. The server you've been waiting for opens tomorrow, Saturday 19/09, 16:00 (Greek time) — No Wipe · 24/7 · Anti-DDoS. ⚔️ What's inside: • EXP 9300x · SP 3000x · Adena 5500x · High drop • Max enchant +20 · Safe +3 · 24 buffs / 3 debuffs • 20 free Custom Coins for every new player on day one! • Custom farming zones (Cave of Trials, Cemetery, Ruins of Despair + more) • PvP Events · Olympiads · Offline Trading · Weddings · Balanced classes • Starter + Dynasty shops in every town — playable from minute one 📥 Download: Client + Patch at https://l2aquila.com/index.html 💬 Discord: discord.gg/5ZyBRvG4k · Facebook: facebook.com/l2aquila Be there at opening hour — bring your squad. See you at the Grand Opening! 🔥
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..