Feb 11, 2021, 04:58 PM | |
jjSendPacket not sending packets
Well, there's something weird going on with the jjSendPacket function, apparently.
As a server, if you put a negative number in its second parameter (e.g. `jjSendPacket(packet, -clientID)`), it will do something different than what it should do according to the documentation. Once you put the negative value of a clientID, the server decides not to send the packet back to players that are not using the clientIDs 1, 3 or 7 (probably also 15 and 31, since there seems to be a pattern here). Judging by the pattern of the numbers, i suspect there is something in the code that tries to do a bitwise "AND" operation (&) instead of using the "AND" logic comparator (&&), or perhaps some other bitwise operator mistake. I've sent an attachment with the mutator code I used to test this behavior with multiple clients. It should send packets to the server by just pressing the left mouse button. Note that when I used this mutator, there was no level script running alongside it in the background, nor any other mutator. I suggest that people should avoid using this until it gets fixed and that they rather should send packets to the players excluding the clientID they want manually. Here's a possible workaround: Code:
array<bool> clientExists(32,false); for (int i = 1;i < 32;i++) { jjPLAYER@ play = jjPlayers[i]; if (play.isActive) clientExists[play.clientID] = true; } for (int i = 1;i < 32;i++) { if (i == clientID) continue; if (clientExists[i]) { jjSendPacket(replyPacket, i); } }
__________________
. Last edited by Zah dud4h; Feb 12, 2021 at 03:51 AM. |
Feb 12, 2021, 10:21 AM | ||
Quote:
__________________
I am an official JJ2+ programmer and this has been an official JJ2+ statement. |
Feb 12, 2021, 10:27 AM | ||
Thanks for the report! This bug is news to me but I think I've gotten it fixed locally... I just want to be sure I'm understanding the report right. This sentence I'm having a little trouble parsing:
Quote:
|
Feb 12, 2021, 04:49 PM | |||
Quote:
Code:
for (int i = 1;i < 32;i++) { jjDebug(i + ": did it send? " + jjSendPacket(packet,-i)); } Quote:
However once you insert those who resulted as "false" in the return,it wouldn't send to anybody. I stand corrected when i claimed it has something to do with a bitwise operator,as this seems to be a different unrelated pattern. (2, 4, 5, 6, 15, 16, 17, 19, 20)
__________________
. |
Feb 12, 2021, 06:11 PM | |
Okay, great, that matches what I'm seeing. It's not a "pattern" so much as the game is trying to read unrelated memory by mistake. We should be able to get it fixed no problem now that we know about it though, and thanks for including that workaround script in the first post.
|
Mar 21, 2021, 06:24 PM | |
Fix will be available in 5.8.
|
«
Previous Thread
|
Next Thread
»
Thread Tools | |
|
|
All times are GMT -8. The time now is 03:14 PM.
Jazz2Online © 1999-INFINITY (Site Credits). Jazz Jackrabbit, Jazz Jackrabbit 2, Jazz Jackrabbit Advance and all related trademarks and media are ™ and © Epic Games. Lori Jackrabbit is © Dean Dodrill. J2O development powered by Loops of Fury and Chemical Beats. Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Original site design by Ovi Demetrian. DrJones is the puppet master. Eat your lima beans, Johnny.