Jump to content

Salty Mike

Members
  • Posts

    174
  • Credits

  • Joined

  • Last visited

  • Days Won

    16
  • Feedback

    0%

Salty Mike last won the day on November 8 2024

Salty Mike had the most liked content!

1 Follower

About Salty Mike

Contact Methods

  • Discord
    salty.mike

Profile Information

  • Current Mood
    Speachless
  • Gender
    Male
  • Country
    Bulgaria

Recent Profile Visitors

2,949 profile views

Salty Mike's Achievements

Community Regular

Community Regular (8/16)

  • Reacting Well Rare
  • Conversation Starter Rare
  • Dedicated Rare
  • First Post Rare
  • Collaborator Rare

Recent Badges

40

Reputation

  1. A couple of questions for the L2OFF devs out there: 1. Where are the packets encoded and decoded (or their structure saved) in the core, in the sense of - is there a file which lists the structure of packets, similar to L2J or the UIPacket.uc in the interface? 2. Is it possible to track (and record) SERVER<->CLIENT packet communication/exchange, and if so could you share how?
  2. What I sent is something you have in your server's core. You don't need to modify the client.
  3. 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
  4. 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.
  5. 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.
  6. 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.
  7. You've got a few options, in no particular order - L2J Eternity, L2J Sunrise, Mobius.
  8. 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
  9. 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?
  10. It won't work on any, as is. It is missing crucial pieces of the puzle, which you'd have to figure out on your own. And no, I'm not talking about the path-builder.
  11. I'm currently working on an advanced auto-farm compatible with older chronicles (C4, IL, HF, etc) and older L2J-Mobius builds. https://imgur.com/a/LJS2OMC
  12. Protocol version? Server side only or client side too?
  13. 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; }
  14. <-- Can do, for a fee.
  15. 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.
×
×
  • Create New...