Jump to content

Salty Mike

Members
  • Posts

    131
  • Credits

  • Joined

  • Last visited

  • Days Won

    9
  • Feedback

    0%

Posts posted by Salty Mike

  1. 16 hours ago, Tryskell said:

     

    You indeed have to save player position over Enterworld to properly clean it up later (if you don't, even trying to delete packet content would eventually keep it up), that's what we do with debug packet (which is a reusable Map of ExServerPrimitive packets) on aCis.

     

    It doesn't solve the FPS stuttering - more you draw/delete lines, more your client becomes laggy. It's like if client wasn't deleting drawn points/lines properly, but instead simply hide them and redrawn content above.

     

    If you got a solution, I would happy to integrate it.

     

    You should check aCis#Player _debug packet integration, it allows very big amount of lines/points to be drawn, it is also reusable.

     

    https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java?ref_type=heads


    https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java?ref_type=heads

     


    Thanks!

    I'll take a second look and let you know if my implementation of the clearCircle() helps with the stuttering once I find time for some extensive testing.

  2. 58 minutes ago, EUSOUOMESTREDOSMAGOS said:

    Hello, good morning everyone. I would like to know some way so that the mobs only drop adena, the only way I know is to go to each mob's line and delete the materials. Would there be any other way?


    UPDATE 1:
    My bad! I didn't notice that this is published in the L2OFF section. The statement below is only relevant for L2J.



    (Yes, there is another, very simple, efficient, and quite elegant, way to do this.

    What you need is:
    - create one Config of type Boolean, lets call it MOB_DROP_ONLY_ADENA, which will act as the trigger point for this feature.
    - locate the method which is responsible for parsing the drops of the monsters from XML.
    - in this method, there should be a loop for each of the parsed items and there we add a simple check: 

     

     if (Config.MOB_DROP_ONLY_ADENA && item.getItemId() != 57)
     { 
        continue;
     } 


    And we are done.
    Now, every time the server tries to parse a drop item, it will check if the ID of the item is 57 (adena) and skip it if it isnt.

    You should add a further check to make sure that the NPC you are parsing the drop for is of type Monster and not of type RaidBoss or GrandBoss (or any other custom type you might have).

    The easiest way is with with a lookup into the NPC/Monster Template, if there is one on your assembly of choice. What these templates do, usually, is to provide some lookup options for certain features of theirs, such as level, type, etc.)

  3. 1 hour ago, ratchet said:

    Thanks for clarification. Do you think the newest clients offer solid advantages compared to the classic ones like Salvation?
    I'm also in the process of porting h5 to one of them just for the sake of it, so I was wondering if I should just attempt to go to the newest possible.


    The heavy lifting is done in the client, because while you can get away with small imperfections in the java, everything in the client must be impecable.

    So, if you haven't touched the client, I'd say pick the newest protocol version you can find the client editing tools and Interface.u (mandatory) / NWindow.dll (better to have it) / Engine.dll (optional) sources for.

    At the very least, you need the Interface.u to fix the Clan Window and enable skill enchanting on Classic/Essence versions, if you decide to use one of them instead of MAIN/LIVE.

    • Like 1
  4. 3 hours ago, ratchet said:

    I guess if you want to learn the whole process, your best bet is to start with a classic client (like salvation? also must be easy to modify so that you don't get stuck behind paywalls) and check how the network communication is implemented. L2jmobius has a lot of sources that use classic clients.


    Upgrading to Salvation is exactly the same as upgrading to the newest client with the only difference being access to free-shared client editing tools and resources.

    I am speaking from experience. I have upgraded my HF source to one of the newest clients by myself (in terms of server side. got help with the client) and hit every single wall there was in the process.
    Now, I already have several multi-protocool server cores so I can easily compare different approaches to tackling the same issue, which also helped the learning process.

    Best way to learn would be to use this one (link below) to snoop around and figure out what has been changed in the server side (the packet structure will be different, for sure, but works for understanding/figuring the process out in general terms).

    https://github.com/iBezneR/L2J_SunriseProject_Purity

    The client side will always be the same, always the same files, only the DAT structure will be different. I personally wrote myself some parsers for the data of the DAT files from OLD -> NEW client.

  5. On 6/12/2024 at 4:23 AM, onedase said:

    I took a huge break from server development. I came back wanting to create a Gracia Final server on the latest client (i think its essence) but i cant find any guide. I dont know how to link a Gracia Final pack to that client. Do i just get a clean install of the client and just edit the ini?

    Also i would like to ask for a clean install for the client.

     

    Ps. i dont know if this is the right place for this post. Also I dont have neither have the pack so please provide any link to get me started because i dont seem to find any topic about my needs. Thank you.


    Guys, if you'd let me be the bearer of bad news,

    No amount of "break from server development" can justify your complete lack of idea how things work.

    If it was this easy, you should've been seeing 90% of the servers of the popular old versions, such as IL and HF, running on the newest client.

    For this task, you would need a lot of time - think at least 2 months, if you can code, have access to all the necessary tools for client development, and you have a relatively good idea of how server<->client communication works.
    f you don't, then you either find yourself a well-paying job and find someone who would do it for you or you put the idea aside (for no less than 1-2 years) and start reading and learning asap.

    Let me give you a little preview/breakdown of what some of the work includes.

    The work can be split into two parts - SERVER side and CLIENT side. 

    The server and the client communicate through packets. Each of these packets has a defined structure. Both, the server and the client MUST know this structure and MUST use the same structure, otherwise they won't be able to "understand" each other.

    - The server side predominantly includes the alteration of existing packet structure and the creation (from zero) of missing packets that the client requires. Then you also have to take these changes into account and alter the existing features of your server to match the changes.

    A good example for this is SKILL ENCHANTING. On older chronicles, the enchant level is determined by the LEVEL value of the skill and on the new clients, it has been taken out into a separate value. What this means is that you would have to figure out a way to adapt the old system to the new requirements.

    - Now that we mentioned the client, you would also need to edit a bunch of files, such as Interface, UTX, UNR, as well as DAT files, including those related to ITEMS, SKILLS, QUESTS, NPCS, and AUGMENTATION STATS and DESCRIPTIONS, etc. For some of those, you would also have to figure out how to check for missing entries and how to parse data from the older client to the new.

    The best example, again, would be the SKILLS. On the latest clients, the skill enchanting was limited to only +20. As such, even if there were some matching skills between the two different client versions, you would still need to add the missing 10 levels to +30.

    And once you complete all of that, you start testing and fixing bugs and sh1t.

    And once you have fixed all of that, you can start adding new features from the new client, because otherwise it would be one big mess and a waste of time and/or money.

    • Like 1
    • Upvote 1
  6. On 3/10/2024 at 1:26 AM, Denza said:

    Hi

    Where i can get a database for this project ?

    Plz help me!


    Open github.
    Find sdark94 account.
    Enter sdark94/trinity repository.
    Search for the DB backup.
    It is still there. I would've posted it here, if there was a HIDE_FOR_USER(S) feature, but there isn't one. You can DM me on Discord and I'll slip you a STRUCTURE-only DB export.

     

    2 hours ago, optimousprime said:

    hello all sorry about this question . but what game play is this ? High Five? Interlude? Clasic? Esennce and what kind of Java using this server 8jdk? or


    Yall lazy to even search the web bro. 😄

    See the old videos from 3 years ago -> YOUTUBE

    Regarding java version, it is also visible in the source:

    image.thumb.png.f1be50e53c878546117a71e70472dabe.png

  7. You can LOCK the topic. I have finally found the answer to my problems. It appears to have been here, on the forum, all along.
    And more specifically, the following excerpt of Elfo's comment:

    "In order to fix that you have to store the original Location (x, y, z) of the player when they EnterWorld.

    When you create an ExServerPrimitive package you need to provide a name, an x, a y and a z. These values NEED to be the X of the spawn location and the Y of the spawn location. The Z can be -65535 to ensure that the icon will be below the ground."

     



     

    On 12/6/2021 at 7:29 PM, Tryskell said:

    The only possibility would be to use a Threadpool and call it every X times. That packet DRAWS things on client, there is nothing like "realtime". It stays on screen until you decide it mustn't stay on screen.

     

    As you say, more you use forms, laggier your client will be. At this moment, I don't think it's possible to dump all the "hidden" forms, even after a packet reset. Client properly cleanups when the Player actually disconnects to the lobby, which probably cleans all forms from client memory.



    From what I could gather over the years, it appears as if the client replaces the circle based on String "NAME", which you send with the ExServerPrimitive.

    Also, I did try your suggestion, albeit slightly altered, and it works like a charm. Namely, creating a runnable that loops through a POOL of players and sends them the updated Circle. A player is added and removed from the pool based on the VIEW FARM ZONE OUTLINE variable status. I'm just not sure if I should stop the runnable when the pool is empty or let it cook, given the fact that it loops only once per second and that I'm using a Flag at the very first check to break execution if the POOL is empty.

  8. You don't have to use the "Classic" version of the client. You could use the MAIN/LIVE version and just update the MINIMAP (textures) and the actual heightmap/UNR, some of which you can take from the Classic version.

    Anyway, what you have decided to do is the inferior option.
    The suggestion by Banshee Garnet is the betterr solution, in my humble opinion.
    I already have a HF core that is running on a client that is 1.5 years old and can be easily upgraded to support the latest.
    When you take that route, you ensure stability, as well as features working as they were supposed to. You could still introduce customs on top of them, but the base would be a real HF, not some "Classic IMPROVED/REIMAGINED" or however they call it nowadays.

  9. On 3/30/2024 at 6:54 PM, Andon24 said:



    Then what i am doing wrong? I copy paste those files to my IL client and then i try to start it but it corrupt the client 😕

     

    8 hours ago, Andon24 said:

    can anyone please tell me in which folder i have to copy paste the client side files of this feature? because i copy paste them on the system folder and it crash the game.



    The picture below is source of Interface.u "class" file + its XDAT container. As such you can't copy-paste it and expect anything to happen. These file are for people who want to reproduce it on thier own custom interfaces.
    image.png.b911e1a9bf420942cea49d19ba0a14c3.png

    The one in the picture below you have to put in Textures, by default, unless you have edited your system folder to read TEXTURES from other folders as well, such as System.
    image.png.45de159a18859a10c4d5cf9115b02e16.png

    And this below you put within the explicitly specified "systemmsg-e.dat" or "systemmsg.dat" (or something like that, they can differ in name, I suppose) file within the system folder. You have to actually open the file (decrypt), add the lines while ensuring the proper formatting (making sure the structure is the correct one, or in other words that all of the TAB SPACES are in place, etc), and then you save the file (encrypt it with the proper encryption).

    image.png.b7d61f9950de1e94d9832bf6c8022869.png

  10. 5 hours ago, bershake said:

    Yeah, but I need all available skills. I don't think books alone cover them, to be honest. If you can give me a rough idea of how to proceed, I'm willing to try.


    In short, what you need is this:
    - special script (be it handler or AI or however your source handles it) that will be activated when you speak to the said NPC.
    - hook the script to an NPC of your choice - your multi-skills manager if you will.
    - a few static HTMLs and/or at least one Container HTML that will be used for the dynamic display of stuff.

    Now the lengthier version:

    You should create a special script/handler/AI (any will do initially) and assign it to an NPC of your choice (just has to be one that has no other special handler/script/ai assigned to it).

    Once you have that in place, you need to develop/write the actual script/handler/ai of the npc, which in actuality will handle all of the skill learning.

    To better illustrate it, think of the NPC as simply an empty box, in which you can put almost anything. In your case, you want to put a script/code that handles skill learning.

    The script itself is not very complicated. You just need to set conditions/backstops that would prevent exploits (which will be the majority of the coding/programming), and then a couple of methods that will handle the actual DYNAMIC display of skills within the container HTML that you would create.
    The dynamic display of skills means that you will be generating skills info and availability and populating the said Container HTML with the different data depending on who is using it and other conditions, such as learned skills/levels.

     

    • Like 1
  11. 5 hours ago, thepwned2 said:

    Hello Everyone,

     

    I am facing a problem with my project. due to a problem on my computer, files containing the last revision of my source, of which a server is running, were lost. I would strongly recommend someone who knows java very well so that we can retrieve some things from an older source version.

     

    For a better explanation there is a Server Pack that runs normally without problems.

    But, there is a source that does not have the lastest changes.

     

    What I ask from the developer is, can we upgrade the source with missing things (opening them from the lastest core that i have) OR

    let's delete some things from the server that will make the server works again with an older source version.

     

    To mention that not many were added to the source in the last interval, before the last rev was lost.

     

    it's kind of complicated, for more clarification if anyone is interested PM me

    I will pay for the services.

     

    Thanks in advance.

     


    Do you have a list of what the lost changes were?
    Additionally, how much should one expect as a compensation for the, as per your own words, "kind of complicated" job?

  12. Nothing works on minimized clients anymore. The protection is designed to check if the game window is at the front when it is sending X, Y, or Z packet.
    Meanwhile, even the simplest of clickers works on the active client. I have a Logitech mouse, which comes with software that allows you to create macros and loops and what not, and I've used it on several occasions with no issues nor repercussions.

  13. 51 minutes ago, hamoda said:

    You don’t have to cry dude , and  no it’s eternity pack and i’m looking for partner to help with online count not more

    You speak as if there were such magicians who could wave their magic wand and people would not only show up but also stay and donate so you can buy yourself a new car or a house. 😅

    If you find such a unicorn, please do tell!
    We all would like to catch one for ourself too. ^.^

  14. You are not parsing the HTML, or at least that's what the error states.

    I assume the issue might lie here:

     

    return HTMLTemplateParser.fromCache(Path.of("/data/scripts/" + SCRIPT_SUBFOLDER + "/data/html/" + dialogType.toString().toLowerCase(Locale.ENGLISH) + "/" + path).toString(), player, placeholders, IncludeFunc.INSTANCE, IfFunc.INSTANCE, ForeachFunc.INSTANCE, ExistsFunc.INSTANCE, IfChildsFunc.INSTANCE, ChildsCountFunc.INSTANCE)
    
  15. 6 hours ago, Drazeal said:

    Hello, ive added some customs and  cant find the file that allows augmentation to finalize.

    i've added them on life stones but effects dont seem to apply.

    Animation plays fine but gets stuck as shown in the image.

    [Source of Flame-Aden Assassin protocol 418]

    Sry if its the wrong section but if im not wrong it should be clientside problem.

    aug-min.png


    If you hover over the weapon and you can see the augment, then it is client side, indeed. Else, it is server side, most definitely.

    Fact of the matter is, there is a whole chain of packets that are responsible for handling the new Augmentation system. The easiest way to keep track of them is by activating the NETCHAT packet debugger from ALT+G. It is not a debugger per-se, but it would help you see the packet exchange between client and server, which should then show you where the issue lies, namely the client->server packet, whose trail you should follow until you find your issue.

    If the other weapons are working, then it is quite possible that you have missed adding the new custom weapons somewhere in the datapack (in some xml or wherever your server pack keeps such data).

  16. One of the main issues with HTML on Interlude is that you can only have a few very specific basic colors and nothing in-between.
    However, there is an approach you can take to make it so that you have custom colors for your table background.

    To do this, you would have to stack a bunch of tables with different background colors up. Here is an example of the code:
     

    <table width="274" cellpadding="0" cellspacing="0" height="32" border="0" bgcolor="FF0000">
        <tr>
            <td width="242">
                <table width="242" cellpadding="0" cellspacing="0" height="33" bgcolor="FAFAFA">
                    <tr>
                        <td>
                            <!-- FF0000 = RED -->
                            <!-- 000400 = GREEN -->
                            <table width="242" cellpadding="0" cellspacing="0" height="33" bgcolor="FF0000">
                                <tr>
                                    <td>
                                        <table width="242" cellpadding="0" cellspacing="0" height="33" bgcolor="FAFAFA">
                                            <tr>
                                                <td>
                                                    <table width="242" cellpadding="0" cellspacing="0" height="33" bgcolor="000000">
                                                        <tr>
                                                            <td>
                                                                <table width="242" cellpadding="0" cellspacing="0" height="33" bgcolor="000000">
                                                                    <tr>
                                                                        <td width="90">
                                                                            <table width="242" cellpadding="0" cellspacing="0" height="33" >
                                                                                <tr>
                                                                                    <td height="5"> </td>
                                                                                    <td height="5"> </td>
                                                                                    <td height="11"> </td>
                                                                                </tr>
                                                                            </table>
                                                                        </td>
                                                                    </tr>
                                                                </table>
                                                            </td>
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>


    The end result will be this nice dark-red or red-brownish background color (disregard the buttons and text):
    image.png.fd1145775879d60922ad60e758aef2a9.png

    PLEASE NOTE!
    This will make your HTML explode in length/size! To help with the increased size, you can follow this guide to reduce it by about 30-35%.

     

    • Like 1
    • Upvote 1
  17. One of the two major issues with HTML on Interlude has been the absence of `background` option for tables. However, there is a way to manipulate the HTML code so that you can achieve the same effect as `<table background=" "` on newer chronicles.

    A little known fact is that the <img /> tag does not necessarily has to have an `src` element. On top of that, we can set a negaive value for height, which would bring the next <img /> element up in the Z direction by the height we have set.

    Here is an example of how we do that:

    <img height=-34>
    <img src=L2UI_CH3.multisell_plusicon height=32 width=32>



    It is important to note that this code has to be placed outside of the table that you want to set the image as background.

    This is how the code would look like, if we are to add an <img /> as background to a button:

    <td width=36>
        <table cellpadding=0 cellspacing=0>
            <tr>
                <td>
                    <button value=\" \" action=\" \" height=35 width=35 back=L2UI_CH3.inventory_outline_down fore=L2UI_CH3.inventory_outline>
                </td>
            </tr>
        </table>
        <img height=-34>
        <img src=L2UI_CH3.multisell_plusicon height=32 width=32>
    </td>



    Here is the resulting button with its background being the + sign and the OVER being taken from the inventory_outline.
    image.png.9d73c330327615b62dcb2752ee0e95dd.png

    This is another example of utilizing this exact same code with different images/textures:
    image.png.19a80515ba4a0ecf392ec3d11e539c46.png

    And this is what it would look like if we were to stack a bunch of TDs in the same table:
    image.png.d2f9cecff01442c7c6848e0748e15096.png

  18. 25 minutes ago, xdem said:

    I would also advice you to experiment with

     

    replaceAll("\\s+", " ");

     

    s+ will automatically match any whitespace character (including \r \n etc)
     



    I have, as evident from the posted screenshot, see a copy below.

    The bottom-most line is No White-Spaces, at all.
    However, the 5% gain is not worth the risk, in my personal opinion. The Tab-Spaces and New Rows reduces the overall length by quite a lot as is.

    image.png.748e32247416b582de08a1491e88a5da.png

    Here is a list of all four methods that I used in the screenshot.

    	public static String removeTabSpaces(String text)
    	{
    		return text.replaceAll("\\t", "");
    	}
    
    	public static String removeNewRows(String text)
    	{
    		return text.replaceAll("\\n", "");
    	}
    
    	public static String removeTabSpacesAndNewRows(String text)
    	{
    		return text.replaceAll("[\\t\\n]", "");
    	}
    
    	public static String removeAllWhiteSpacing(String text)
    	{
    		return text.replaceAll("\\s+", "");
    	}

     

×
×
  • Create New...