mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2024-11-23 15:20:52 +01:00
Fix flood race conditions
This commit is contained in:
parent
38cf88aeac
commit
b598425979
@ -204,12 +204,13 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
private int idleCycles;
|
private int idleCycles;
|
||||||
private volatile int unitCounter;
|
private volatile int unitCounter;
|
||||||
private volatile int rollerSpeed;
|
private volatile int rollerSpeed;
|
||||||
private int muteTime = Emulator.getConfig().getInt("hotel.flood.mute.time");
|
private final int muteTime = Emulator.getConfig().getInt("hotel.flood.mute.time", 30);
|
||||||
private long rollerCycle = System.currentTimeMillis();
|
private long rollerCycle = System.currentTimeMillis();
|
||||||
private volatile int lastTimerReset = Emulator.getIntUnixTimestamp();
|
private volatile int lastTimerReset = Emulator.getIntUnixTimestamp();
|
||||||
private volatile boolean muted;
|
private volatile boolean muted;
|
||||||
private RoomSpecialTypes roomSpecialTypes;
|
private RoomSpecialTypes roomSpecialTypes;
|
||||||
private TraxManager traxManager;
|
private TraxManager traxManager;
|
||||||
|
private boolean cycleOdd;
|
||||||
private long cycleTimestamp;
|
private long cycleTimestamp;
|
||||||
|
|
||||||
public Room(ResultSet set) throws SQLException {
|
public Room(ResultSet set) throws SQLException {
|
||||||
@ -1118,6 +1119,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void cycle() {
|
private void cycle() {
|
||||||
|
this.cycleOdd = !this.cycleOdd;
|
||||||
this.cycleTimestamp = System.currentTimeMillis();
|
this.cycleTimestamp = System.currentTimeMillis();
|
||||||
final boolean[] foundRightHolder = {false};
|
final boolean[] foundRightHolder = {false};
|
||||||
|
|
||||||
@ -1199,28 +1201,10 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
habbo.getHabboStats().mutedBubbleTracker = false;
|
habbo.getHabboStats().mutedBubbleTracker = false;
|
||||||
this.sendComposer(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.UNIGNORED).compose());
|
this.sendComposer(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.UNIGNORED).compose());
|
||||||
}
|
}
|
||||||
if (!habbo.hasPermission(Permission.ACC_CHAT_NO_FLOOD) && habbo.getHabboStats().chatCounter > 0) {
|
|
||||||
//if (habbo.getRoomUnit().talkTimeOut == 0 || currentTimestamp - habbo.getRoomUnit().talkTimeOut < 0)
|
|
||||||
{
|
|
||||||
habbo.getHabboStats().chatCounter--;
|
|
||||||
|
|
||||||
if (habbo.getHabboStats().chatCounter > 3) {
|
// Substract 1 from the chatCounter every odd cycle, which is every (500ms * 2).
|
||||||
final boolean floodRights = Emulator.getConfig().getBoolean("flood.with.rights");
|
if (this.cycleOdd && habbo.getHabboStats().chatCounter.get() > 0) {
|
||||||
final boolean hasRights = this.hasRights(habbo);
|
habbo.getHabboStats().chatCounter.decrementAndGet();
|
||||||
|
|
||||||
if (floodRights || !hasRights) {
|
|
||||||
if (this.chatProtection == 0) {
|
|
||||||
this.floodMuteHabbo(habbo, muteTime);
|
|
||||||
} else if (this.chatProtection == 1 && habbo.getHabboStats().chatCounter > 4) {
|
|
||||||
this.floodMuteHabbo(habbo, muteTime);
|
|
||||||
} else if (this.chatProtection == 2 && habbo.getHabboStats().chatCounter > 5) {
|
|
||||||
this.floodMuteHabbo(habbo, muteTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
habbo.getHabboStats().chatCounter = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.cycleRoomUnit(habbo.getRoomUnit(), RoomUnitType.USER)) {
|
if (this.cycleRoomUnit(habbo.getRoomUnit(), RoomUnitType.USER)) {
|
||||||
@ -3019,7 +3003,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
public void floodMuteHabbo(Habbo habbo, int timeOut) {
|
public void floodMuteHabbo(Habbo habbo, int timeOut) {
|
||||||
habbo.getHabboStats().mutedCount++;
|
habbo.getHabboStats().mutedCount++;
|
||||||
timeOut += (timeOut * (int) Math.ceil(Math.pow(habbo.getHabboStats().mutedCount, 2)));
|
timeOut += (timeOut * (int) Math.ceil(Math.pow(habbo.getHabboStats().mutedCount, 2)));
|
||||||
habbo.getHabboStats().chatCounter = 0;
|
habbo.getHabboStats().chatCounter.set(0);
|
||||||
habbo.mute(timeOut, true);
|
habbo.mute(timeOut, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3050,7 +3034,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
}
|
}
|
||||||
habbo.getHabboStats().lastChat = millis;
|
habbo.getHabboStats().lastChat = millis;
|
||||||
if (roomChatMessage != null && roomChatMessage.getMessage().equalsIgnoreCase("i am a pirate")) {
|
if (roomChatMessage != null && roomChatMessage.getMessage().equalsIgnoreCase("i am a pirate")) {
|
||||||
habbo.getHabboStats().chatCounter += 2;
|
habbo.getHabboStats().chatCounter.addAndGet(1);
|
||||||
Emulator.getThreading().run(new YouAreAPirate(habbo, this));
|
Emulator.getThreading().run(new YouAreAPirate(habbo, this));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3109,7 +3093,27 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
habbo.getHabboStats().chatCounter += 2;
|
if (!habbo.hasPermission(Permission.ACC_CHAT_NO_FLOOD)) {
|
||||||
|
final int chatCounter = habbo.getHabboStats().chatCounter.addAndGet(1);
|
||||||
|
|
||||||
|
if (chatCounter > 3) {
|
||||||
|
final boolean floodRights = Emulator.getConfig().getBoolean("flood.with.rights");
|
||||||
|
final boolean hasRights = this.hasRights(habbo);
|
||||||
|
|
||||||
|
if (floodRights || !hasRights) {
|
||||||
|
if (this.chatProtection == 0) {
|
||||||
|
this.floodMuteHabbo(habbo, muteTime);
|
||||||
|
return;
|
||||||
|
} else if (this.chatProtection == 1 && chatCounter > 4) {
|
||||||
|
this.floodMuteHabbo(habbo, muteTime);
|
||||||
|
return;
|
||||||
|
} else if (this.chatProtection == 2 && chatCounter > 5) {
|
||||||
|
this.floodMuteHabbo(habbo, muteTime);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ServerMessage prefixMessage = roomChatMessage.getHabbo().getHabboInfo().getRank().hasPrefix() ? new RoomUserNameChangedComposer(habbo, true).compose() : null;
|
ServerMessage prefixMessage = roomChatMessage.getHabbo().getHabboInfo().getRank().hasPrefix() ? new RoomUserNameChangedComposer(habbo, true).compose() : null;
|
||||||
ServerMessage clearPrefixMessage = prefixMessage != null ? new RoomUserNameChangedComposer(habbo).compose() : null;
|
ServerMessage clearPrefixMessage = prefixMessage != null ? new RoomUserNameChangedComposer(habbo).compose() : null;
|
||||||
|
@ -71,7 +71,7 @@ public class HabboStats implements Runnable {
|
|||||||
public int helpersLevel;
|
public int helpersLevel;
|
||||||
public boolean perkTrade;
|
public boolean perkTrade;
|
||||||
public long roomEnterTimestamp;
|
public long roomEnterTimestamp;
|
||||||
public int chatCounter;
|
public AtomicInteger chatCounter = new AtomicInteger(0);
|
||||||
public long lastChat;
|
public long lastChat;
|
||||||
public long lastUsersSearched;
|
public long lastUsersSearched;
|
||||||
public boolean nux;
|
public boolean nux;
|
||||||
|
Loading…
Reference in New Issue
Block a user