Jump to content
  • 0

L2J Attack Delay


MoetsukiDansei

Question

spacer.png

As shown in the gif - after issuing an attack command the character moves to the target, after reaching the target it sometimes stops for 1-2 seconds before attacking. 

 

The pack in the clip is L2J_Mobius_04.0_GrandCrusade, but this issue exists on L2J master branch as well. 

 

It seems to occur far more frequently when attacking monsters that are farther away (e.g. 600+ distance), and happens very rarely when attacking monsters that are close.

 

Despawning all NPCs on the server, then spawning a single non-moving monster on a hill and the issue still occurs.

 

Though it was happening on flat ground (constant Z-axis), after reducing the number of calls to moveToPawn() (there were many for some reason),  it stopped occurring on flat surfaces. Even still it continues to happen on varying Z-axis surfaces. 

 

updatePosition() continues to be called even after the character has arrived on the client  (server still thinks the character has not arrived I guess).

 

calls to player.calculateDistance3D(_x, _y, _z) in ValidatePosition are returning 150+ throughout the movement.

if (player.calculateDistance3D(_x, _y, _z) > player.getStat().getMoveSpeed())
{
   if (player.isBlinkActive())
   {
      player.setBlinkActive(false);
   }
   else
   {
      player.setXYZ(_x, _y, _z);
   }
}

 changing

if (player.calculateDistance3D(_x, _y, _z) > player.getStat().getMoveSpeed())

to 

if (player.calculateDistance3D(_x, _y, _z) > 0)

seems to improve the situation maybe? I imagine there are terrible side-effects to this 😅 

 

 

I noticed this bug does not exist on ACIS servers, but comparing the two sources (I understand they are drastically different), I cannot seem to understand what may be causing this.

 

At this point I'm not sure where to look next. I have started looking at geodata/geoEngine from here, but as I'm pretty new to programming and even newer to L2J server development, I have no clue if this is remotely the correct direction.

 

I'm hoping someone can give me some advice, or a hint, or anything, where I might look next to solve this. 

Link to comment
Share on other sites

Recommended Posts

  • 0
3 minutes ago, Mobius said:

As a free user, you have access to the free release of the project but with limited features and no support.

I would recommend to wait for the next free release.

Sorry but what is the point of this reply? I am not asking YOU personally for help. Wouldn't it be strange if every user here replied and said they refuse to help? 

 

I have been debugging this for days. Pathetic I admit, but I am trying here. You see a novice programmer actively trying to debug an issue, asking for a hint from skilled individuals in a help forum, and you more or less suggest they quit, wait around for your next free release. This attitude is why I asked here, not your forums, nor in your discord. 

 

Anyway this is not an issue specific to L2JMobius, I did say in the post that the issue exists in L2J master branch as well. That being said if the issue existed in L2J dating back 10 years and exists now on the L2JMobius test realm (it does), I doubt waiting for the next free release, or subscribing for that matter, is going to do me much good. 

 

 

  • Haha 2
Link to comment
Share on other sites

  • 0

Guys just wanna sell their stuff.
It's a shame he'd loose the chance to explain his knowledge about his own project.

I do not have any insight on this but the distance to the enemy calculation must be in an infinite loop (when target is active).

And the attack function regarding an enemy monster must be also an infinite loop but with internal logic to allow the attack to be performed from a certain range depending on some other factors such weapon equipped, status given (buff) etc.


I would say for us to abandon the Java virtual layer  and go for L2OFF 🙂

Edited by RainforestSpirit
Tips
Link to comment
Share on other sites

  • 0
31 minutes ago, RainforestSpirit said:

Guys just wanna sell their stuff.
It's a shame he'd loose the chance to explain his knowledge about his own project.

I do not have any insight on this but the distance to the enemy calculation must be in an infinite loop (when target is active).

And the attack function regarding an enemy monster must be also an infinite loop but with internal logic to allow the attack to be performed from a certain range depending on some other factors such weapon equipped, status given (buff) etc.


I would say for us to abandon the Java virtual layer  and go for L2OFF 🙂

For someone who claims to not have insight, your words have given me inspiration to look somewhere I had not yet, and found something new. For that I thank you. 

I will continue to look for the solution until I find it, that or pull out all my hair, whichever comes first 😁

 

Unfortunately I don't think L2OFF is a good solution for me as customizing the game in many ways is of great interest to me and extending is surely out of my reach for the time being.

 

I will post the solution here if I do figure it out.

  • Like 1
Link to comment
Share on other sites

  • 0
5 hours ago, MoetsukiDansei said:

I noticed this bug does not exist on ACIS

it does. you cant even imagine how many clients have been contacted me to fix that. actually its way clear on their pack and i know a better way to trigger it so happens almost always and everywhere.

Link to comment
Share on other sites

  • 0

It seems that there is a synchronization problem. The server is not communicating correctly with the client and has not received the correct coordinates concerning the player's location at the right time.

  • Like 1
  • Upvote 1
Link to comment
Share on other sites

  • 0

Well I commented out: 

player.setXYZ(_x, _y, _z);

that may occur after the ValidatePosition packet is received. Then I placed a target dummy and teleported to a location ( x , y , z ) nearby.

I sent an attack command and recorded the difference between server/client coordinates for the character. 

 

Here's 4 tests from the same location. This is 1 single call (per test) to moveToLocation() (further calls were disabled for the test)

 

( y is the difference between client/server calculated by player.calculateDistance3D(_x, _y, _z))

spacer.png

( x is order of ValidateLocation packets received)

 

I did more tests but you get the idea. Given this is a single call to moveToLocation(), can I assume that this issue is geodata related and not functional miscalculations that occur during the move? Wouldn't the difference only get worse if it were due to calculations done server side?

 

If that's true I suppose I should:

1. learn to make geodata.

2. attempt a small area of very accurate data (preferably on some area of steep Z-axis change) 

3. try these tests on that area to see if the problem persists.

 

Or maybe it would be wiser to investigate further into the code for issues? 

 

Edited by MoetsukiDansei
clarification
Link to comment
Share on other sites

  • 0
14 hours ago, MoetsukiDansei said:

Sorry but what is the point of this reply? I am not asking YOU personally for help. Wouldn't it be strange if every user here replied and said they refuse to help? 

 

I have been debugging this for days. Pathetic I admit, but I am trying here. You see a novice programmer actively trying to debug an issue, asking for a hint from skilled individuals in a help forum, and you more or less suggest they quit, wait around for your next free release. This attitude is why I asked here, not your forums, nor in your discord. 

 

Anyway this is not an issue specific to L2JMobius, I did say in the post that the issue exists in L2J master branch as well. That being said if the issue existed in L2J dating back 10 years and exists now on the L2JMobius test realm (it does), I doubt waiting for the next free release, or subscribing for that matter, is going to do me much good. 

 

 

 

Unfortunately for the OP, even if they were to subscribe now, it would still be too late.
I don't react well to ingratitude.
 

13 hours ago, RainforestSpirit said:

Guys just wanna sell their stuff.
It's a shame he'd loose the chance to explain his knowledge about his own project.

I do not have any insight on this but the distance to the enemy calculation must be in an infinite loop (when target is active).

And the attack function regarding an enemy monster must be also an infinite loop but with internal logic to allow the attack to be performed from a certain range depending on some other factors such weapon equipped, status given (buff) etc.


I would say for us to abandon the Java virtual layer  and go for L2OFF 🙂

 

What you're suggesting is that I share the solution to a problem publicly so that others can benefit from it without paying for it. I have been resolving L2jServer issues for years, and those who truly care are aware of my knowledge.

  • Like 1
Link to comment
Share on other sites

  • 0
6 hours ago, Mobius said:

Unfortunately for the OP, even if they were to subscribe now, it would still be too late.
I don't react well to ingratitude.

I will say I am grateful for the opportunity to run around on a locally hosted game server, to dig around in some code and see if it's something I want to spend my time and money on. But I could have done that on other projects too: L2J, ACIS. And let's not ignore the fact that you have a public version not out of charity but because you consider it a worthwhile business model -  due to leaks, competition, sparking initial interest, having a larger base of bug testers, etc. -  who knows exactly why? It's another topic unto itself.


But man... I asked a issue in a help forum about a core L2J issue, using your public source as an example, and you shill the benefits of subscribing to your private sources? You expect a response that displays gratitude? 


Who would even invest in sources that don't have a proper change log? Someone with more money and curiosity than sense IMO.

 

If your work was really worth the investment (and let's be honest at $150 there wouldn't even have to be that much accomplished) then why wouldn't you publicly document your improvements? If it saves a programmer days, weeks, a single month of work, why would they not just spend the money? 

 

Instead you want people to take your word for it - how good your product is. Just hope your changes are something they would be interested in, relevant to the server they would like to make. 

 

I may be new to programming and L2J, but I am not new to life. If it looks and sounds like a scam, it probably is, stay away from it.

Saying you'd never have me as a customer? Might as well ban me from MLM schemes or purchasing lottery tickets while your at it. 

 

 

 

By all means allow Mobius to respond to my post here if he so pleases. But afterwards, if an admin could please lock the thread. Can't see this discussion being very productive going forward.

Edited by MoetsukiDansei
Link to comment
Share on other sites

  • 0
4 hours ago, MoetsukiDansei said:

I may be new to programming and L2J, but I am not new to life. If it looks and sounds like a scam, it probably is, stay away from it.


Thank you for confirming my point of view.
Ungrateful AF.

  • Upvote 2
Link to comment
Share on other sites

  • 0

 

8 hours ago, MoetsukiDansei said:

 

dude you should learn to respect the years the developer invested for this project so you can come here and cry or go use some garbage project, nothing is about you, you are not special and nobody cares if you are new to programing, you cant call scammer somebody without proof because he did not fix your issue for free, if you like the project and learn how to successfully respect somebodys work go pay him and ask fixes later, crying in public is not going to help

  • Upvote 1
Link to comment
Share on other sites

  • 0
1 hour ago, Nightw0lf said:

 

dude you should learn to respect the years the developer invested for this project so you can come here and cry or go use some garbage project, nothing is about you, you are not special and nobody cares if you are new to programing, you cant call scammer somebody without proof because he did not fix your issue for free, if you like the project and learn how to successfully respect somebodys work go pay him and ask fixes later, crying in public is not going to help

 

You have got to be kidding me if you think I am criticizing the guy for not fixing my problem. Do you even understand what I've said here?

 

I would have preferred it if the dude never showed up in the thread at all. Legitimately 0 interest in communicating with the guy.

 

The fact that some people think sharing something with the community in some way makes them immune to criticism... like the guy never criticized people he took code from? Bro... I've been here a month I've already read multiple counts of that.

 

By the way I've stopped using his source entirely. I will never use anything he's touched again. Can I talk smack now? Or... I'm indebted for life for building the public source and running around TI for a week?

Edited by MoetsukiDansei
  • Haha 1
  • Sad 1
Link to comment
Share on other sites

  • 0

guys, you dont get what MoetsukiDansei said...

MoetsukiDansei asked for help and Mobius came to say "hey, i will not help"

 

and MoetsukiDansei said well if you are not going to help dont bother posting

 

that's all there is to it.

calm your titties, no one offended or called anyone scammer



@MoetsukiDansei in my experience all packs have similar issues with server-> client-> server synchronization as melron said. a GOOD rework of movement system is needed on ALL of them. good luck on this adventure you started ❤️

Edited by SillverShadow
Link to comment
Share on other sites

  • 0
Your character is obviously desync. If it happens on any cases, even simple ones, it's very likely something like a stopMove() is missing, or than the calculation part is flawed. With a debug concept based on ExServerPrimitive you can easily figure out if server is currently doing crap.

About basic movement, no, it doesn't do that on aCis. Green dots show real desync based on what client expects. Desync stays low. Was attacking an elpy from great distance.

https://imgbb.com/fCQBKKS

On aCis, you can generate such desync if you frantically click on one direction and attack in another, but that's more a lack of locked movement state (during the 100ms updatePosition) rather than movement lacking itself.

Movement still needs some love. Edited by Tryskell
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock