Jump to content

911reg

L2Client Developer
  • Posts

    297
  • Credits

  • Joined

  • Last visited

  • Days Won

    18
  • Feedback

    0%

Posts posted by 911reg

  1. 11 hours ago, Loryq said:

    But this window has a name, and you can interact with it using interface.u, I found it in NWindow.dll, as you say, and can call it anywhere. So, do these editboxes really not have names? It seems to me that reverse engineering would help find the names of these elements, and then we could interact with them.

    Yes, it might be possible to interact with it, you can also add custom dll files and use new 'native' functions to do stuff such as adding auto soulshots to servers. I assumed you wanted to edit them via interface.xdat, since you were asking for the names of each of them.

    Honestly i've never tried to do that, so other devs might know better than me; good luck with it!

  2. 39 minutes ago, Carow said:

    Latest video is out 

    Its great to see more from this 🙂
    About the BSP brushes, honestly, i have no idea how they set up the texture mappings, but there's a simple method to convert BSP brushes to staticmeshes, which can then be extracted using UModel:
    Screenshot_1.jpg?ex=655b9495&is=65491f95

    Screenshot_2.jpg?ex=655b9510&is=65492010


    (It's an integrated function in Unreal Engine 2's editor, so you just need to select the brushes and click a button and voilà)
    I don't have much free time these days, but let me know if you wanna try it out, i'll give you a small step by step

     

    • Thanks 1
  3. You can literally delete everything from inside LineagePawn, and just leave this:
    class LineagePawn extends Pawn;

    since you won't be using any of the functions that are stored inside of LineagePawn.uc when compiling LineageMonster. Same with LineageNpc.HerdNpc, same with LineageMonster.HerdMonster, etc.
    You can also delete all files from LineageWarrior's folder, and only leave LineagePawn

    If you need help with that kind of stuff, send me a DM on Discord

  4. You can simpy open unreal engine runtime, go to the actor browser and extract all scripts, then simply run a .bat file with "ucc make" inside of it, and fix the errors manually. After that it's self explanatory, simply add more scripts, i.e. npc scripts, etc,
    if they have errors, fix them manually, and so on.

     

    There's no magic solution to do this, you'll have to read. There's plenty of documentation on many webs, and tutorials about how to compile unreal mods/mutators in general, not only for L2 but for pretty much any unreal game (its the exact same process in any game basically).

    UnrealWiki: Compiling With UCC (beyondunrealwiki.github.io)
    UnrealWiki: UnrealScript (beyondunrealwiki.github.io)

    UnrealWiki: UnrealScript Lessons (beyondunrealwiki.github.io)

     

    The reason why there are no tutorials is because it's hard to teach someone how to troubleshoot compiling/decompiling errors, etc.

  5. Hey there, in those cases, you need to add a socket with alias e_bone and attach it to one of the mob's bones, which you're missing:
    image.png

     

     

    You can use these buttons to check what bones the mesh has

    image.png



    should end up looking something like this:
    image.png

     

    Remember to add a small Z offset, or the abnormal effects will be inside of the mob's head. Usually an offset of 20-25 works fine.

    Also, when you type Bip01 HeadNub in the BoneName field, you might see that when you press enter it gets saved as Bip01, without HeadNub. To avoid that, type the bone's name in double quotes: "Bip01 HeadNub", then press enter

     

     

    Also, there's a nice little trick that you can use to not lose any mesh properties (LOD, rotation, location, etc) so you don't need to export > re-import the .psk file whenever you wanna edit something, if you wanna know, send me a DM on Discord

    • Upvote 1
  6. 12 hours ago, darta said:

    in l2.log of the game, using your client the icons i make still generate the rgba error, but his not, could you fix?  Your editor processes total animation time good, but his does not , generates a huge number whatever you write (if total frame number u insert 16, 23, anything, it shows after as 1453832) 

    forgot about that, at some point they added another int named RGBA8RawData to the Texture class, so when you save any texture it'll also contain that variable, tho since it doesnt exist in older clients it'll just throw a warning. This can be ignored mostly but it annoys the fuck out of me, gonna upload a fix to my topic in a bit, but basically you can simply go to Object > Material > RenderedMaterial > Texture, scroll down to the bottom and delete the .int, then recompile changed scripts, and save the engine.u 

     

    edit: @darta here you go

    • Like 1
  7. On 8/10/2023 at 7:56 PM, Blitzkrieg said:

    This was always also my desire to do, to create some instances / dungeons where players actually use their heads to progress


    That's what I've been trying to do with my brother, on a project we've been working with for many years already, but we're applying it to everything (interactive dungeons, farming, character builds, character classes in general, crafting, alchemy, etc etc etc). At this point you could argue that it's a different game though, but L2 is just monotonous and boring AF right now, hence why most people usually go towards implementing auto farm on their servers instead of making farming interesting.
     

    i.e; here's a WIP of a 'randomly generated dungeon' system we've been working on, using catacombs (the red lines are doors, and the dungeon gets bigger and more dificult depending on the amount of people who enters, plus there are multiple objectives to complete in order to advance)
    53433.gif

     

     

    • Upvote 1
  8. 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)

     

     

  9. 2 hours ago, protoftw said:

    Those are the standard buttons that are used from that specific interface.. You can locate them from interface.xdat in system folder. To open interface.xdat you need "xdat editor" and then search at the "windows" tab.
    From there you can add the path to your custom utx file, so it reads your buttons.

    actually, that specific window isn't in interface.xdat, it's probably hardcoded inside nwindow.dll or something, you can't really change anything from that window with interface.u nor interface.xdat (at least in H5 and older clients)
     

    tho as far as i'm aware, it uses the default buttons (In H5, L2UI_CT1 > Button > Button_DF, for IL it's somewhere in L2UI_CH3 > Button)

    • Like 1
  10. 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

×
×
  • Create New...