Jump to content

Salty Mike

Members
  • Posts

    177
  • Joined

  • Last visited

  • Days Won

    16
  • Feedback

    0%

Posts posted by Salty Mike

  1. All of these are stored in either XML or the DATABASE. Back in the day, several Java cores used to store the values in the DB. Regardless, I'm sure that anyone can hot-fix either the stats of your boss or the EDIT_STATS via the admin panel for a fair price.
    Hell, even I can do it, even though I've never even downloaded a L2j-Orion core.
    If you haven't found someone to fix it, contact me here or on Discord and I'll fix it for you. If it is XML/DB only, I'll even do it for free.
    Also, these are Baium's stats on Interlude:
     

    Level 75
    HP 4068372
    MP 3347
    XP 10253419
    SP 1081544
    Agro 500
    Type Mob
    P.Atk (physical attack) 6559
    P.Def (physical protection) 6282
    M.Atk (magic attack) 4378
    M.Def (magic protection) 4601
    Attack type sword
    Attack distance 80

  2. 25 minutes ago, MegaCheat said:

    Send a message to them in discord , its only priview 

    Maxcheaters (Where is old Maxcheaters Who help you without Money)...

    Well, it should've been moved to the correct section then, namely Marketplace.

    However, it would've been taken down instantly thereafter since it does NOT comply with the requirements, and more specifically to list a price.

  3. 48 minutes ago, xeox said:

    okay thank but can you tell me this code should i cooy and paste it somewhere or what ? how can i get the full file and just paste it in sustem

    What I sent is something you have in your server's core. You don't need to modify the client. 

  4. 6 hours ago, xeox said:

    Can somebody help with some file about olympiad. I am looking for a file that to count when oly starts and when oly ends. From when oly start till the end to have timer left next to opponent CP/HP


    You need to utilise the following packet: `const S_EX_SEND_UI_EVENT = 398;`

    It's structure is as follow, or at least on new chronicles:

    		writeD(_objectId);
    		// EVENT IDs:
    		// 0 - Timer: MM:SS (Description on bottom)
    		// 1 - Disable Timer
    		// 2 - Green Line with percents and timer
    		// 3 - Number of residues collected (N pcs.)
    		// 4 - Timer: MM:SS (Description on top)
    		// 5 - Blue Line with percents and timer
    		// 6 - Yellow Egg progress
    		// 7 - Red Egg progress
    		// 5 - Line with gears, percents and timer
    		writeD(_type); // EVENT_ID
    		writeD(0x00); // int ASK
    		writeD(0x00); // int REPLY
    		writeS(String.valueOf(_countUp)); // 0 = count down, 1 = count up timer always disappears 10 seconds before end
    		writeS(String.valueOf(_startTime));
    		writeS(String.valueOf(_startTime2));
    		writeS(String.valueOf(_endTime));
    		writeS(String.valueOf(_endTime2));
    		writeD(-1); // what message to display by id, if any - NPC String Id
    		// you can string several writeS() below, depending on the amount of variables in the npc string. only 1 line if NPC String ID = -1
    		writeS("Custom Text To Display or fill in variables in the NPC string by id"); // works in conjunction with the above line


     

  5. 21 minutes ago, StarSCreams said:

     

    i know bro... i need the file or class to finish implement this share..

     

    I can't find the l2aepvp source code anywhere, I don't know if it has been released for free or not to search code to patch errors


    No such file was present in the share you mentioned, nor has such a file ever been publically shared, as far as I know. As a matter of fact, the whole system in l2aepvp was different. It was allegedly an earlier version and it used something called Player Passport or something like that.

    Anyway, the only way is to reverse-engineer (reconstruct) it by looking at the calls and imagining what it is used for and what it should consist of.

     

  6. 2 hours ago, 911reg said:

    I'm pretty sure you can, ye, but definitely not png images

    maybe if someone builds a system to show images by sending like 1500 crests to build a big image? :^)


    You sure can. You just gotta send them with the Insignia/Emblem packet, and not the clan/ally crest one. The images are saved exactly as PNG files in L2jEternity and they show up just fine. Sure they are not MB in size, but up to 150kb each, which is not that small in terms of dimensions - 256x256 px. In comparison, the crests are 20-30 times smaller. So, to cover the entire background of the Community Board, you'd need like 2 rows of 3 images. Not terribly bad, imo. 😄

  7. 8 hours ago, 911reg said:

    You can't. The image needs to be stored in the client, inside any kind of client package (ukx, utx, usx, uax, u, etc).
    You can't send images from server to client.

    What about Clan Insignia (emblem), is it not available on Interlude? We can send picture from the server to the client like that on HF, which are then stored in, and acceessible from, the Crest.utx.

    Disclaimer: I haven't played interlude for 15+ years, so pardon my memory lapse.

  8. On 12/9/2024 at 3:49 AM, Hadriel said:

    i was working on a h5 server with multiples customization on L2jserver but im hitting againts a wall in terms of stability in some parts (critical bugs, non-existing some features/scripts/htms) and im considering fly to a premium project, any suggestions? 
    i can tell only AthenaProject and L2jScrips but i wonder if there is other, and how trustful they are in general


    You've got a few options, in no particular order - L2J Eternity, L2J Sunrise, Mobius.

  9. On 11/18/2024 at 4:11 PM, xdem said:

     

    not missing and crucial thing, it will run as is on any type of gameserver


    I wouldn't be so quick to dismiss a claim, especially as strongly worded as mine because I might not be talking nonsense afterall. But I suggest you check for yourself, first.
    Line 195 looks pretty crucial to me:
    https://github.com/sdrak94/inertiax/blob/main/src/controller/InertiaController.java#L195

    Yet, I don't see the L2PcInstance on the Github repo. Either I'm blind, or it is missing, and if I had to choose one or the other, I'd bet my life on the latter. 😄

    Here's another example - the method below (Line 161), as crucial as it seems, looks empty to me:
    https://github.com/sdrak94/inertiax/blob/main/src/model/InertiaAct.java#L161

  10. 4 hours ago, Bᴜsʜɪᴅᴏ said:

    Yes Anti-Kill steal. This prevent the other players to steal your monster. For example you have 1 lvl items and you start killing a medium hard mob, a player with 2 lvl items comes and start hitting the mob he will get the drop because he dealt more damage. I want to prevent that.


    There are as many approaches as stars in the sky, for all I know.

    You could create a class variable in MonsterInstance.java, which will hold the Object_ID of its first aggressor/dmg_dealer. From there, you will have to add a check in the RequestAttack and RequestMagicSkillUse packets and/or in some doDamage()/reduceHp() method, which will check if the damage dealer is the first aggressor, and if not - reduce the damage to 0.

    But you also have to be mindful about special cases, such as:
    - what happens when a Warlord runs around an area, provoking everything just to trigger the aggression and then just goes to town waiting for someone else to kill the said mobs so that the WL can collect free rewards? You might have to play with the DefaulAI, or the AI of monsters and hook a function that would reset the aggressor_id value under certain conditions, such as - the aggressor is not in X range or the aggressor is dead, or the aggressor is not online, or the NPC/Monster's AI is in INACTIVE state, which would indicate they are not in combat.
    - what happens when the aggressor is in party? should the said aggressor/dmg_dealer variable be a List/Set of players which are all eligible to deal dmg or receive rewards?

     

  11. Pick one and your guess would be as good as any!
     

    // Checks for armor set for the equipped chest.
    if (!ArmorSetsData.getInstance().isArmorSet(chest.getId()))
    {
           player.sendMessage("Error: You can't visualize current set.");
           useVoicedCommand("dress-armorpage", player, args);
           return false;
    }
    
    L2ArmorSet armoSet = ArmorSetsData.getInstance().getSet(chest.getId());
    if ((armoSet == null) || !armoSet.containAll(player))
    {
           player.sendMessage("Error: You can't visualize, set is not complete.");
           useVoicedCommand("dress-armorpage", player, args);
           return false;
    }
    
    if (!chest.getArmorItem().getItemType().getDescription().equals(dress.getType()))
    {
           player.sendMessage("Error: You can't visualize current set.");
           useVoicedCommand("dress-armorpage", player, args);
           return false;
    }



     

    4 hours ago, Yun_kr said:

    You can't visualize current set.

    sunrise pack

    1726446858630.jpg

     

  12. On 9/6/2024 at 12:20 AM, midnightx86 said:

    Hi, im using l2jmobius a classic version (Protocol 152),  when i mount a strider, it didn't show the strider skills, it shows the character one, someone have an idea why?

    Kind regards!

    Shot00000.jpg


    That is probably because on newer chronicles, the skills of pets were replaced by "ACTIONS". In any case, you can circumvent that like this:

    Find a packet titled something similar to "SkillList". It might be named differently. Depends on your build revision, I suppose. There, you can add an IF to check whether the character is mounted, then take the MOUNT ID, and fetch the skills of the player's summon/mount and add them to the list of available/known skills.

  13. 16 hours ago, gripao said:

    Hello!!

    I'm trying to make a quest to kill X mobs and give you a reward. I already have it ready, or so I think.

     

    Now I would like to add the function of making it daily or weekly. I've tried to control this in the same java file of the quest, but I haven't been able to...

     

    I was thinking of putting a marker on the quest so that it is "daily" or "weekly" and ¿generating another java program? that is in charge of restarting all the quests with the daily marker at 9 in the morning every day and on Wednesdays at 9 every Wednesday.

     

    Since I'm new to java programming (I had already programmed in bash) and developing l2j I don't know where I should create that program. Could it be in the java folder with a name like "org.l2jmobius.xxx.xxx"?

     

    I don't know how to approach it because I don't understand the logic of the files and that how runs every day to reset quest with marker.

     

    Could anyone help me understand this and explain how I should do it? I'm not asking for ready-made code, I can do that myself, but how to deal with it 😛

     

    I also don't know if this method is better or in the java file itself (but I haven't managed to do it this way).

     

    See you guys and thanks for all. 


    If you are this new to java, I would strongly recommend using IntelliJ Community Edition (free) instead of Eclipse since it indexes your entire source and makes it extremely easy to navigate forward and backward dependencies and method calls.

    Now, on the topic.

    Unless your Mobius sources are ancient, they should already have native support. It is called `DailyTaskManager`.
    It would be impossible to give you a mould without such a DailyTaskManager. I would suggest you parse/adapt it from a newer source version if you don't have it.

    The logic is rather simple once you get to understand it.
    1. You need a handler to count the mobs and give rewards, etc.
    2. You need to keep mission status for each individual player in the database.
    3. You need to INSERT the data when a player takes the mission, UPDATE it whenever you like, be it on every single mob or not (I would only update the DB on player disconnect/log out, or on mission completion), and SELECT/extract it when the player logs in (EnterWorld.java).
    4. You need a way to get the Mission Reset Type (Daily/Weekly), and you should call a reset method similar to the one at the bottom of my post from within the DailyTaskManager every day at 9am or whenever you like.

    Keep in mind that the above is not an exhaustive list, but some generalised approach aimed at helping you see the bigger picture.
     

    public synchronized void reset()
        {
            DailyMissionResetType reset = _holder.getResetType(); 
            switch (reset)
            {
                case NEVER ->
                {
                    return;
                }
                case MONTHLY ->
                {
                    if (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) != 1)
                    {
                        return;
                    }
                }
                case WEEKLY ->
                {
                    if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY)
                    {
                        return;
                    }
                }
                case WEEKEND ->
                {
                    if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY)
                    {
                        return;
                    }
                }
                case DAILY ->
                {
                }
                default ->
                {
                    LOGGER.warning("Unhandled daily mission reset type: " + reset);
                    return;
                }
            }
    
            try (
                    Connection con = DatabaseFactory.getConnection();
                    PreparedStatement ps = con.prepareStatement("DELETE FROM character_daily_rewards WHERE missionId = ? AND status = ?"))
            {
                ps.setInt(1, _holder.getId());
                ps.setInt(2, DailyMissionStatus.COMPLETED.getClientId());
                ps.execute();
            }
            catch (SQLException e)
            {
                LOGGER.log(Level.WARNING, "Error while clearing data for: " + getClass().getSimpleName(), e);
            }
            finally
            {
                _entries.clear();
                // resets the entries in the Manager.
                DailyMissionsManager.getInstance().clearEntries();
            }
        }


    *Disclaimer: The provided code snippet is just an adaptation of Mobius' implementation on newer chronicles.
     

  14. 6 hours ago, jullien said:

    캡2024-09-0513-07-55-899.thumb.jpg.f73b7913f4c61505c8986cf5148153fd.jpg

     

    커뮤니티 게시판에 마우스를 올리면 설명이 나타나게 하고 싶습니다. 

    I want to make a description appear when I hover over the community board.


    Newer clients have a feature called `itemtooltip`. High Five client does not support it natively, as far as I know. However, it should be recreatable by some skilled client dev.

    • Upvote 1
  15. The error says it all, buddy. You are trying to assign a value to an INT that is greater than MAX_INTEGER value. It won't work like this, and there will be so many more problems and places you'd have to touch.

    I'm even shocked that the client accepts these crazy-ass IDs, at all.

  16. 21 minutes ago, thepwned2 said:

    I can't use another ids due the icons of weapons will not work or they will be broken.

     

    My server can't run when i have so big id number in XML (using sunrise project Hi5)


    Sure you can change the weapon IDs. I can think of not one, but two approaches, outright.

    1. The Icons are supposed to be stored in a DAT file and sourced from there by the client. If you are talking about icons in HTML, then you could alter the structure of your datapack's items, and respectively the Item Template and Parser structures in the java core. The structural change would involve adding a hard-coded string for icons. You could also write a parser to get the info from within the client DAT file and put it in the XMLs.

    2. Alternatively, you could check if the `buildFastLookupTable()` method in the ItemData.java stores the item ID as an INT and change it to a LONG.

  17. 12 hours ago, LordPanic said:

    Q"after so so many years of work on that chronicle one would expect that we are just improving things at this point, but no... bugs?!"

    Interlude client is bad even if you manage to fix all core side problems so in the end u will still have some issues. This is why some big name servers to speed things up created their own project investing thousands either by reworking it to a decent level or by resorting to newer chronicles and downgrade them to interlude.

     


    I only have one comment, the rest I agree with. If they are well-known, it means their core is top notch and their work ethic, community management, advertising, business practices, etc are top notch too.

    Assuming they were to start anew with a different core, it would mean they would have to first fix the core, in its entirety, else they'd lose their players. It all sounds quite a bit speculative and extremely superficial to me.

    The best way to keep the authenticity is to upgrade, as opposed to downgrade. Making an IL core working on new client is better than making a new chronicle "play like IL", just like "downgrading" your favourite newer BMW car, say a 2024 X5, to a look like/resemble an older version, say the 2008 variant, won't make it drive nor sound anything like the original you are aiming for, unless you completely take its insides out and rebuild them from scratch. While it will probably run much more smoothly, people who love the older version and cannot stand the newer versions, such as the IL-loving community, would never be happy and outright refuse to get taken on a ride.

    It is a bit counter-intuitive, I know. But people are who they are, especially the IL community. Too stubborn to get outside of their comfort zone, I suppose. Not shaming anyone here, just expressing an opinion.

    In any case, now you can #start_hating.

     

  18. 1 hour ago, MegaCheat said:

    Maybe just give some code bcs I don’t understand->


    There is no code I could give that would do the job for you. It is quite tricky and depends on many unknown variables, mainly the source you use, the build version, etc. 

    And before you spill the beans - no, I don't know each and every single build by heart, so don't bother.

    Just find a packet named "Say" or something similar, and search for an IF or a SWITCH case featuring a party check. Inside, you add a simple IF to check whether the player has enough currency or not and to take their money.

    This is as far as any guide on the matter could go, without providing a bunch of code that you wouldn't be able to use in 99.9% of cases.

    • Haha 1
    • Upvote 1
  19. 6 hours ago, MegaCheat said:

    Hallo guys who know how to make 

    chat party and global need adena and gold coin for use it.. thanks Max


    You just intercept the chat attempt packet in the server, since it must go through the server to reach the other clients/players, and then set a couple of checks, if chat type is party or world -> do this and that, else do as before.

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